/** Functions and tasks related to TeleCommand handling. * * @file * @author P. LEROY * * A group of functions to handle TeleCommands:\n * action launching\n * TC parsing\n * ... * */ #include "timegen_tc_handler.h" //*********** // RTEMS TASK rtems_task act__task( rtems_task_argument unused ) { /** This RTEMS task is responsible for launching actions upton the reception of valid TeleCommands. * * @param unused is the starting argument of the RTEMS task * * The ACTN task waits for data coming from an RTEMS msesage queue. When data arrives, it launches specific actions depending * on the incoming TeleCommand. * */ int result; rtems_status_code status; // RTEMS status code ccsdsTelecommandPacket_t TC; // TC sent to the ACTN task size_t size; // size of the incoming TC packet unsigned char subtype; // subtype of the current TC packet unsigned char time[6]; rtems_id queue_rcv_id; rtems_id queue_snd_id; status = get_message_queue_id_recv( &queue_rcv_id ); if (status != RTEMS_SUCCESSFUL) { PRINTF1("in ACTN *** ERR get_message_queue_id_recv %d\n", status) } status = get_message_queue_id_send( &queue_snd_id ); if (status != RTEMS_SUCCESSFUL) { PRINTF1("in ACTN *** ERR get_message_queue_id_send %d\n", status) } result = LFR_SUCCESSFUL; subtype = 0; // subtype of the current TC packet BOOT_PRINTF("in ACTN *** \n") while(1) { status = rtems_message_queue_receive( queue_rcv_id, (char*) &TC, &size, RTEMS_WAIT, RTEMS_NO_TIMEOUT); getTime( time ); // set time to the current time if (status!=RTEMS_SUCCESSFUL) { PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status) } else { subtype = TC.serviceSubType; switch(subtype) { case TC_SUBTYPE_ENTER: result = timegen_action_enter_mode( &TC, queue_snd_id, time ); close_action( &TC, result, queue_snd_id ); break; case TC_SUBTYPE_UPDT_TIME: result = timegen_action_update_time( &TC ); close_action( &TC, result, queue_snd_id ); break; // default: break; } } } } //*********** // TC ACTIONS int timegen_action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) { int ret; ret = LFR_SUCCESSFUL; return ret; } int timegen_action_update_time(ccsdsTelecommandPacket_t *TC) { int ret; ret = LFR_SUCCESSFUL; return ret; } //******************* // ENTERING THE MODES