//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;
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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;
    }
}
Ejemplo n.º 7
0
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;
    }
}
Ejemplo n.º 8
0
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;
    }
}