CameraInfoMg.java 6.86 KB
package com.sw.laryngoscope.manager;


import android.content.Context;
import android.os.SystemClock;
import android.widget.TextView;


import com.sw.laryngoscope.utils.Logger;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class CameraInfoMg implements Runnable {

	public static final String TAG = "CameraInfoMg";

	private static CameraInfoMg ourInstance = null;
	private Thread mCheckThread = null;
	boolean isRead = false;
	boolean isShowTypecTime = false;
	long showTypecTime = 0l;

	String internal_diameter = "/sys/class/weiken_adc_keydet/internal_diameter";
	String external_diameter = "/sys/class/weiken_adc_keydet/external_diameter";
	String number_insertions = "/sys/class/weiken_adc_keydet/number_insertions";
	String usage_time = "/sys/class/weiken_adc_keydet/usage_time";
	String serial_number1 = "/sys/class/weiken_adc_keydet/serial_number1";
	String serial_number2 = "/sys/class/weiken_adc_keydet/serial_number2";
	String mirror_model = "/sys/class/weiken_adc_keydet/mirror_model";


	public String data_internal_diameter = "";
	public String data_external_diameter = "";
	public String data_number_insertions = "";
	public String data_usage_time = "";
	public String data_serial_number = "";
	public String data_mirror_model = "";

	public static CameraInfoMg getInstance(Context context) {
        if ( null == ourInstance ) {
            synchronized (CameraInfoMg.class) {
                if (null == ourInstance ) {
                    ourInstance = new CameraInfoMg(context);
                }
            }
        }
        return ourInstance;
    }

	private CameraInfoMg(Context context) {
		mCheckThread = new Thread(this);
		mCheckThread.start();
	}

	int ty = -3;

	@Override
	public void run() {
		while(true) {
			try {
				if ( isRead ) {
					isRead = false;
					data_internal_diameter = readFileInt(internal_diameter) / 10.0f + "";
					data_external_diameter = readFileInt(external_diameter) / 10.0f + "";
					data_number_insertions = readFileInt(number_insertions) + "";
					data_usage_time = updateTimeFormat(readFileInt(usage_time));
					data_serial_number = readFileStr(serial_number1) + readFileStr(serial_number2);
					data_mirror_model = readFileStr(mirror_model);
					if ( mCameraInfoback != null ) {
						mCameraInfoback.setCamInfo(data_internal_diameter, data_external_diameter, data_number_insertions,
								data_usage_time, data_serial_number, data_mirror_model);
					}
				}
				if ( !data_serial_number.isEmpty() && !isShowTypecTime ) {
					data_usage_time = updateTimeFormat(readFileInt(usage_time));
					/*if ( mCameraInfoback != null ) {
						mCameraInfoback.setCamTime(data_usage_time);
					}*/
				}
				Logger.d("readFile " + toString());
				sleep(500);//ms 10 * 1000
				if ( mCameraInfoback != null ) {
					//mCameraInfoback.setCamTime(updateTimeFormat( (int) (SystemClock.elapsedRealtime() / 1000) ));
				}
				if ( isShowTypecTime && mCameraInfoback != null ) {
					showTypecTime += 500;
					mCameraInfoback.setCamTime(updateTimeFormat( (int) (
							showTypecTime / 1000) ));
					data_usage_time = updateTimeFormat( (int) (showTypecTime / 1000) );
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public String toString() {
		return "CameraInfoMg{" +
				"data_internal_diameter='" + data_internal_diameter + '\'' +
				", data_external_diameter='" + data_external_diameter + '\'' +
				", data_number_insertions='" + data_number_insertions + '\'' +
				", data_usage_time='" + data_usage_time + '\'' +
				", data_serial_number='" + data_serial_number + '\'' +
				", data_mirror_model='" + data_mirror_model + '\'' +
				'}';
	}

	public void startReadCam() {
		showTypecTime = 0;//System.currentTimeMillis();
		resetCamInfo();
		isRead = true;
		isShowTypecTime = true;
	}

	public void showTypeCCamTime() {
		showTypecTime = 0;//System.currentTimeMillis();
		isShowTypecTime = true;
		if ( isShowTypecTime && mCameraInfoback != null ) {
			mCameraInfoback.setCamTime(updateTimeFormat( (int) (
					showTypecTime / 1000) ));
		}
	}

	public void resetCamInfo() {
		data_internal_diameter = "";
		data_external_diameter = "";
		data_number_insertions = "";
		data_usage_time = "";
		data_serial_number = "";
		data_mirror_model = "";
		isShowTypecTime = false;
	}

	public void resetInfoCB() {
		resetCamInfo();
		if ( mCameraInfoback != null ) {
			mCameraInfoback.resetCamInfo();
		}
	}

	public void sleep(int ms) {
		try {
			Thread.sleep(ms);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public CameraInfoback mCameraInfoback;

	public void setCameraInfoCb(CameraInfoback cameraCallback) {
		this.mCameraInfoback = cameraCallback;
	}

	public interface CameraInfoback {
		void setCamInfo(String data_internal_diameter, String data_external_diameter,
						String data_number_insertions, String data_usage_time, String data_serial_number, String data_mirror_model);
		void resetCamInfo();
		void setCamTime(String data_usage_time);
	}

	public int readFileInt(String path) {
		int iRet = -1;
		BufferedReader read = null;
		File file = new File(path);
		if (!file.exists()) {
			return iRet;
		}
		try {
			read = new BufferedReader(new FileReader(file));
			String str = null;
			while((str = read.readLine()) != null) {
				//iRet = Integer.parseInt(str.substring(0, 1));
				str = getNumericChar(str);
				Logger.d("readFileInt " + str);
				if ( str.isEmpty() ) {
					iRet = 0;
				} else {
					iRet = Integer.parseInt(str);
				}
				Logger.d("readFileInt_ " + str);
			}
			read.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		return iRet;
	}

	public String readFileStr(String path) {
		String iRet = "";
		BufferedReader read = null;
		File file = new File(path);
		if (!file.exists()) {
			return iRet;
		}
		try {
			read = new BufferedReader(new FileReader(file));
			iRet = read.readLine();
			Logger.d("readFileStr " + iRet);
			iRet = getNumericChar(iRet);
			Logger.d("readFileStr_ " + iRet);
			read.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		return iRet;
	}

	public String getNumericChar(String str) {
		String regEx = "[^(a-zA-Z0-9)_-]";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(str);
		return m.replaceAll("").trim();
	}

	private String updateTimeFormat(int sec) {
		int second = sec;
		//计算小时
		int hh = second / 3600;
		//计算分钟
		int mm = second % 3600 / 60;
		//计算秒
		int ss = second % 60;
		String str = "";
		if (hh != 0) {//表示时间单位为三位
			str = String.format("%02d:%02d:%02d", hh, mm, ss);
		} else {
			str = String.format("%02d:%02d", mm, ss);
		}
		return str;
	}

}