//Tune to a Freq //Return FM_SUCCESS on success FM_FAILURE //on failure int FmRadioController_qcom :: TuneChannel ( long freq ) { int ret; struct timespec ts; if((cur_fm_state == FM_ON) && (freq > 0)) { set_fm_state(FM_TUNE_IN_PROGRESS); ret = QcomFmIoctlsInterface::set_freq(fd_driver, freq); if(ret == FM_SUCCESS) { ALOGI("FM set frequency command set successfully\n"); pthread_mutex_lock(&mutex_tune_compl_cond); ts = set_time_out(TUNE_EVENT_TIMEOUT); ret = pthread_cond_timedwait(&tune_compl_cond, &mutex_tune_compl_cond, &ts); pthread_mutex_unlock(&mutex_tune_compl_cond); }else { if((cur_fm_state != FM_OFF)) { set_fm_state(FM_ON); } ALOGE("FM set freq command failed\n"); } }else { ALOGE("Fm is not in proper state for tuning to a freq\n"); ret = FM_FAILURE; } return ret; }
void accept_client_requests(int server_socket) { int client_socket; struct sockaddr_in client_addr; socklen_t sin_size = sizeof client_addr; set_time_out(5); while ( (client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &sin_size)) > 0 ) { set_time_out(5); //handle_request(client_socket); pthread_t request_thread; pthread_create(&request_thread, NULL, thread_work, (void*)&client_socket); pthread_join(request_thread, NULL); } pthread_exit(NULL); }
uint8_t GSM_get_str(char start, char end, uint8_t value) { GSM.begin = start; GSM.end = end; GSM.status = WAITING; set_time_out(value); while(GSM.status != DONE && GSM.status != BUFFER_FULL && !timer1.time_out); if(timer1.time_out) { return FALSE; } else if(GSM.status == BUFFER_FULL) { switch_LED(LED2, ON); return FALSE; } return TRUE; }
//Downlaod FM SOC Patches //Turn On FM Chip //return FM_FAILURE on failure FM_SUCCESS //on success int FmRadioController_qcom :: Initialise ( ) { int ret; struct timespec ts; ConfigFmThs thsObj; if(cur_fm_state == FM_OFF) { set_fm_state(FM_ON_IN_PROGRESS); fd_driver = open(FM_DEVICE_PATH, O_RDONLY, O_NONBLOCK); if(fd_driver < 0) { ALOGE("FM kernel driver file open failed: %d\n", fd_driver); set_fm_state(FM_OFF); return FM_FAILURE; } ret = QcomFmIoctlsInterface::start_fm_patch_dl(fd_driver); if(ret != FM_SUCCESS) { ALOGE("FM patch downloader failed: %d\n", ret); close(fd_driver); fd_driver = -1; set_fm_state(FM_OFF); return FM_FAILURE; } if(event_listener_thread == 0) { ret = pthread_create(&event_listener_thread, NULL, handle_events, this); if(ret == 0) { ALOGI("Lock the mutex for FM turn on cond\n"); pthread_mutex_lock(&mutex_turn_on_cond); ts = set_time_out(READY_EVENT_TIMEOUT); ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_STATE, FM_RX); if(ret == FM_SUCCESS) { ALOGI("Waiting for timedout or FM on\n"); pthread_cond_timedwait(&turn_on_cond, &mutex_turn_on_cond, &ts); ALOGI("Unlocked the mutex and timedout or condition satisfied\n"); pthread_mutex_unlock(&mutex_turn_on_cond); if(cur_fm_state == FM_ON) { thsObj.SetRxSearchAfThs(FM_PERFORMANCE_PARAMS, fd_driver); return FM_SUCCESS; }else { QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_STATE, FM_DEV_NONE); event_listener_canceled = true; pthread_join(event_listener_thread, NULL); close(fd_driver); fd_driver = -1; set_fm_state(FM_OFF); return FM_FAILURE; } }else { ALOGE("Set FM on control failed\n"); pthread_mutex_unlock(&mutex_turn_on_cond); ALOGI("Unlocked the FM on cond mutex\n"); event_listener_canceled = true; pthread_join(event_listener_thread, NULL); close(fd_driver); fd_driver = -1; set_fm_state(FM_OFF); return FM_FAILURE; } }else { ALOGE("FM event listener thread failed: %d\n", ret); set_fm_state(FM_OFF); return FM_FAILURE; } }else { return FM_SUCCESS; } }else if(cur_fm_state != FM_ON_IN_PROGRESS) { return FM_SUCCESS; }else { return FM_FAILURE; } }
//search all valid stations //ToDo: return value confirm from JNI layer //and return freq only when we get tune after scan //complete event long FmRadioController_qcom :: SearchAll ( void ) { int ret; long freq = -1; struct timespec ts; if(cur_fm_state == FM_ON) { ALOGI("FM scan started\n"); set_fm_state(SCAN_IN_PROGRESS); ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SRCHMODE, SCAN_MODE); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SCANDWELL, SEARCH_DWELL_TIME); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SRCH_PTY, 0); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SRCH_PI, 0); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::start_search(fd_driver, SEARCH_UP); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } pthread_mutex_lock(&mutex_scan_compl_cond); ts = set_time_out(SCAN_COMPL_TIMEOUT); ALOGI("Wait for Scan Timeout or scan complete"); ret = pthread_cond_timedwait(&scan_compl_cond, &mutex_scan_compl_cond, &ts); ALOGI("Scan complete or timedout"); pthread_mutex_unlock(&mutex_scan_compl_cond); if((cur_fm_state != SCAN_IN_PROGRESS)) { }else { } freq = GetChannel(); }else { ALOGE("FM is not in proper state for Scan operation"); } return freq; }
//Seeks strong valid channel in downward direction //return -1 on failure or valid channel on success long FmRadioController_qcom :: SeekDown ( void ) { long ret; long freq = -1; struct timespec ts; if(cur_fm_state == FM_ON) { ALOGI("FM seek down started\n"); set_fm_state(SEEK_IN_PROGRESS); ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SRCHMODE, SEEK_MODE); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SCANDWELL, SEEK_DWELL_TIME); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SRCH_PTY, 0); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::set_control(fd_driver, V4L2_CID_PRV_SRCH_PI, 0); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } ret = QcomFmIoctlsInterface::start_search(fd_driver, SEARCH_DOWN); if(ret != FM_SUCCESS) { set_fm_state(FM_ON); return freq; } pthread_mutex_lock(&mutex_seek_compl_cond); ts = set_time_out(SEEK_COMPL_TIMEOUT); ret = pthread_cond_timedwait(&seek_compl_cond, &mutex_seek_compl_cond, &ts); pthread_mutex_unlock(&mutex_seek_compl_cond); if((cur_fm_state != SEEK_IN_PROGRESS) && !seek_canceled) { freq = GetChannel(); }else { } seek_canceled = false; return freq; }else { ALOGE("FM is not in proper state to start Seek down operation\n"); return freq; } }
void Pince::in_state_func() { switch (state) { case RANGE_DEPART : a1(); scv(); slr(); break; case TAPE_VERTICAL : a1(); scv(); slt(); break; case INTERMEDIAIRE_SORTIE : set_time_out(400, trigger_to_be); a1(); slo(); scv(); break; case HORIZ_VERT : a1(); slo(); scn(); break; case NOMINAL_VIDE : set_time_out(500, trigger_to_be); a0(); slo(); scn(); break; case ACTIF_TORCHE : a0(); slo(); scn(); break; case PRISE_TORCHE : Serial.println('# PRISE'); a0(); slf(); scn(); break; case ACTIF_FEU : a0(); slo(); scn(); break; case PRISE_FEU : Serial.println('# PRISE'); set_time_out(500, TIME_OUT); a0(); slf(); scn(); break; case WAIT_COOL_OK : break; case MONTE_COOL : set_time_out(800, TIME_OUT); a1(); slf(); scn(); break; case MONTE_COOL2 : a1(); slf(); scn(); break; case RETOURNE_COOL_N : set_time_out(500, TIME_OUT); a1(); slf(); scr(); break; case DESCEND_COOL_N : a0(); slf(); scr(); break; case POSE_COOL_N : set_time_out(500, TIME_OUT); a0(); slo(); scr(); break; case INT1_COOL_N : set_time_out(500, TIME_OUT); a1(); slo(); scr(); break; case INT2_COOL_N : set_time_out(500, TIME_OUT); a1(); slf(); scr(); break; case INT3_COOL_N : set_time_out(500, TIME_OUT); a1(); slf(); scn(); break; case INT_RANGE : a1(); slo(); break; case INT2_RANGE : set_time_out(10, trigger_to_be); a1(); slo(); break; } }
void Bras::in_state_func() { switch (state) { case RANGE_DEPART : scr(); a0(); spb(); pf(); break; case INT_RANGE : //va bumper scn(); a0(); spb(); pf(); break; case INT2_RANGE : set_time_out(400, trigger_to_be); scn(); a0(); spb(); pf(); break; case GO_ATTENTE : scn(); a1(); spb(); pf(); break; case ATTENTE_ACTIF : scn(); a1(); spb(); pf(); break; case DESCENTE_LAT : scn(); a4(); spb(); pf(); break; case DESCENTE_POMPE_LAT : scn(); a4(); spb(); po(); break; case PRISE_LAT : scn(); a4(); spb(); po(); break; case MONTE_VERT : set_time_out(500, TIME_OUT); scn(); a0(); spv(); po(); break; case MONTE : scn(); a0(); spb(); po(); break; case RANGE_PRISE : set_time_out(2000, TIME_OUT); scl(); a0(); spb(); po(); break; case LACHE : set_time_out(300, TIME_OUT); scl(); a0(); spb(); pf(); break; case MONTE_ECH : scn(); a3(); spb(); po(); break; case MONTE_ECH_VERT : sce(); a3(); spr(); po(); break; case RETOURNE_ECH : call_for_help(); sce(); a3(); spr(); po(); break; case REPLACE_APRES_ECH : set_time_out(300, TIME_OUT); scn(); a3(); spb(); pf(); break; case SEND_MINE : scv(); a4(); spv(); pf(); break; case SENDMASTER_PRET : scv(); a4(); spv(); po(); break; case PRISE_VERT : scv(); a4(); spv(); po(); break; case PRISE_COPAIN : a2(); sce(); spb(); po(); break; } }