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; }
/*---------------------------------------------------------------------------*/ 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; }