package com.xixun.communicate;

import android.os.Environment;
import android.os.SystemClock;

import com.xixun.display.MyLog;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by Administrator on 2018/04/10.
 */

public class Define {
    public static final Boolean bRunOnDebug = false;//true;//
    public static final Boolean bRunOn_GpsReport = true;//true;//
    public static final Boolean bRunOnDebug418 = true;// false;//

    public static boolean bSyncPlay_Main_Sub=false;//true;//

    public static final int FLASH_PAGE_SIZE=4 * 1024;
    public static final int FLASH_SECTIONT_NUM=1024;
    public static final int FLASH_SIZE=FLASH_PAGE_SIZE * FLASH_SECTIONT_NUM;

    public static final int iTimeOut_CommandAck = 1200;


    public static final byte UCHAR_SPECTIAL_FLAG = (0x55);
    public static final byte UCHAR_SPECTIAL_FLAG_REVERSE = (byte)~UCHAR_SPECTIAL_FLAG;
    public static final int UINT_SPECTIAL_FLAG = (0x55AA55AA);
    public static final int UINT_SPECTIAL_FLAG_REVERSE = ~UINT_SPECTIAL_FLAG;
    public static final String STRING_SPECTIAL_FLAG = "55AA55AA";
    public static final String STRING_SPECTIAL_FLAG_REVERSE = "AA55AA55";

    public static final String AllNetBroadcaseIP = "255.255.255.255";

    public static final int iDetectBytes = 20;

    public static final String strEqual = "=";
    public static final String strFunc = "Func" +strEqual;
    public static final String strAddress = "Address" +strEqual;
    public static final String strLength = "Length" +strEqual;
    public static final String strStringLength = "StringLength" + strEqual;


    public static final String strParamsSeg = ";";

    public static final String strFlashRead = "FlashRead";
    public static final String strFlashWrite = "FlashWrite";
    public static final String strFpgaRead = "FpgaRead";
    public static final String strFpgaWrite = "FpgaWrite";
    public static final String strRegRead = "RegRead";
    public static final String strRegWrite = "RegWrite";
    public static final String strGetGiGData = "GetGiGData ";
    public static final String strReset = "Reset";


    public static final String ROOT_PATH= "/";// SD_CARD_PATH // mainActivity.getApplicationContext().getFilesDir().getAbsolutePath();
     public static final String SD_CARD_PATH= "/mnt/sdcard/";
    //public static final String SD_CARD_PATH= "/sdcard/";

     public static final String STORAGE_PATH= "Sysolution/";//"/storage/sdcard0/Samtone/";
    public static final String RECE_FILES_PATH=STORAGE_PATH+ "ReceFiles/";
    public static final String WORK_FILES_PATH=STORAGE_PATH + "WorkFiles/";


    public static String _MOONCELL_FPGA_PARAMS_FILE_NAME="MC_FpgaParams";
    public static String MOONCELL_FPGA_PARAMS_FILE_NAME=WORK_FILES_PATH+_MOONCELL_FPGA_PARAMS_FILE_NAME;

    public static String _MOONCELL_FPGA_REG_FILE_NAME="MC_RegsParams";
    public static String MOONCELL_FPGA_REG_FILE_NAME=WORK_FILES_PATH+_MOONCELL_FPGA_REG_FILE_NAME;  // "Sysolution/" "WorkFiles/" MC_RegsParams"


    public static final String _MAIN_LOGO_FILE_NAME="MainLogo";
    public static final String _GUEST_LOGO_FILE_NAME="GuestLogo";
    public static final String MAIN_LOGO_FILE_NAME=RECE_FILES_PATH+_MAIN_LOGO_FILE_NAME;

    public static void Shell(String strCommand)
    {
        if (strCommand==null) return;
        if (strCommand.length()<=0) return;

        MyLog.i( "ShellCommand: "+strCommand  );
        try {
				/* Missing read/write permission, trying to chmod the file */
            Process su;
            su = Runtime.getRuntime().exec("/system/bin/su");
            String cmd = strCommand + "\nexit\n";
            su.getOutputStream().write(cmd.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
            //throw new SecurityException();
        }
    }

    public static void SetFileAuthority(boolean bXixunSuCommand,String fileName)
    {
        MyLog.i("chmod 777 "+ fileName);
        //ShellUtils.execCommand("chmod 777 "+ fileName, bXixunSuCommand, true);
       // ShellUtils.execCommand("chmod 777 "+ fileName, false, true);
		 ShellUtils.execCommand("chmod 777 "+ fileName, bXixunSuCommand, true);
        // ShellUtils.execCommand("chmod 777 "+ "/mnt/sdcard", bXixunSuCommand, true);
       // MyLog.i("chmod 777 xxx");
        //ShellUtils.execCommand("ls "+ fileName + " -l", true, true);
    }

    public static boolean FileExist(String fileName,long fileLength)
    {   boolean bRightFile=false;
        File file=new File(fileName);
        if (file==null) {
            MyLog.i("Empty file:"+fileName);
            return false;
        }
        bRightFile=(file.length()==fileLength);
        if (bRightFile==false)
        {
            MyLog.i(fileName + " File length:"+file.length());
            MyLog.i(fileName + " need length:"+fileLength);
        }
        return bRightFile;
    }

    public static int CreateFolder(String fileName)
    {
        //MyLog.i("Creat Folder :" + fileName);

        File file=new File(fileName);
        if (file.exists())
        if (file.isDirectory()) return 0;

         file.mkdir();

        file=new File(fileName);
        if (file.exists()) return 0;
        MyLog.i("Creat Folder Fail 1:" + fileName);

        ShellUtils.execCommand("mkdir "+ fileName, true, true);
        file=new File(fileName);
        if (file.exists()) return 0;

        MyLog.i("Creat Folder Fail 2 :" + fileName);
        return -1;

    }

    public static void FileCopy(String strSourceFile,String strDirecrtFile)
    {   FileOperator.copyDir(strSourceFile,strDirecrtFile);
        ShellUtils.execCommand("cp -af "+ strSourceFile+ " "+ strDirecrtFile,false);
        MyLog.i("cp -af "+ strSourceFile+ " "+ strDirecrtFile);
    }


    public static int  SetIntToBye(int iValue,byte [] pBuffer,int iOffset)
    {   if (pBuffer==null) return -1;
        pBuffer[iOffset++]=(byte) (iValue>>0);// 正文长度。
        pBuffer[iOffset++]=(byte) (iValue>>8);
        pBuffer[iOffset++]=(byte) (iValue>>16);
        pBuffer[iOffset++]=(byte) (iValue>>24);
        return 0;
    }

    public static int  GetBtyeToInt(byte [] pBuffer,int iOffset)
    {   long iValue=0;
        if (pBuffer==null) return -1;

       // MyLog.i("-----------iRetValue= "+pBuffer[0]+"  "+pBuffer[1]+"  "+pBuffer[2]+"  "+pBuffer[3]);

        iValue|=(pBuffer[iOffset++]<<0)&0xFF;
        iValue|=(long)(pBuffer[iOffset++]<<8)&0xFF00;
        iValue|=(long)(pBuffer[iOffset++]<<16)&0xFF0000;
        iValue|=(long)(pBuffer[iOffset++]<<24)&0xFF000000;
        return (int)iValue;
    }

    public static int  SetUshortToBye(int iValue,byte [] pBuffer,int iOffset)
    {   if (pBuffer==null) return -1;
        pBuffer[iOffset++]=(byte) (iValue>>0);// 正文长度。
        pBuffer[iOffset++]=(byte) (iValue>>8);
        return 0;
    }

    public static int  GetBtyeToUshort(byte [] pBuffer,int iOffset)
    {   long iValue=0;
        if (pBuffer==null) return -1;
        iValue|=(pBuffer[iOffset++]<<0)&0xFF;
        iValue|=(long)(pBuffer[iOffset++]<<8)&0xFF00;
        return (int)iValue;
    }


    public static int SetShortToByte(int iValue, byte[] pBuffer, int iOffset)
    {
        if (pBuffer == null) return -1;
        pBuffer[iOffset++] = (byte)(iValue >> 0);// 正文长度。
        pBuffer[iOffset++] = (byte)(iValue >> 8);
        return 0;
    }

    public static int SetIntToByte(int iValue, byte[] pBuffer, int iOffset)
    {
        if (pBuffer == null) return -1;
        pBuffer[iOffset++] = (byte)(iValue >> 0);// 正文长度。
        pBuffer[iOffset++] = (byte)(iValue >> 8);
        pBuffer[iOffset++] = (byte)(iValue >> 16);
        pBuffer[iOffset++] = (byte)(iValue >> 24);
        return 0;
    }

    public static int GetIntFromByte(byte[] pBuffer, int iOffset)
    {
        int iValue = 0;
        if (pBuffer == null) return -1;

        iValue += ((pBuffer[iOffset++]&0xff) << 0);
        iValue += ((pBuffer[iOffset++]&0xff) << 8);
        iValue += ((pBuffer[iOffset++]&0xff) << 16);
        iValue += ((pBuffer[iOffset++]&0xff) << 24);
        return iValue;
    }

    public static byte GetCheckCodeIn8(byte[] pBuffer, int iStart, int iEnd)
    {
        byte ucCheckCode = 0;
        for (; iStart < iEnd; iStart++) ucCheckCode += pBuffer[iStart];
        return (byte)~ucCheckCode;
    }


    public static byte	GetCheckCodeIn811(byte [] pBuffer,int iOffset,int iEndOffset)
    {	int 	i=0;
        byte	ucCheckCode=0;
        for (i=iOffset;i<iEndOffset;i++) {
            ucCheckCode += pBuffer[i];
            //MyLog.i("  pBuffer="+pBuffer[i]+"  ucCheckCode="+ucCheckCode);
        }
        //MyLog.i("---------------------------------------------------------------ucCheckCode="+ucCheckCode);
        return (byte)~ucCheckCode;
    }

    public static void PrintBuffer(String strBufferName,byte [] DataBuffer)
    {   if (DataBuffer==null) return;
        PrintBuffer(strBufferName,DataBuffer,DataBuffer.length);
    }

    public static void PrintBuffer(String strBufferName,byte [] DataBuffer,int iLength)
    {

        if (DataBuffer==null) return;
        if (iLength>DataBuffer.length) iLength=DataBuffer.length;
        String receive = "";

        for (int i = 0; i < iLength; i++)
        {   if (i%16==0) receive += "\r\n";
            receive += "0x";
            if ((DataBuffer[i] & 0xFF) < 0x10) receive += "0";
            receive += Integer.toHexString(DataBuffer[i] & 0xFF).toUpperCase() + " ";

        }
        MyLog.i("" + ((strBufferName==null) ? "Data":strBufferName)+" = " + receive);
    }

    public static String PrintIntToHex(int iValue)
    {   return  "0x"+Integer.toHexString(iValue).toUpperCase();
    }

    public static void SetTime(String strTime)
    {
        long lValue=Long.parseLong(strTime);
        if (lValue<0) return;

        //Date date=new Date();
        //date.setTime(lValue);
        SystemClock.setCurrentTimeMillis(lValue);

    }

    public static long GetTimeMs() {
        Date date = new Date();
        return date.getTime();//DateToLong(date);//
    }

    public static long DateToLong(Date time){
        SimpleDateFormat st=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//yyyyMMddHHmmss
        return Long.parseLong(st.format(time));
    }

    public static Date StringToDate(String s){
        Date date=null;
        SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            date=sd.parse(s);
        } catch (java.text.ParseException e) {
            MyLog.i("输入的日期格式有误！");
            e.printStackTrace();
        }
        return date;
    }

    public static int chksum_crc16 (byte [] pDat, int iOffset,int length)
    {
        byte da=0;
        int k =0;
        int crcval = 0;

        for(k=0;k < length;k++)
        {
            da= (byte)(crcval>>8); // 以8位二进制数的形式暂存CRC的高8位

            crcval<<=8; // 左移8位，相当于CRC的低8位乘以
            crcval&=0xFFFF;
            crcval ^= g_crctab16[(da^pDat[iOffset++])&0xFF]; // 高8位和当前字节相加后再查表求CRC ，再加上以前的CRC
        }
        return crcval&0xFFFF;
    }

    public static int Crc16_Add(int uiCrc,byte ucNewData)
    {   return (uiCrc >>> 8) ^ table[(uiCrc ^ ucNewData) & 0xff];
    }

    public static int Crc16(byte[] bytes) {
        int crc = 0x0000;

        for (byte b : bytes) {
            crc = (crc >>> 8) ^ table[(crc ^ b) & 0xff];
        }
        return crc;
    }

    public static int Crc32 (byte [] pDat, long length)
    {

        int crc = 0xFFFFFFFF;
        for (int i = 0; i < length; i++)
        {
            crc = ((crc >> 8)&0x00FFFFFF) ^ g_crctab32[(crc ^ pDat[i])&0xFF];
        }
        MyLog.i("Crc32:0x"+Long.toHexString((crc ^ 0xFFFFFFFF)&0xFFFFFFFF).toUpperCase());
        return (crc ^ 0xFFFFFFFF)&0xFFFFFFFF;
    }

    static int []g_crctab16={ // CRC余式表
            0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
            0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
            0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
            0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
            0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
            0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
            0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
            0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
            0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
            0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
            0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
            0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
            0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
            0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
            0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
            0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
            0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
            0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
            0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
            0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
            0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
            0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
            0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
            0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
            0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
            0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
            0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
            0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
            0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
            0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
            0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
            0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
    };
    static  int[] table = {
            0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
            0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
            0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
            0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
            0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
            0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
            0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
            0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
            0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
            0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
            0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
            0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
            0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
            0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
            0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
            0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
            0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
            0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
            0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
            0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
            0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
            0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
            0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
            0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
            0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
            0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
            0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
            0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
            0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
            0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
            0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
            0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040,
    };


    static int [] g_crctab32= {
            0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,0x706af48f,0xe963a535,0x9e6495a3,
            0x0edb8832,0x79dcb8a4,0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,0x90bf1d91,
            0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,
            0x136c9856,0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,0xfa0f3d63,0x8d080df5,
            0x3b6e20c8,0x4c69105e,0xd56041e4,0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,
            0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,0x45df5c75,0xdcd60dcf,0xabd13d59,
            0x26d930ac,0x51de003a,0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,0xb8bda50f,
            0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,
            0x76dc4190,0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,0x9fbfe4a5,0xe8b8d433,
            0x7807c9a2,0x0f00f934,0x9609a88e,0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,
            0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,0x1b01a57b,0x8208f4c1,0xf50fc457,
            0x65b0d9c6,0x12b7e950,0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,0xfbd44c65,
            0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,
            0x4369e96a,0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,0xaa0a4c5f,0xdd0d7cc9,
            0x5005713c,0x270241aa,0xbe0b1010,0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,
            0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,
            0xedb88320,0x9abfb3b6,0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,0x73dc1683,
            0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,
            0xf00f9344,0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,0x196c3671,0x6e6b06e7,
            0xfed41b76,0x89d32be0,0x10da7a5a,0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,
            0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,0xa6bc5767,0x3fb506dd,0x48b2364b,
            0xd80d2bda,0xaf0a1b4c,0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,0x4669be79,
            0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,
            0xc5ba3bbe,0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,0x2cd99e8b,0x5bdeae1d,
            0x9b64c2b0,0xec63f226,0x756aa39c,0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,
            0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,
            0x86d3d2d4,0xf1d4e242,0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,0x18b74777,
            0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,
            0xa00ae278,0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,0x4969474d,0x3e6e77db,
            0xaed16a4a,0xd9d65adc,0x40df0b66,0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,
            0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,0xcdd70693,0x54de5729,0x23d967bf,
            0xb3667a2e,0xc4614ab8,0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,0x2d02ef8d
    };

    public static int htons(int s){ return ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff));}
    public static int htonl(int l){ return ( (((l) & 0xff000000) >> 24) |  (((l) & 0x00ff0000) >> 8)  |  (((l) & 0x0000ff00) << 8)  |  (((l) & 0x000000ff) << 24) );}

    public static int hton_l(int data)
    {   int lValue=0;
        lValue|=(data>>0)&0xFF;
        lValue<<=8;
        lValue|=(data>>8)&0xFF;
        lValue<<=8;
        lValue|=(data>>16)&0xFF;
        lValue<<=8;
        lValue|=(data>>24)&0xFF;
        //MyLog.i(Thread.currentThread().getStackTrace()[2].getMethodName() + " L" + Thread.currentThread().getStackTrace()[2].getLineNumber() +
        //        " data="+Long.toHexString(data).toUpperCase() + " lValue="+Long.toHexString(lValue).toUpperCase());

        return lValue&0xFFFFFFFF;
    }


    //检查sd卡存不存在，并且获取路径
    public String getSDPath(){
        File sdDir = null;
        boolean sdCardExist = Environment.getExternalStorageState()
                .equals(android.os.Environment.MEDIA_MOUNTED);//判断sd卡是否存在
        if(sdCardExist)
        {
            sdDir = Environment.getExternalStorageDirectory();//获取跟目录
        }

        return sdDir.toString();
    }

}
