/** * Funcion a llamar luego de un Reset del PIC y luego de * @sa sta_onReset_memEEPROM para inicializar a los valore correctos las * variables de estado que necesitan ser modificadas. * * No todas son modificadas, hay muchas que se inicializan en otros * llamados anteriores o posteriores (@sa default_PIC_config, * @sa dep_init_suchai_hw, @sa dep_init_suchai_repos). */ void sta_onReset_BusStateRepo(void) { int param, res; // Set to default //param = STA_PPC_OPMODE_NORMAL; //ppc_set_opMode(¶m); // Increment reset counter param = ppc_get_resetCounter(NULL); param++; ppc_set_resetCounter(¶m); //print important StatusVars printf(" [sta_onResetStatRepo] Important STA_StateVar variables:\r\n"); res = ppc_get_resetCounter(NULL); printf(" * ppc_get_resetCounter: %d\r\n", res); #if (SCH_DATAREPOSITORY_VERBOSE>=1) if(res == 0){ printf(" * First time on, resetCounter = %d\n", res); } else{ printf(" * NOT the First time on, resetCounter = %d\n", res); } #endif param = 1; //verbose ppc_get_lastResetSource(¶m); res = ppc_get_hoursAlive(NULL); printf(" * ppc_get_hoursAlive: %d\r\n", res); res = ppc_get_hoursWithoutReset(NULL); printf(" * ppc_get_hoursWithoutReset: %d\r\n", res); res = ppc_get_wdt_state(NULL); printf(" * ppc_get_wdt_state: %d\r\n", res); param = 1; //verbose res = ppc_get_osc(¶m); //Antenna param = 1000; res = thk_get_AntSwitch_isOpen(¶m); printf(" * thk_get_AntSwitch_isOpen: %d\r\n", res); #if (SCH_DATAREPOSITORY_VERBOSE>=1) printf(" * Antenna Deployment rely on this var AND others\r\n"); #endif res = thk_get_dep_ant_deployed(NULL); printf(" * thk_get_dep_ant_deployed: %d\r\n", res); #if (SCH_DATAREPOSITORY_VERBOSE>=1) if(res == 0){ printf(" * Antenna Deployment is pending\r\n"); } else{ printf(" * Antenna Deployment was successfully completed\r\n"); } #endif // /* Debug purposes */ // int dep = thk_get_dep_ant_deployed(NULL); // if(dep == 0){ // printf("[sta_onResetStatRepo] All STA_StateVar variables:\r\n"); // //print all SatatusVars // srp_print_STA_stateVar(NULL); // } }
/** * Funcion para obtener una variable de estado * @param indxVar. Variable de estado que quiero modificar */ int sta_get_BusStateVar(STA_BusStateVar indxVar){ portBASE_TYPE semStatus = xSemaphoreTake( statusRepositorySem, portMAX_DELAY ); int value; int param; switch(indxVar){ // Bus Hw status (connected trough the PC/104 to the OBC -PIC24-) case sta_RTC_isAlive: value = RTC_isAlive(); break; case sta_TRX_isAlive: value = trx_isAlive(NULL); break; case sta_EPS_isAlive: value = eps_isAlive(NULL); break; case sta_MemEEPROM_isAlive: value = mem_EEPROM_isAlive(); break; case sta_MemSD_isAlive: value = memSD_isAlive(); break; case sta_AntSwitch_isOpen: param = 1000; value = thk_get_AntSwitch_isOpen(¶m); break; //FPL => (C&DH subsystem) case sta_fpl_index: //printf("FPL => (C&DH subsystem, Fligth Plan)\r\n"); value = drp_fpl_get_index(NULL); break; //PPC => (C&DH subsystem) case sta_ppc_opMode: //printf("PPC => (C&DH subsystem)\r\n"); value = ppc_get_opMode(NULL); break; case sta_ppc_lastResetSource: param = 0; //verbosity level value = ppc_get_lastResetSource(¶m); break; case sta_ppc_hoursAlive: value = ppc_get_hoursAlive(NULL); break; case sta_ppc_hoursWithoutReset: value = ppc_get_hoursWithoutReset(NULL); break; case sta_ppc_resetCounter: value = ppc_get_resetCounter(NULL); break; case sta_ppc_wdt: value = ppc_get_wdt_state(NULL); break; case sta_ppc_osc: param = 0; //verbosity level value = ppc_get_osc(¶m); break; case sta_ppc_MB_nOE_USB_nINT_stat: value = ppc_get_PPC_MB_nOE_USB_nINT(NULL); break; case sta_ppc_MB_nOE_MHX_stat: value = ppc_get_PPC_MB_nOE_MHX(NULL); break; case sta_ppc_MB_nON_MHX_stat: value = ppc_get_PPC_MB_nON_MHX(NULL); break; case sta_ppc_MB_nON_SD_stat: value = ppc_get_PPC_MB_nON_SD(NULL); break; //DEP => (C&DH subsystem) case sta_dep_ant_deployed: //printf("DEP => (C&DH subsystem)\r\n"); value = thk_get_dep_ant_deployed(NULL); break; case sta_dep_ant_tries: value = thk_get_dep_ant_tries(NULL); break; case sta_dep_year: value = thk_get_dep_year(NULL); break; case sta_dep_month: value = thk_get_dep_month(NULL); break; case sta_dep_week_day: value = thk_get_dep_week_day(NULL); break; case sta_dep_day_number: value = thk_get_dep_day_number(NULL); break; case sta_dep_hours: value = thk_get_dep_hours(NULL); break; case sta_dep_minutes: value = thk_get_dep_minutes(NULL); break; case sta_dep_seconds: value = thk_get_dep_seconds(NULL); break; //RTC => (C&DH subsystem) case sta_rtc_year: //printf("RTC => (C&DH subsystem)\r\n"); value = RTC_get_year(); break; case sta_rtc_month: value = RTC_get_month(); break; case sta_rtc_week_day: value = RTC_get_week_day(); break; case sta_rtc_day_number: value = RTC_get_day_num(); break; case sta_rtc_hours: value = RTC_get_hours(); break; case sta_rtc_minutes: value = RTC_get_minutes(); break; case sta_rtc_seconds: value = RTC_get_seconds(); break; #if (SCH_EPS_ONBOARD==1) case sta_eps_batt_temp_0: param = EPS_ID_batt_temp_0; value = eps_read_vars(¶m); break; case sta_eps_batt_temp_1: param = EPS_ID_batt_temp_1; value = eps_read_vars(¶m); break; case sta_eps_battery_voltage: param = EPS_ID_battery_voltage; value = eps_read_vars(¶m); break; case sta_eps_panel_current: param = EPS_ID_panel_current; value = eps_read_vars(¶m); break; case sta_eps_panel_voltage_1: param = EPS_ID_panel_voltage_1; value = eps_read_vars(¶m); break; case sta_eps_panel_voltage_2: param = EPS_ID_panel_voltage_2; value = eps_read_vars(¶m); break; case sta_eps_panel_voltage_3: param = EPS_ID_panel_voltage_3; value = eps_read_vars(¶m); break; case sta_eps_system_current: param = EPS_ID_system_current; value = eps_read_vars(¶m); break; #endif #if (SCH_TRX_ONBOARD==1) //TRX => (Communication subsystem) case sta_trx_opmode: value = trx_get_operation_mode(NULL); break; case sta_trx_count_tm: value = trx_get_count_tm(NULL); break; case sta_trx_count_tc: value = trx_get_count_tc(NULL); break; case sta_trx_day_last_tc: value = trx_get_day_last_tc(NULL); break; case sta_trx_beacon_bat_lvl: value = trx_get_beacon_level(NULL); break; case sta_trx_beacon_period: value = trx_get_beacon_period(NULL); break; case sta_trx_rx_baud: value = trx_get_rx_baud(NULL); break; case sta_trx_tx_baud: value = trx_get_tx_baud(NULL); break; #endif default: printf("[sta_get_stateVar] Error: No function/command for STA_StateVar %d \r\n", indxVar); value = -(0x7FFF); break; } semStatus = xSemaphoreGive(statusRepositorySem); return value; }
/** * Deploys satellite antennas * @param param 1 realime, 0 debug time * @return 1 success, 0 fails */ int thk_deploy_antenna(void *param) { #if (SCH_TASKDEPLOYMENT_VERBOSE>=1) printf("\n[thk_deploy_antenna] Deploying TRX Antenna... \r\n"); //rtc_print(NULL); #endif //Realtime=1 DebugTime=0 unsigned int delay_dep_time, delay_rest_dep_time, delay_recheck_dep_time; int mode= *( (int *)param ); if(mode) { // delay_dep_time = (THK_DEPLOY_TIME) / portTICK_RATE_MS; // delay_rest_dep_time = (THK_REST_DEPLOY_TIME) / portTICK_RATE_MS; // delay_recheck_dep_time = (THK_RECHECK_TIME) / portTICK_RATE_MS; delay_dep_time = (THK_DEPLOY_TIME); delay_rest_dep_time = (THK_REST_DEPLOY_TIME); delay_recheck_dep_time = (THK_RECHECK_TIME); } else { // delay_dep_time = (600) / portTICK_RATE_MS; // delay_rest_dep_time = (400) / portTICK_RATE_MS; // delay_recheck_dep_time = (200) / portTICK_RATE_MS; delay_dep_time = (600); delay_rest_dep_time = (400); delay_recheck_dep_time = (200); } //intentos quemando el nylon int tries_indx = 0; #if(SCH_ANTENNA_ONBOARD == 1) { for(tries_indx=1; tries_indx<=THK_MAX_TRIES_ANT_DEPLOY; tries_indx++) { #if (SCH_TASKDEPLOYMENT_VERBOSE>=2) printf(" [Deploying] Attempt #%d\r\n", tries_indx); #endif PPC_ANT12_SWITCH=1; PPC_ANT1_SWITCH=1; PPC_ANT2_SWITCH=0; //PPC_ANT1_SWITCH=0; //PPC_ANT2_SWITCH=1; // vTaskDelay(delay_dep_time); /* tiempo de intento ANT1 */ // vTaskDelay(delay_dep_time); /* tiempo de intento ANT1 */ __delay_ms(delay_dep_time); ClrWdt(); __delay_ms(delay_dep_time); PPC_ANT12_SWITCH=0; PPC_ANT1_SWITCH=0; PPC_ANT2_SWITCH=0; // vTaskDelay(delay_rest_dep_time); /* tiempo de descanso */ __delay_ms(delay_rest_dep_time); ClrWdt(); PPC_ANT12_SWITCH=1; PPC_ANT1_SWITCH=0; PPC_ANT2_SWITCH=1; //PPC_ANT1_SWITCH=1; //PPC_ANT2_SWITCH=0; // vTaskDelay(delay_dep_time); /* tiempo de intento ANT2 */ // vTaskDelay(delay_dep_time); /* tiempo de intento ANT2 */ __delay_ms(delay_dep_time); ClrWdt(); __delay_ms(delay_dep_time); PPC_ANT12_SWITCH=0; PPC_ANT1_SWITCH=0; PPC_ANT2_SWITCH=0; // vTaskDelay(delay_rest_dep_time); /* tiempo de descanso */ __delay_ms(delay_rest_dep_time); ClrWdt(); if( thk_get_AntSwitch_isOpen(&delay_recheck_dep_time) == 1 ) { thk_deployment_registration(&tries_indx); #if (SCH_TASKDEPLOYMENT_VERBOSE>=1) printf(" ANTENNA DEPLOYED SUCCESSFULLY [%d TRIES]\r\n", tries_indx); rtc_print(NULL); #endif return 1; } } } #endif //after the for() tries_indx == THK_MAX_TRIES_ANT_DEPLOY+1 tries_indx = THK_MAX_TRIES_ANT_DEPLOY+1; //por si acaso thk_deployment_registration(&tries_indx); #if (SCH_TASKDEPLOYMENT_VERBOSE>=2) printf(" ANTENNA DEPLOY FAIL [%d TRIES]\r\n", THK_MAX_TRIES_ANT_DEPLOY); rtc_print(NULL); #endif return 0; }