# HG changeset patch # User paul@pc-solar1.lab-lpp.local # Date 2013-01-29 13:37:37 # Node ID bc90ca24c483739325ba7def77a5e58c4ac69454 # Parent ad4f943b1cb564d79579070590b31c4e07b2e892 Old files removed diff --git a/FSW-rtems/bin/Debug/FSW-rtems.exe b/FSW-rtems/bin/Debug/FSW-rtems.exe deleted file mode 100644 index 4a3e6d5445b1c71554b92c3a011a8aae3f5e214e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@ -#include -#include - -#define NB_BINS_SPECTRAL_MATRIX 128 -#define NB_VALUES_PER_SPECTRAL_MATRIX 25 -#define TOTAL_SIZE_SPECTRAL_MATRIX NB_BINS_SPECTRAL_MATRIX * NB_VALUES_PER_SPECTRAL_MATRIX -#define NB_BINS_COMPRESSED_MATRIX_f0 11 -#define SIZE_COMPRESSED_SPECTRAL_MATRIX_f1 13 -#define SIZE_COMPRESSED_SPECTRAL_MATRIX_f2 12 -#define TOTAL_SIZE_COMPRESSED_MATRIX_f0 NB_BINS_COMPRESSED_MATRIX_f0 * NB_VALUES_PER_SPECTRAL_MATRIX -#define NB_AVERAGE_NORMAL_f0 96*4 -#define NB_SM_TO_RECEIVE_BEFORE_AVF0 8 - - -struct BP1_str{ - volatile unsigned char PE[2]; - volatile unsigned char PB[2]; - volatile unsigned char V0; - volatile unsigned char V1; - volatile unsigned char V2_ELLIP_DOP; - volatile unsigned char SZ; - volatile unsigned char VPHI; -}; -typedef struct BP1_str BP1_t; - -// ISR -rtems_isr spectral_matrices_isr( rtems_vector_number vector ); -// RTEMS TASKS -rtems_task spw_bppr_task(rtems_task_argument argument); -rtems_task spw_avf0_task(rtems_task_argument argument); -rtems_task spw_bpf0_task(rtems_task_argument argument); -rtems_task spw_smiq_task(rtems_task_argument argument); // added to test the spectral matrix simulator -// -rtems_task spw_bppr_task_rate_monotonic(rtems_task_argument argument); -void matrix_average(volatile int *spectral_matrix, float *averaged_spectral_matrix); -void matrix_compression(float *averaged_spectral_matrix, unsigned char fChannel, float *compressed_spectral_matrix); -void matrix_reset(float *averaged_spectral_matrix); -void BP1_set(float * compressed_spectral_matrix, unsigned char nb_bins_compressed_spectral_matrix, unsigned char * LFR_BP1); -void BP2_set(float * compressed_spectral_matrix, unsigned char nb_bins_compressed_spectral_matrix); - -#endif // FSW_RTEMS_PROCESSING_H_INCLUDED diff --git a/header/FSW-rtems.h b/header/FSW-rtems.h deleted file mode 100644 diff --git a/header/TC_handler.h b/header/TC_handler.h deleted file mode 100644 --- a/header/TC_handler.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef TC_HANDLER_H_INCLUDED -#define TC_HANDLER_H_INCLUDED - -#include -#include - -unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field -unsigned char currentTC_COMPUTED_CRC[2]; -unsigned int currentTC_LEN_RCV_AsUnsignedInt; -unsigned int currentTM_length; -unsigned char currentTC_processedFlag; - -unsigned int lookUpTableForCRC[256]; -void InitLookUpTableForCRC(); -void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData); - -unsigned char acceptTM(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV); - -unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int SID, unsigned int packetLength, - unsigned int coarseTime, unsigned int fineTime, TMHeader_t *TMHeader); -unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC); -unsigned int TC_checker(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV, - TMHeader_t *TM_Header, unsigned int *hlen, char *data); - -#endif // TC_HANDLER_H_INCLUDED diff --git a/header/WF_handler.h b/header/WF_handler.h deleted file mode 100644 --- a/header/WF_handler.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef WF_HANDLER_H_INCLUDED -#define WF_HANDLER_H_INCLUDED - - - -#endif // WF_HANDLER_H_INCLUDED diff --git a/header/grlibregs.h b/header/grlibregs.h deleted file mode 100644 --- a/header/grlibregs.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef GRLIBREGS_H_INCLUDED -#define GRLIBREGS_H_INCLUDED - -struct apbuart_regs_str{ - volatile unsigned int data; - volatile unsigned int status; - volatile unsigned int ctrl; - volatile unsigned int scaler; - volatile unsigned int fifoDebug; -}; - -struct gptimer_regs_str -{ - volatile unsigned int scaler_value; - volatile unsigned int scaler_reload; - volatile unsigned int conf; - volatile unsigned int unused0; - volatile unsigned int timer1_counter; - volatile unsigned int timer1_reload; - volatile unsigned int timer1_ctrl; - volatile unsigned int unused1; - volatile unsigned int timer2_counter; - volatile unsigned int timer2_reload; - volatile unsigned int timer2_ctrl; - volatile unsigned int unused2; - volatile unsigned int timer3_counter; - volatile unsigned int timer3_reload; - volatile unsigned int timer3_ctrl; - volatile unsigned int unused3; -}; -typedef struct gptimer_regs_str gptimer_regs_t; - -struct spectral_matrices_regs_str{ - volatile int ctrl; - volatile int address0; - volatile int address1; -}; -typedef struct spectral_matrices_regs_str spectral_matrices_regs_t; - -#endif // GRLIBREGS_H_INCLUDED diff --git a/src/FSW-config.c b/src/FSW-config.c deleted file mode 100644 --- a/src/FSW-config.c +++ /dev/null @@ -1,53 +0,0 @@ -#include - -// GRSPW0 resources -struct drvmgr_key grlib_grspw_0n1_res[] = { - {"txBdCnt", KEY_TYPE_INT, {(unsigned int)10}}, - {"rxBdCnt", KEY_TYPE_INT, {(unsigned int)10}}, - {"txDataSize", KEY_TYPE_INT, {(unsigned int)4096}}, - {"txHdrSize", KEY_TYPE_INT, {(unsigned int)20+6}}, // 6 is for the auxiliary header, when needed - {"rxPktSize", KEY_TYPE_INT, {(unsigned int)248+4}}, - KEY_EMPTY -}; - -#if 0 - /* APBUART0 */ - struct drvmgr_key grlib_drv_res_apbuart0[] = - { - {"mode", KEY_TYPE_INT, {(unsigned int)1}}, - {"syscon", KEY_TYPE_INT, {(unsigned int)1}}, - KEY_EMPTY - }; - /* APBUART1 */ - struct drvmgr_key grlib_drv_res_apbuart1[] = - { - {"mode", KEY_TYPE_INT, {(unsigned int)1}}, - {"syscon", KEY_TYPE_INT, {(unsigned int)0}}, - KEY_EMPTY - }; - /* LEON3 System with driver configuration for 2 APBUARTs, the - * the rest of the AMBA device drivers use their defaults. - */ - - /* Override default debug UART assignment. - * 0 = Default APBUART. APBUART[0], but on MP system CPU0=APBUART0, - * CPU1=APBUART1... - * 1 = APBUART[0] - * 2 = APBUART[1] - * 3 = APBUART[2] - * ... - */ - //int debug_uart_index = 2; /* second UART -- APBUART[1] */ -#endif - -// If RTEMS_DRVMGR_STARTUP is defined we override the "weak defaults" that is defined by the LEON3 BSP. - -struct drvmgr_bus_res grlib_drv_resources = { - .next = NULL, - .resource = { - {DRIVER_AMBAPP_GAISLER_GRSPW_ID, 0, &grlib_grspw_0n1_res[0]}, -// {DRIVER_AMBAPP_GAISLER_APBUART_ID, 0, &grlib_drv_res_apbuart0[0]}, -// {DRIVER_AMBAPP_GAISLER_APBUART_ID, 1, &grlib_drv_res_apbuart1[0]}, - RES_EMPTY /* Mark end of device resource array */ - } -}; diff --git a/src/FSW-rtems-processing.c b/src/FSW-rtems-processing.c deleted file mode 100644 --- a/src/FSW-rtems-processing.c +++ /dev/null @@ -1,423 +0,0 @@ -#include -#include -#include -#include - -float k14_re = 1; -float k14_im = 1; -float k14_bis_re = 1; -float k14_bis_im = 1; -float k14_tris_re = 1; -float k14_tris_im = 1; -float k15_re = 1; -float k15_im = 1; -float k15_bis_re = 1; -float k15_bis_im = 1; -float k24_re = 1; -float k24_im = 1; -float k24_bis_re = 1; -float k24_bis_im = 1; -float k24_tris_re = 1; -float k24_tris_im = 1; -float k25_re = 1; -float k25_im = 1; -float k25_bis_re = 1; -float k25_bis_im = 1; -float k34_re = 1; -float k34_im = 1; -float k44 = 1; -float k55 = 1; -float k45_re = 1; -float k45_im = 1; -float alpha_M = M_PI/4; - -volatile int spectral_matrix_f0_a[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_b[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_c[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_d[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_e[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_f[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_g[TOTAL_SIZE_SPECTRAL_MATRIX]; -volatile int spectral_matrix_f0_h[TOTAL_SIZE_SPECTRAL_MATRIX]; -float averaged_spectral_matrix_f0[TOTAL_SIZE_SPECTRAL_MATRIX]; -float compressed_spectral_matrix_f0[TOTAL_SIZE_COMPRESSED_MATRIX_f0]; -unsigned char LFR_BP1_F0[NB_BINS_COMPRESSED_MATRIX_f0*9]; - -BP1_t data_BP1[NB_BINS_COMPRESSED_MATRIX_f0]; - -extern rtems_id Task_id[]; /* array of task ids */ - -spectral_matrices_regs_t *spectral_matrices_regs; - -// Interrupt Service Routine for spectral matrices processing -rtems_isr spectral_matrices_isr( rtems_vector_number vector ) -{ - if (rtems_event_send( Task_id[4], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) - printf("In spectral_matrices_isr *** Error sending event to AVF0\n"); -} - -rtems_task spw_smiq_task(rtems_task_argument argument) // process the Spectral Matrices IRQ -{ - rtems_event_set event_out; - gptimer_regs_t *gptimer_regs; - gptimer_regs = (gptimer_regs_t *) REGS_ADDRESS_GPTIMER; - unsigned char nb_interrupt_f0 = 0; - - while(1){ - rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 - nb_interrupt_f0 = nb_interrupt_f0 + 1; - if (nb_interrupt_f0 == (NB_SM_TO_RECEIVE_BEFORE_AVF0-1) ){ - if (rtems_event_send( Task_id[6], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) - printf("In spw_smiq_task *** Error sending event to AVF0\n"); - nb_interrupt_f0 = 0; - } - gptimer_regs->timer2_ctrl = gptimer_regs->timer2_ctrl | 0x00000010; - } -} - -rtems_task spw_bppr_task(rtems_task_argument argument) -{ - rtems_status_code status; - rtems_event_set event_out; - static int nb_average_f0 = 0; - //static int nb_average_f1 = 0; - //static int nb_average_f2 = 0; - - while(1) - - spectral_matrices_regs = (struct spectral_matrices_regs_str *) REGS_ADDRESS_SPECTRAL_MATRICES; - spectral_matrices_regs->address0 = (volatile int) spectral_matrix_f0_a; - spectral_matrices_regs->address1 = (volatile int) spectral_matrix_f0_b; - - printf("In BPPR ***\n"); - - while(1){ // wait for an event to begin with the processing - status = rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); - if (status == RTEMS_SUCCESSFUL){ - if ((spectral_matrices_regs->ctrl & 0x00000001)==1){ - matrix_average(spectral_matrix_f0_a, averaged_spectral_matrix_f0); - spectral_matrices_regs->ctrl = spectral_matrices_regs->ctrl & 0xfffffffe; - //printf("f0_a\n"); - nb_average_f0++; - } - if (((spectral_matrices_regs->ctrl>>1) & 0x00000001)==1){ - matrix_average(spectral_matrix_f0_b, compressed_spectral_matrix_f0); - spectral_matrices_regs->ctrl = spectral_matrices_regs->ctrl & 0xfffffffd; - //printf("f0_b\n"); - nb_average_f0++; - } - if (nb_average_f0 == NB_AVERAGE_NORMAL_f0){ - matrix_compression(averaged_spectral_matrix_f0, 0, compressed_spectral_matrix_f0); - //printf("f0 compressed\n"); - nb_average_f0 = 0; - matrix_reset(averaged_spectral_matrix_f0); - } - } - } -} - -void matrix_average(volatile int *spectral_matrix, float *averaged_spectral_matrix) -{ - int i; - for(i=0; iaddress0 = (volatile int) spectral_matrix_f0_a; - spectral_matrices_regs->address1 = (volatile int) spectral_matrix_f0_b; - - nb_average = 0; - - PRINTF("In AVFO *** \n") - - while(1){ - rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 - for(i=0; ictrl = spectral_matrices_regs->ctrl & 0xfffffffe; // reset the appropriate bit in the register - nb_average = nb_average + NB_SM_TO_RECEIVE_BEFORE_AVF0; - if (nb_average == NB_AVERAGE_NORMAL_f0) { - nb_average = 0; - status = rtems_event_send( Task_id[7], RTEMS_EVENT_0 ); // sending an event to the task 7, BPF0 - if (status != RTEMS_SUCCESSFUL) printf("IN TASK AVF0 *** Error sending RTEMS_EVENT_0, code %d\n", status); - } - } -} - -rtems_task spw_bpf0_task(rtems_task_argument argument){ - rtems_event_set event_out; - - while(1){ - rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 - matrix_compression(averaged_spectral_matrix_f0, 0, compressed_spectral_matrix_f0); - BP1_set(compressed_spectral_matrix_f0, NB_BINS_COMPRESSED_MATRIX_f0, LFR_BP1_F0); - //PRINTF("IN TASK BPF0 *** Matrix compressed, parameters calculated\n") - } -} - -//******* -// UNUSED -rtems_task spw_bppr_task_rate_monotonic(rtems_task_argument argument) -{/* - rtems_status_code status; - //static int nb_average_f1 = 0; - //static int nb_average_f2 = 0; - - rtems_name name; - rtems_id period; - name = rtems_build_name( 'P', 'E', 'R', 'D' ); - status = rtems_rate_monotonic_create( name, &period ); - if( status != RTEMS_SUCCESSFUL ) { - printf( "rtems_rate_monotonic_create failed with status of %d\n", status ); - //exit( 1 ); - } - - spectral_matrices_regs = (struct spectral_matrices_regs_str *) REGS_ADDRESS_SPECTRAL_MATRICES; - spectral_matrices_regs->address0 = (volatile int) spectral_matrix_f0_a; - spectral_matrices_regs->address1 = (volatile int) spectral_matrix_f0_b; - - printf("In BPPR BIS ***\n"); - - while(1){ // launch the rate monotonic task - if ( rtems_rate_monotonic_period( period, 8 ) == RTEMS_TIMEOUT ){ - printf("TIMEOUT\n"); - //break; - } - status = rtems_event_send( Task_id[6], RTEMS_EVENT_0 ); // sending an event to the task 6, AVF0 - if (status != RTEMS_SUCCESSFUL) printf("IN TASK BPPR BIS *** Error sending RTEMS_EVENT_0 to AVF0, code %d\n", status); - } - - status = rtems_rate_monotonic_delete( period ); - if ( status != RTEMS_SUCCESSFUL ) { - printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status ); - //exit( 1 ); - } - status = rtems_task_delete( RTEMS_SELF ); // should not return - printf( "rtems_task_delete returned with status of %d.\n", status ); - //exit( 1 );*/ -} - - - - diff --git a/src/FSW-rtems.c b/src/FSW-rtems.c deleted file mode 100644 --- a/src/FSW-rtems.c +++ /dev/null @@ -1,535 +0,0 @@ -//************************* -// GPL reminder to be added -//************************* - -#define OFFSET_COARSE_TIME 4+10-1 // -1 => the receiver suppresses the target logical address -#define OFFSET_FINE_TIME OFFSET_COARSE_TIME+4 -#define TC_FIFO_SIZE 5 - -#define ADDRESS_APBUART_REGISTERS 0x80000100 -#define ADDRESS_GRSPW_REGISTERS 0x80000500 -#define APBUART_CTRL_REG_MASK_DB 0xfffff7ff - -#define GRSPW_DEVICE_NAME "/dev/grspw0" -#define UART_DEVICE_NAME "/dev/console" - -#include - -/* configuration information */ - -#define CONFIGURE_INIT -#include /* for device driver prototypes */ - -/* configuration information */ - -#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER -#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER - -#define CONFIGURE_MAXIMUM_TASKS 10 -#define CONFIGURE_RTEMS_INIT_TASKS_TABLE -#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) -#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 -#define CONFIGURE_INIT_TASK_PRIORITY 100 -#define CONFIGURE_MAXIMUM_DRIVERS 16 -#define CONFIGURE_MAXIMUM_PERIODS 1 - -#include - -/* If --drvmgr was enabled during the configuration of the RTEMS kernel */ -#ifdef RTEMS_DRVMGR_STARTUP - #ifdef LEON3 - /* Add Timer and UART Driver */ - #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER - #define CONFIGURE_DRIVER_AMBAPP_GAISLER_GPTIMER - #endif - #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER - #define CONFIGURE_DRIVER_AMBAPP_GAISLER_APBUART - #endif - #endif - #define CONFIGURE_DRIVER_AMBAPP_GAISLER_GRSPW /* GRSPW Driver */ - #include -#endif - -#include -#include -#include -#include -#include - -//#include -#include -#include -#include -#include -#include -#include - -/*char *tmGeneratorMsg[2] = { "NOTHING_TO_DO", - "TM_GENERATED" -};*/ - -// RTEMS TASKS -rtems_task Init( rtems_task_argument argument); /* forward declaration needed */ -rtems_task spw_recv_task(rtems_task_argument argument); -rtems_task spw_spiq_task(rtems_task_argument argument); -rtems_task spw_stat_task(rtems_task_argument argument); -rtems_task spw_wfrm_task(rtems_task_argument argument); -// ISR -rtems_isr waveforms_isr( rtems_vector_number vector ); - -int send_console_outputs_on_serial_port(); -int create_all_tasks(); -int start_all_tasks(); -int configure_spw_link(); -int configure_timer_for_sm_simulation(); -int configure_timer_for_wf_simulation(); -extern int rtems_cpu_usage_report(); -extern int rtems_cpu_usage_reset(); - -char *link_status(int status); -void print_statistics(spw_stats *); -extern int sched_yield(); -extern int errno; - -char *lstates[6] = {"Error-reset", - "Error-wait", - "Ready", - "Started", - "Connecting", - "Run" -}; - -int fdSPW; -int fdUART; - -rtems_id Task_id[10]; /* array of task ids */ -rtems_name Task_name[10]; /* array of task names */ - -rtems_task Init( rtems_task_argument ignored ) { - rtems_status_code status; - - send_console_outputs_on_serial_port(); - - create_all_tasks(); - start_all_tasks(); - - configure_spw_link(); - configure_timer_for_sm_simulation(); - configure_timer_for_wf_simulation(); - - InitLookUpTableForCRC(); // in TC_handler.h - - status = rtems_task_delete(RTEMS_SELF); -} - -rtems_task spw_recv_task( rtems_task_argument unused ) { - rtems_status_code status; - int len = 0; - unsigned int i = 0; - unsigned int data_length = 0; - ccsdsTelecommandPacket_t currentTC; - spw_ioctl_pkt_send spw_ioctl_send; - TMHeader_t TM_header; - char data[100]; - - for(i=0; i<100; i++) data[i] = 0; - - PRINTF("In RECV *** \n") - - while(1){ - len = read(fdSPW, (char*) ¤tTC, CCSDS_TC_PKT_MAX_SIZE); // the call to read is blocking - if (len == -1){ // error during the read call - PRINTF("In RECV *** last read call returned -1\n") - if (rtems_event_send( Task_id[3], SPW_LINKERR_EVENT ) != RTEMS_SUCCESSFUL) - PRINTF("IN RECV *** Error: rtems_event_send SPW_LINKERR_EVENT\n") - if (rtems_task_suspend(RTEMS_SELF) != RTEMS_SUCCESSFUL) - PRINTF("In RECV *** Error: rtems_task_suspend(RTEMS_SELF)\n") - } - else { - //PRINTF1("In RECV *** Got Message of length %d\n", len) - currentTC_LEN_RCV[0] = 0x00; - currentTC_LEN_RCV[1] = (unsigned char) len - CCSDS_TC_TM_PACKET_OFFSET - 3; // build the corresponding packet size field - currentTC_LEN_RCV_AsUnsignedInt = (unsigned int) len - CCSDS_TC_TM_PACKET_OFFSET - 3; // => -3 is for Prot ID, Reserved and User App bytes - // CHECK THE TC AND BUILD THE APPROPRIATE TM - data_length = TC_checker(¤tTC, currentTC_LEN_RCV_AsUnsignedInt, - &TM_header, &spw_ioctl_send.hlen, data); - spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header - spw_ioctl_send.hdr = (char*) &TM_header; - spw_ioctl_send.dlen = data_length; - spw_ioctl_send.data = data; - //printf("hlen %d, dlen %d\n", spw_ioctl_send.hlen, spw_ioctl_send.dlen); - // SEND PACKET - status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send ); - if (status!=RTEMS_SUCCESSFUL) printf("In TC_checker *** Error SPACEWIRE_IOCTRL_SEND\n"); - //PRINTF1("In TC_checker *** packet of size %d sent\n", spw_ioctl_send.sent) - } - } - - close(fdSPW); -} - -rtems_task spw_spiq_task(rtems_task_argument unused){ - rtems_event_set event_out; - struct grspw_regs_str *grspw_regs; - grspw_regs = (struct grspw_regs_str *) ADDRESS_GRSPW_REGISTERS; - - while(1){ - PRINTF("In SPIQ *** Waiting for SPW_LINKERR_EVENT\n") - rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT - - if (rtems_task_suspend(Task_id[1])!=RTEMS_SUCCESSFUL) // suspend RECV task - PRINTF("In SPIQ *** Error suspending RECV Task\n") - - configure_spw_link(); - - if (rtems_task_restart(Task_id[1], 1)!=RTEMS_SUCCESSFUL) // restart RECV task - PRINTF("In SPIQ *** Error resume RECV Task\n") - } -} - -rtems_isr waveforms_isr( rtems_vector_number vector ) -{ - if (rtems_event_send( Task_id[8], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) - printf("In spectral_matrices_isr *** Error sending event to WFRM\n"); -} - -rtems_task spw_wfrm_task(rtems_task_argument argument) -{ - unsigned int length; - unsigned int i = 0; - rtems_status_code status; - spw_ioctl_pkt_send spw_ioctl_send; - rtems_event_set event_out; - gptimer_regs_t *gptimer_regs; - gptimer_regs = (gptimer_regs_t *) REGS_ADDRESS_GPTIMER; - ExtendedTMHeader_t header; - - header.targetLogicalAddress = CCSDS_DESTINATION_ID; - header.protocolIdentifier = CCSDS_PROTOCOLE_ID; - header.reserved = 0x00; - header.userApplication = CCSDS_USER_APP; - header.packetID[0] = 0x0c; - header.packetID[1] = 0xcc; - header.packetSequenceControl[0] = 0x00; - header.packetSequenceControl[1] = 0x00; - header.packetLength[0] = 0x00; - header.packetLength[1] = 0x00; - header.dataFieldHeader[0] = 0x10; - header.dataFieldHeader[1] = 0x15; // service type - header.dataFieldHeader[2] = 0x03; // service subtype - header.dataFieldHeader[3] = CCSDS_DESTINATION_ID; - header.dataFieldHeader[4] = 0xaa; - header.dataFieldHeader[5] = 0xbb; - header.dataFieldHeader[6] = 0xcc; - header.dataFieldHeader[7] = 0xdd; - header.dataFieldHeader[8] = 0xee; - header.dataFieldHeader[9] = 0xff; - - header.auxiliaryHeader[0] = 0x00; - header.auxiliaryHeader[1] = 0x1f; - header.auxiliaryHeader[2] = 0x07; // PKT_CNT - header.auxiliaryHeader[3] = 0x00; // PKT_NR - header.auxiliaryHeader[4] = 0x00; // BLK_NR MSB - header.auxiliaryHeader[5] = 0x00; // BLK_NR LSB - - // BUILD THE PACKET HEADER - spw_ioctl_send.hlen = TM_HEADER_LEN + 4 + 6; // + 4 is for the protocole extra header, + 6 is for the auxiliary header - spw_ioctl_send.hdr = (char*) &header; - - while(1){ - rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 - for (i=0; i<7; i++) // send F0 - { - // BUILD THE DATA - if (i==6) { - spw_ioctl_send.dlen = 8 * NB_BYTES_SWF_BLK; - length = TM_LEN_SCI_NORM_SWF_340; - } - else { - spw_ioctl_send.dlen = 340 * NB_BYTES_SWF_BLK; - length = TM_LEN_SCI_NORM_SWF_8; - } - spw_ioctl_send.data = (char*) &waveform_snapshot_f0[i * 340 * NB_BYTES_SWF_BLK]; - // BUILD THE HEADER - header.packetLength[0] = (unsigned char) (length>>8); - header.packetLength[1] = (unsigned char) (length); - header.auxiliaryHeader[0] = SID_NORM_SWF_F0; // SID - // SEND PACKET - status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send ); - if (status!=RTEMS_SUCCESSFUL) printf("In WFRM *** Error SPACEWIRE_IOCTRL_SEND\n"); - //sched_yield(); - } - for (i=0; i<7; i++) // send F1 - { - // BUILD THE DATA - if (i==6) { - spw_ioctl_send.dlen = 8 * NB_BYTES_SWF_BLK; - length = TM_LEN_SCI_NORM_SWF_340; - } - else { - spw_ioctl_send.dlen = 340 * NB_BYTES_SWF_BLK; - length = TM_LEN_SCI_NORM_SWF_8; - } - spw_ioctl_send.data = (char*) &waveform_snapshot_f1[i * 340 * NB_BYTES_SWF_BLK]; - // BUILD THE HEADER - header.packetLength[0] = (unsigned char) (length>>8); - header.packetLength[1] = (unsigned char) (length); - header.auxiliaryHeader[0] = SID_NORM_SWF_F1; // SID - // SEND PACKET - status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send ); - if (status!=RTEMS_SUCCESSFUL) printf("In WFRM *** Error SPACEWIRE_IOCTRL_SEND\n"); - //sched_yield(); - } - for (i=0; i<7; i++) // send F0 - { - // BUILD THE DATA - if (i==6) { - spw_ioctl_send.dlen = 8 * NB_BYTES_SWF_BLK; - length = TM_LEN_SCI_NORM_SWF_340; - } - else { - spw_ioctl_send.dlen = 340 * NB_BYTES_SWF_BLK; - length = TM_LEN_SCI_NORM_SWF_8; - } - spw_ioctl_send.data = (char*) &waveform_snapshot_f2[i * 340 * NB_BYTES_SWF_BLK]; - // BUILD THE HEADER - header.packetLength[0] = (unsigned char) (length>>8); - header.packetLength[1] = (unsigned char) (length); - header.auxiliaryHeader[0] = SID_NORM_SWF_F2; // SID - // SEND PACKET - status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send ); - if (status!=RTEMS_SUCCESSFUL) printf("In WFRM *** Error SPACEWIRE_IOCTRL_SEND\n"); - //sched_yield(); - } - // irq processed, reset the related register of the timer unit - gptimer_regs->timer3_ctrl = gptimer_regs->timer3_ctrl | 0x00000010; - } -} - -int create_all_tasks() -{ - rtems_status_code status; - - Task_name[1] = rtems_build_name( 'R', 'E', 'C', 'V' ); - Task_name[3] = rtems_build_name( 'S', 'P', 'I', 'Q' ); - Task_name[4] = rtems_build_name( 'S', 'M', 'I', 'Q' ); - Task_name[5] = rtems_build_name( 'S', 'T', 'A', 'T' ); - Task_name[6] = rtems_build_name( 'A', 'V', 'F', '0' ); - Task_name[7] = rtems_build_name( 'B', 'P', 'F', '0' ); - Task_name[8] = rtems_build_name( 'W', 'F', 'R', 'M' ); - - // RECV - status = rtems_task_create( - Task_name[1], 200, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES, &Task_id[1] - ); - // SPIQ - status = rtems_task_create( - Task_name[3], 50, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES, &Task_id[3] - ); - // SMIQ - status = rtems_task_create( - Task_name[4], 10, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT, - RTEMS_DEFAULT_ATTRIBUTES, &Task_id[4] - ); - // STAT - status = rtems_task_create( - Task_name[5], 200, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES, &Task_id[5] - ); - // AVF0 - status = rtems_task_create( - Task_name[6], 50, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT, - RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[6] - ); - // BPF0 - status = rtems_task_create( - Task_name[7], 50, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[7] - ); - // WFRM - status = rtems_task_create( - Task_name[8], 100, RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[8] - ); - - return 0; -} - -int start_all_tasks() -{ - rtems_status_code status; - - status = rtems_task_start( Task_id[3], spw_spiq_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_SPIQ\n") - - status = rtems_task_start( Task_id[1], spw_recv_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_RECV\n") - - //status = rtems_task_start( Task_id[4], spw_bppr_task_rate_monotonic, 1 ); - status = rtems_task_start( Task_id[4], spw_smiq_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_BPPR\n") - - status = rtems_task_start( Task_id[5], spw_stat_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_STAT\n") - - status = rtems_task_start( Task_id[6], spw_avf0_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_AVF0\n") - - status = rtems_task_start( Task_id[7], spw_bpf0_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_BPF0\n") - - status = rtems_task_start( Task_id[8], spw_wfrm_task, 1 ); - if (status!=RTEMS_SUCCESSFUL) PRINTF("In INIT *** Error starting TASK_WFRM\n") - - return 0; -} - -int send_console_outputs_on_serial_port() // Send the console outputs on the serial port -{ - struct apbuart_regs_str *apbuart_regs; - - apbuart_regs = (struct apbuart_regs_str *) ADDRESS_APBUART_REGISTERS; - apbuart_regs->ctrl = apbuart_regs->ctrl & APBUART_CTRL_REG_MASK_DB; - PRINTF("\n\n\n\n\nIn INIT *** Now the console is on port COM1\n") - - return 0; -} - -int configure_spw_link() -{ - rtems_status_code status; - - close(fdSPW); // close the device if it is already open - fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware - if (fdSPW<0) PRINTF("In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n") - while(ioctl(fdSPW, SPACEWIRE_IOCTRL_START, 0) != RTEMS_SUCCESSFUL){ - PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" not started, retry\n") - close(fdSPW); // close the device - fdSPW = open(GRSPW_DEVICE_NAME, O_RDWR); // open the device. the open call reset the hardware - if (fdSPW<0) PRINTF("In configure_spw_link *** Error opening"GRSPW_DEVICE_NAME"\n") - rtems_task_wake_after(100); - } - - PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" opened and started successfully\n") - - // sets a few parameters of the link - status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RMAPEN, 1); // sets the RMAP enable bit - if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_RMAPEN\n") - // - status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception - if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n") - // - status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[3]); // sets the task ID to which an event is sent when a - if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs - // - status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 1); // automatic link-disabling due to link-error interrupts - if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n") - // - status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit - if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n") - - status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK_ON_FULL, 1); // sets the link-error interrupt bit - if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n") - // - //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DESTKEY, CCSDS_DESTINATION_ID); // sets the destination key - //if (status!=RTEMS_SUCCESSFUL) PRINTF("In RECV *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n") - // - PRINTF("In configure_spw_link *** "GRSPW_DEVICE_NAME" configured successfully\n") - - return RTEMS_SUCCESSFUL; -} - -int configure_timer_for_sm_simulation() // configure the timer for the spectral matrices simulation -{ - rtems_status_code status; - rtems_isr_entry old_isr_handler; - - status = rtems_interrupt_catch( spectral_matrices_isr, 0x19, &old_isr_handler) ; // 0x19 comes from sparcv8.pdf p.76 <=> interrupt_level_9 - if (status==RTEMS_SUCCESSFUL) PRINTF("In configure_timer_for_sm_simulation *** rtems_interrupt_catch successfullly configured\n") - - gptimer_regs_t *gptimer_regs; - gptimer_regs = (gptimer_regs_t *) REGS_ADDRESS_GPTIMER; - gptimer_regs->timer2_reload = 9999; // 10ms timer, base clock frequency is 1 MHz - gptimer_regs->timer2_ctrl = gptimer_regs->timer2_ctrl | 0x00000004; // LD load value from the reload register - gptimer_regs->timer2_ctrl = gptimer_regs->timer2_ctrl | 0x00000001; // EN enable the timer - gptimer_regs->timer2_ctrl = gptimer_regs->timer2_ctrl | 0x00000002; // RS restart - gptimer_regs->timer2_ctrl = gptimer_regs->timer2_ctrl | 0x00000008; // IE interrupt enable - - LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRICES ); - - return 1; -} - -int configure_timer_for_wf_simulation() // configure the timer for the spectral matrices simulation -{ - rtems_status_code status; - rtems_isr_entry old_isr_handler; - - status = rtems_interrupt_catch( waveforms_isr, 0x1a, &old_isr_handler) ; // 0x19 comes from sparcv8.pdf p.76 <=> interrupt_level_10 - if (status==RTEMS_SUCCESSFUL) PRINTF("In configure_timer_for_wf_simulation *** rtems_interrupt_catch successfullly configured\n") - - gptimer_regs_t *gptimer_regs; - gptimer_regs = (gptimer_regs_t *) REGS_ADDRESS_GPTIMER; - gptimer_regs->timer3_reload = 7999999; // 1s timer, base clock frequency is 1 MHz - gptimer_regs->timer3_ctrl = gptimer_regs->timer3_ctrl | 0x00000004; // LD load value from the reload register - gptimer_regs->timer3_ctrl = gptimer_regs->timer3_ctrl | 0x00000001; // EN enable the timer - gptimer_regs->timer3_ctrl = gptimer_regs->timer3_ctrl | 0x00000002; // RS restart - gptimer_regs->timer3_ctrl = gptimer_regs->timer3_ctrl | 0x00000008; // IE interrupt enable - - LEON_Unmask_interrupt( IRQ_WAVEFORMS ); - - return 1; -} - -rtems_task spw_stat_task(rtems_task_argument argument){ - int i; - i = 0; - PRINTF("In STAT *** \n") - while(1){ - rtems_task_wake_after(1000); - PRINTF1("%d\n", i) - if (i == 2) { - rtems_cpu_usage_report(); - rtems_cpu_usage_reset(); - i = 0; - } - else i++; - } -} - -char *link_status(int status){ - return lstates[status]; -} - -void print_statistics(spw_stats *stats) -{ - //printf(" ******** STATISTICS ******** \n"); - printf("Transmit link errors: %i\n", stats->tx_link_err); - printf("Receiver RMAP header CRC errors: %i\n", stats->rx_rmap_header_crc_err); - printf("Receiver RMAP data CRC errors: %i\n", stats->rx_rmap_data_crc_err); - printf("Receiver EEP errors: %i\n", stats->rx_eep_err); - printf("Receiver truncation errors: %i\n", stats->rx_truncated); - printf("Parity errors: %i\n", stats->parity_err); - printf("Escape errors: %i\n", stats->escape_err); - printf("Credit errors: %i\n", stats->credit_err); - printf("Disconnect errors: %i\n", stats->disconnect_err); - printf("Write synchronization errors: %i\n", stats->write_sync_err); - printf("Early EOP/EEP: %i\n", stats->early_ep); - printf("Invalid Node Address: %i\n", stats->invalid_address); - printf("Packets transmitted: %i\n", stats->packets_sent); - printf("Packets received: %i\n", stats->packets_received); -} - - - - - diff --git a/src/TC_handler.c b/src/TC_handler.c deleted file mode 100644 --- a/src/TC_handler.c +++ /dev/null @@ -1,276 +0,0 @@ -#include -#include - -char *errorCCSDSMsg[8] = { "ILLEGAL_APID 0", - "WRONG_LEN_PACKET 1", - "INCOR_CHECKSUM 2", - "ILL_TYPE 3", - "ILL_SUBTYPE 4", - "WRONG_APP_DATA 5", - "WRONG_CMD_CODE 6", - "CCSDS_TM_VALID 7" -}; - -unsigned int Crc_opt( unsigned char D, unsigned int Chk) -{ - return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]); -} - -void InitLookUpTableForCRC() -{ - unsigned int i, tmp; - for (i=0; i<256; i++) - { - tmp = 0; - if((i & 1) != 0) tmp = tmp ^ 0x1021; - if((i & 2) != 0) tmp = tmp ^ 0x2042; - if((i & 4) != 0) tmp = tmp ^ 0x4084; - if((i & 8) != 0) tmp = tmp ^ 0x8108; - if((i & 16) != 0) tmp = tmp ^ 0x1231; - if((i & 32) != 0) tmp = tmp ^ 0x2462; - if((i & 64) != 0) tmp = tmp ^ 0x48c4; - if((i & 128) != 0) tmp = tmp ^ 0x9188; - lookUpTableForCRC[i] = tmp; - } -} - -void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData) -{ - unsigned int Chk; - int j; - Chk = 0xffff; // reset the syndrom to all ones - for (j=0; j> 8); - crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff); -} - -unsigned int TC_checker(ccsdsTelecommandPacket_t *TC, unsigned int TC_LEN_RCV, - TMHeader_t *TM_Header, unsigned int *hlen, char *data) -{ - unsigned int code = 0; - unsigned int data_length = 0; - unsigned char computed_CRC[2]; - unsigned char subtype = 0; - - subtype = TC->dataFieldHeader[2]; - GetCRCAsTwoBytes( (unsigned char*) TC->packetID, computed_CRC, TC_LEN_RCV + 5 ); - code = acceptTM( TC, TC_LEN_RCV ) ; - //PRINTF1("in TC_checker *** %s\n", errorCCSDSMsg[code]); - if ( (code == 0) | (code == 1) | (code == 2) - | (code == 3) | (code == 4) | (code == 5) ) - { // generate TM_LFR_TC_EXE_CORRUPTED - // BUILD HEADER - TM_build_header( TM_LFR_TC_EXE_ERR, SID_EXE_CORR, TM_LEN_EXE_CORR, 0, 0, TM_Header); - // BUILD DATA - TM_build_data( TC, data, SID_EXE_CORR, computed_CRC); - data_length = TM_LEN_EXE_CORR + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN; - } - if (subtype == SID_TC_UPDT_TIME){ - // BUILD HEADER - TM_build_header( TM_LFR_TC_EXE_OK, SID_DEFAULT, TM_LEN_EXE, 0, 0, TM_Header); - // BUILD DATA - TM_build_data( TC, data, SID_DEFAULT, computed_CRC); - data_length = TM_LEN_NOT_IMP + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN; - } - else { // TM_LFR_TC_EXE_NOT_IMPLEMENTED - // BUILD HEADER - TM_build_header( TM_LFR_TC_EXE_ERR, SID_NOT_IMP, TM_LEN_NOT_IMP, 0, 0, TM_Header); - // BUILD DATA - TM_build_data( TC, data, SID_NOT_IMP, computed_CRC); - data_length = TM_LEN_NOT_IMP + CCSDS_TC_TM_PACKET_OFFSET - TM_HEADER_LEN; - } - - return data_length; -} - -unsigned char acceptTM(ccsdsTelecommandPacket_t * TMPacket, unsigned int TC_LEN_RCV) -{ - unsigned char pid = 0; - unsigned char category = 0; - unsigned int length = 0; - unsigned char packetType = 0; - unsigned char packetSubtype = 0; - unsigned char * CCSDSContent; - - // APID check *** APID on 2 bytes - pid = ((TMPacket->packetID[0] & 0x07)<<4) + ( (TMPacket->packetID[1]>>4) & 0x0f ); // PID = 11 *** 7 bits xxxxx210 7654xxxx - category = (TMPacket->packetID[1] & 0x0f); // PACKET_CATEGORY = 12 *** 4 bits xxxxxxxx xxxx3210 - if (pid!=CCSDS_PROCESS_ID) return ILLEGAL_APID; - if (category!=CCSDS_PACKET_CATEGORY) return ILLEGAL_APID; - - // packet length check - length = TMPacket->packetLength[0] * 256 + TMPacket->packetLength[1]; - if (length != TC_LEN_RCV ) return WRONG_LEN_PACKET; // LEN RCV != SIZE FIELD - if (length >= CCSDS_TC_PKT_MAX_SIZE) return WRONG_LEN_PACKET; // check that the packet does not exceed the MAX size - - packetType = TMPacket->dataFieldHeader[1]; - packetSubtype = TMPacket->dataFieldHeader[2]; - // service type, subtype and packet length check - if (packetType == 181){ - switch(packetSubtype){ //subtype, autorized values are 3, 20, 21, 24, 27, 28, 30, 40, 50, 60, 61 - case 3: - if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 20: - if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 21: - if (length!=(20-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 24: - if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 27: - if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 28: - if (length!=(14-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 30: - if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 40: - if (length!=(20-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 50: - if (length!=(50-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 60: - if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - case 61: - if (length!=(12-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - break; - default: - return ILL_SUBTYPE; - break; - } - } - else if (packetType == 9){ - if (packetSubtype!=129) return ILL_SUBTYPE; - if (length!=(18-CCSDS_TC_TM_PACKET_OFFSET)) return WRONG_LEN_PACKET; - } - else return ILL_TYPE; - - // source ID check // Source ID not documented in the ICD - - // packet error control, CRC check - CCSDSContent = (unsigned char*) TMPacket->packetID; - GetCRCAsTwoBytes(CCSDSContent, currentTC_COMPUTED_CRC, length + CCSDS_TC_TM_PACKET_OFFSET - 2); // 2 CRC bytes removed from the calculation of the CRC - if (currentTC_COMPUTED_CRC[0] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -2]) return INCOR_CHECKSUM; - if (currentTC_COMPUTED_CRC[1] != CCSDSContent[length + CCSDS_TC_TM_PACKET_OFFSET -1]) return INCOR_CHECKSUM; - - return CCSDS_TM_VALID; -} - -unsigned char TM_build_header( enum TM_TYPE tm_type, unsigned int SID, unsigned int packetLength, - unsigned int coarseTime, unsigned int fineTime, TMHeader_t *TMHeader) -{ - TMHeader->targetLogicalAddress = CCSDS_DESTINATION_ID; - TMHeader->protocolIdentifier = 0x02; - TMHeader->reserved = 0x00; - TMHeader->userApplication = 0x00; - TMHeader->packetID[0] = 0x0c; - TMHeader->packetSequenceControl[0] = 0xc0; - TMHeader->packetSequenceControl[1] = 0x00; - TMHeader->packetLength[0] = (unsigned char) (packetLength>>8); - TMHeader->packetLength[1] = (unsigned char) packetLength; - TMHeader->dataFieldHeader[0] = 0x10; - TMHeader->dataFieldHeader[3] = CCSDS_DESTINATION_ID; - switch (tm_type){ - case(TM_LFR_TC_EXE_OK): - TMHeader->packetID[1] = 0xc1; - TMHeader->dataFieldHeader[1] = 1; // type - TMHeader->dataFieldHeader[2] = 7; // subtype - break; - case(TM_LFR_TC_EXE_ERR): - TMHeader->packetID[1] = 0xc1; - TMHeader->dataFieldHeader[1] = 1; // type - TMHeader->dataFieldHeader[2] = 8; // subtype - break; - case(TM_LFR_HK): - TMHeader->packetID[1] = 0xc4; - TMHeader->dataFieldHeader[1] = 3; // type - TMHeader->dataFieldHeader[2] = 25; // subtype - break; - case(TM_LFR_SCI): - TMHeader->packetID[1] = 0xcc; - TMHeader->dataFieldHeader[1] = 21; // type - TMHeader->dataFieldHeader[2] = 3; // subtype - break; - case(TM_LFR_SCI_SBM): - TMHeader->packetID[1] = 0xfc; - TMHeader->dataFieldHeader[1] = 21; // type - TMHeader->dataFieldHeader[2] = 3; // subtype - break; - case(TM_LFR_PAR_DUMP): - TMHeader->packetID[1] = 0xc9; - TMHeader->dataFieldHeader[1] = 181; // type - TMHeader->dataFieldHeader[2] = 31; // subtype - break; - default: - return 0; - } - /*TMHeader->dataFieldHeader[4] = (unsigned char) (coarseTime>>24); - TMHeader->dataFieldHeader[5] = (unsigned char) (coarseTime>>16); - TMHeader->dataFieldHeader[6] = (unsigned char) (coarseTime>>8); - TMHeader->dataFieldHeader[7] = (unsigned char) (coarseTime); - TMHeader->dataFieldHeader[8] = (unsigned char) (fineTime>>8); - TMHeader->dataFieldHeader[9] = (unsigned char) (fineTime);*/ - TMHeader->dataFieldHeader[4] = 0xaa; - TMHeader->dataFieldHeader[5] = 0xbb; - TMHeader->dataFieldHeader[6] = 0xcc; - TMHeader->dataFieldHeader[7] = 0xdd; - TMHeader->dataFieldHeader[8] = 0xee; - TMHeader->dataFieldHeader[9] = 0xff; - return 1; -} - -unsigned char TM_build_data(ccsdsTelecommandPacket_t *TC, char* data, unsigned int SID, unsigned char *computed_CRC) -{ - unsigned int packetLength; - packetLength = TC->packetLength[0] * 256 + TC->packetLength[1]; - switch (SID){ - case (SID_NOT_EXE): - break; - case (SID_NOT_IMP): - data[0] = 0x9c; - data[1] = 0x42; - data[2] = TC->packetID[0]; - data[3] = TC->packetID[1]; - data[4] = TC->packetSequenceControl[0]; - data[5] = TC->packetSequenceControl[1]; - data[6] = TC->dataFieldHeader[1]; // type - data[7] = TC->dataFieldHeader[2]; // subtype - break; - case (SID_EXE_ERR): - break; - case (SID_EXE_CORR): - data[0] = 0x9c; - data[1] = 0x45; - data[2] = TC->packetID[0]; - data[3] = TC->packetID[1]; - data[4] = TC->packetSequenceControl[0]; - data[5] = TC->packetSequenceControl[1]; - data[6] = TC->dataFieldHeader[1]; // type - data[7] = TC->dataFieldHeader[2]; // subtype - data[8] = currentTC_LEN_RCV[0]; - data[9] = currentTC_LEN_RCV[1]; - data[10] = TC->packetLength[0]; - data[11] = TC->packetLength[1]; - data[12] = TC->dataAndCRC[packetLength]; - data[13] = TC->dataAndCRC[packetLength+1]; - data[14] = computed_CRC[0]; - data[15] = computed_CRC[1]; - break; - default: - return 0; - } - return 1; -} - - - - diff --git a/src/WF_handler.c b/src/WF_handler.c deleted file mode 100644