Example #1
0
ER GPSRec_Close(void)
{

    if (!bGPSRecOpened)
        return E_SYS;

    #if (RECEIVE_FROM_UART2)
    if (uart2_close() == E_OK)
    #else
    if (uart_close() == E_OK)
    #endif
        debug_msg(("UART2: close success\r\n"));
    else
        debug_err(("UART2: close fail!\r\n"));

    debug_msg("Terminate GPS receive task\r\n");

//    ter_tsk(GPSRECEIVE_ID);

    // log GPS data to file
    GPSRec_LogGPSData();
    // Gsensor close
    gsensor_close();

    ter_tsk(GPSRECEIVE_ID);

    loc_cpu();
    bGPSRecOpened = FALSE;
    unl_cpu();

    return E_OK;
}
Example #2
0
/*---------------------------------------------------------------------------*/
static void *gsensor_update_iv_thread(void *priv)
{
    struct acc_data *dat = (struct acc_data *)priv; 
    struct acc_priv *acc = &dat->acc;
    struct itemview *iv = dat->iv;    
    int err = 0, len = 0;
    char *status;

    LOGD(TAG "%s: Start\n", __FUNCTION__);
    if ((err = gsensor_open(acc))) {
    	memset(dat->info, 0x00, sizeof(dat->info));
        sprintf(dat->info, "INIT FAILED\n");
        iv->redraw(iv);
        FTGLOGE("gsensor_open() err = %d(%s)\n", err, dat->info);
        pthread_exit(NULL);
        return NULL;
    }
        
    while (1) {
        
        if (dat->exit_thd){
            FTGLOGE("dat -> exit_thd\n");
            break;
        }    
        if ((err = gsensor_read(acc))) {
            FTGLOGE("gsensor_update_info() = (%s), %d\n", strerror(errno), err);
            break;
        } else if ((err = gsensor_check_tilt(acc))) {
            FTGLOGE("gsensor_check_tilt() = (%s), %d\n", strerror(errno), err);
            break;
        } else if (acc->tilt >= TILT_MAX) {    
            FTGLOGE("invalid tilt = %d\n", acc->tilt);
            break;        
        } else if (TILT_UNKNOWN != acc->tilt) {
            acc->pos_chk |= (1 << acc->tilt);
        }

		if(acc->support_selftest == 0)
		{
			status = uistr_info_g_sensor_notsupport;
		}
		else if(acc->selftest == 1)
		{
			status = uistr_info_sensor_pass;
		}
		else if(acc->selftest == 0)
		{
			status = uistr_info_g_sensor_testing;
		}
		else
		{
			status = uistr_info_sensor_fail;
		}
        len = 0;
        len = snprintf(dat->info+len, sizeof(dat->info)-len, "%+6.3f %+6.3f %+6.3f\n%s (%s)\n%s: %s %s: %s\n%s: %s %s: %s\n%s: %s %s: %s\n", 
                 acc->evt.x, acc->evt.y, acc->evt.z, 
                 (acc->tilt != TILT_UNKNOWN) ? (uistr_info_sensor_pass) : ("NG"), gsensor_pos[acc->tilt],
                 gsensor_pos[TILT_X_POS], (acc->pos_chk & (1 << TILT_X_POS)) ? (uistr_info_sensor_pass) : (uistr_info_g_sensor_testing),
                 gsensor_pos[TILT_X_NEG], (acc->pos_chk & (1 << TILT_X_NEG)) ? (uistr_info_sensor_pass) : (uistr_info_g_sensor_testing),
                 gsensor_pos[TILT_Y_POS], (acc->pos_chk & (1 << TILT_Y_POS)) ? (uistr_info_sensor_pass) : (uistr_info_g_sensor_testing),
                 gsensor_pos[TILT_Y_NEG], (acc->pos_chk & (1 << TILT_Y_NEG)) ? (uistr_info_sensor_pass) : (uistr_info_g_sensor_testing),
                 gsensor_pos[TILT_Z_POS], (acc->pos_chk & (1 << TILT_Z_POS)) ? (uistr_info_sensor_pass) : (uistr_info_g_sensor_testing),
                 gsensor_pos[TILT_Z_NEG], (acc->pos_chk & (1 << TILT_Z_NEG)) ? (uistr_info_sensor_pass) : (uistr_info_g_sensor_testing));

		if(len < 0)
		{
		   LOGE(TAG "%s: snprintf error \n", __FUNCTION__); 
		   len = 0;
		}

        if((acc->support_selftest == 1) && (acc->selftest != 0))
		{
            len += snprintf(dat->info+len, sizeof(dat->info)-len, "%s %s\n", uistr_info_g_sensor_selftest, status);   
        }
		if(len < 0)
		{
		   LOGE(TAG "%s: snprintf error \n", __FUNCTION__); 
		   len = 0;
		}

        len += snprintf(dat->info+len, sizeof(dat->info)-len, "%s %s\n%s: %+6.3f %+6.3f %+6.3f\n%s: %+6.3f %+6.3f %+6.3f\n%s-%s: %+6.3f %+6.3f %+6.3f\n%s: %+6.3f %+6.3f %+6.3f\n%s: %+6.3f %+6.3f %+6.3f\n",
                 uistr_info_g_sensor_statistic,
                 (!acc->statistics) ? (uistr_info_g_sensor_doing) : (uistr_info_g_sensor_done),
                 uistr_info_g_sensor_max,
                 acc->max[0], acc->max[1], acc->max[2],
                 uistr_info_g_sensor_min,
                 acc->min[0], acc->min[1], acc->min[2],
                 uistr_info_g_sensor_max, uistr_info_g_sensor_min,
                 acc->max[0]-acc->min[0], acc->max[1]-acc->min[1], acc->max[2]-acc->min[2],
                 uistr_info_g_sensor_avg,
                 acc->avg[0], acc->avg[1], acc->avg[2],
                 uistr_info_g_sensor_std,
                 acc->std[0], acc->std[1], acc->std[2]);
		if(len < 0)
		{
		   LOGE(TAG "%s: snprintf error \n", __FUNCTION__); 
		   len = 0;
		}
        
        //len += snprintf(dat->info+len, sizeof(dat->info)-len, uistr_info_g_sensor_range);   
        iv->set_text(iv, &dat->text);
        iv->redraw(iv);
        /**
        pthread_mutex_lock (&gsensor_mutex);
        if(sp_ata_status == FTM_AUTO_ITEM)
        { 
            gsensor_thread_exit = true;  
            pthread_mutex_unlock (&gsensor_mutex);
            break;
        }
        pthread_mutex_unlock (&gsensor_mutex);
        **/
    }
    gsensor_close(acc);
    LOGD(TAG "%s: Exit\n", __FUNCTION__);    
    pthread_exit(NULL);
    
    return NULL;
}