亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smc_ecc.c

?? uCOS uCGUI uCFS 在ADS下調(diào)試通過 LPC2292
?? C
字號(hào):
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : smc_ecc.c
Purpose     : ECC functions for SMC driver
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
None.
---------------------------END-OF-HEADER------------------------------
*/

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "fs_port.h"
#ifndef FS_FARCHARPTR
#define FS_FARCHARPTR char *
#endif
#include "fs_dev.h"
#include "fs_conf.h"

#if FS_USE_SMC_DRIVER

#include "smc.h"


/*********************************************************************
*
*             #define constants
*
**********************************************************************
*/

#define SUCCESS          0          /* SUCCESS     */
#define ERROR           -1          /* ERROR       */
#define CORRECT          1          /* CORRECTABLE */

#define    BIT7    0x80
#define    BIT6    0x40
#define    BIT5    0x20
#define    BIT4    0x10
#define    BIT3    0x08
#define    BIT2    0x04
#define    BIT1    0x02
#define    BIT0    0x01

#define    BIT1BIT0    0x03
#define    BIT23       0x00800000L
#define    MASK_CPS    0x3f
#define    CORRECTABLE 0x00555554L


/*********************************************************************
*
*             Local Variables        
*
**********************************************************************
*/

static const unsigned char _FS_SMC_ecctable[256] = {
    0x00,0x55,0x56,0x03,0x59,0x0C,0x0F,0x5A,0x5A,0x0F,0x0C,0x59,0x03,0x56,0x55,0x00,
    0x65,0x30,0x33,0x66,0x3C,0x69,0x6A,0x3F,0x3F,0x6A,0x69,0x3C,0x66,0x33,0x30,0x65,
    0x66,0x33,0x30,0x65,0x3F,0x6A,0x69,0x3C,0x3C,0x69,0x6A,0x3F,0x65,0x30,0x33,0x66,
    0x03,0x56,0x55,0x00,0x5A,0x0F,0x0C,0x59,0x59,0x0C,0x0F,0x5A,0x00,0x55,0x56,0x03,
    0x69,0x3C,0x3F,0x6A,0x30,0x65,0x66,0x33,0x33,0x66,0x65,0x30,0x6A,0x3F,0x3C,0x69,
    0x0C,0x59,0x5A,0x0F,0x55,0x00,0x03,0x56,0x56,0x03,0x00,0x55,0x0F,0x5A,0x59,0x0C,
    0x0F,0x5A,0x59,0x0C,0x56,0x03,0x00,0x55,0x55,0x00,0x03,0x56,0x0C,0x59,0x5A,0x0F,
    0x6A,0x3F,0x3C,0x69,0x33,0x66,0x65,0x30,0x30,0x65,0x66,0x33,0x69,0x3C,0x3F,0x6A,
    0x6A,0x3F,0x3C,0x69,0x33,0x66,0x65,0x30,0x30,0x65,0x66,0x33,0x69,0x3C,0x3F,0x6A,
    0x0F,0x5A,0x59,0x0C,0x56,0x03,0x00,0x55,0x55,0x00,0x03,0x56,0x0C,0x59,0x5A,0x0F,
    0x0C,0x59,0x5A,0x0F,0x55,0x00,0x03,0x56,0x56,0x03,0x00,0x55,0x0F,0x5A,0x59,0x0C,
    0x69,0x3C,0x3F,0x6A,0x30,0x65,0x66,0x33,0x33,0x66,0x65,0x30,0x6A,0x3F,0x3C,0x69,
    0x03,0x56,0x55,0x00,0x5A,0x0F,0x0C,0x59,0x59,0x0C,0x0F,0x5A,0x00,0x55,0x56,0x03,
    0x66,0x33,0x30,0x65,0x3F,0x6A,0x69,0x3C,0x3C,0x69,0x6A,0x3F,0x65,0x30,0x33,0x66,
    0x65,0x30,0x33,0x66,0x3C,0x69,0x6A,0x3F,0x3F,0x6A,0x69,0x3C,0x66,0x33,0x30,0x65,
    0x00,0x55,0x56,0x03,0x59,0x0C,0x0F,0x5A,0x5A,0x0F,0x0C,0x59,0x03,0x56,0x55,0x00
};


static const unsigned char _FS_SMC_cis[]={ 0x01,0x03,0xD9,0x01,0xFF,0x18,0x02,0xDF,0x01,0x20 };



/*********************************************************************
*
*             Local functions
*
**********************************************************************
*/

/*********************************************************************
*
*             _FS_SMC_StringCmp
*/

static int _FS_SMC_StringCmp(FS_FARCHARPTR stringA, FS_FARCHARPTR stringB, int count)
{
    int i;
    for (i=0;i<count;i++)
        if (*stringA++ != *stringB++)   return(ERROR);
    return(SUCCESS);
}

/*********************************************************************
*
*             _FS_SMC_trans_result
*
    Transfer result
    LP14,12,10,... & LP15,13,11,... -> LP15,14,13,... & LP7,6,5,..
*/

static void _FS_SMC_trans_result(unsigned char reg2,unsigned char reg3,
                                  unsigned char *ecc1,unsigned char *ecc2)
{
    unsigned char a;                          /* Working for reg2,reg3        */
    unsigned char b;                          /* Working for ecc1,ecc2        */
    unsigned char i;                          /* For counting                 */

    a=BIT7; b=BIT7;                           /* 80h=10000000b                */
    *ecc1=*ecc2=0;                            /* Clear ecc1,ecc2              */
    for(i=0; i<4; ++i) {
        if ((reg3&a)!=0) *ecc1|=b;            /* LP15,13,11,9 -> ecc1         */
        b=b>>1;                               /* Right shift                  */
        if ((reg2&a)!=0) *ecc1|=b;            /* LP14,12,10,8 -> ecc1         */
        b=b>>1;                               /* Right shift                  */
        a=a>>1;                               /* Right shift                  */
    }
    b=BIT7;                                   /* 80h=10000000b                */
    for(i=0; i<4; ++i) {
        if ((reg3&a)!=0) *ecc2|=b;            /* LP7,5,3,1 -> ecc2            */
        b=b>>1;                               /* Right shift                  */
        if ((reg2&a)!=0) *ecc2|=b;            /* LP6,4,2,0 -> ecc2            */
        b=b>>1;                               /* Right shift                  */
        a=a>>1;                               /* Right shift                  */
    }
}


/*********************************************************************
*
*             _FS_SMC_calculate_ecc
*
    Calculating ECC
    data[0-255] -> ecc1,ecc2,ecc3 using CP0-CP5 code table[0-255]
*/

static void _FS_SMC_calculate_ecc(const unsigned char *table,unsigned char *data,
                                    unsigned char *ecc1,unsigned char *ecc2,
                                    unsigned char *ecc3)
{
    unsigned int i;                           /* For counting                 */
    unsigned char a;                          /* Working for table            */
    unsigned char reg1;                       /* D-all,CP5,CP4,CP3,...        */
    unsigned char reg2;                       /* LP14,LP12,L10,...            */
    unsigned char reg3;                       /* LP15,LP13,L11,...            */

    reg1=reg2=reg3=0;                         /* Clear parameter              */

    for(i=0; i<256; ++i) {
        a=table[data[i]];                     /* Get CP0-CP5 code from table  */
        reg1^=(a&MASK_CPS);                   /* XOR with a                   */
        if ((a&BIT6)!=0) {                    /* If D_all(all bit XOR) = 1    */
            reg3^=(unsigned char)i;           /* XOR with counter             */
            reg2^=~((unsigned char)i);        /* XOR with inv. of counter     */
        }
    }

    /* Trans LP14,12,10,... & LP15,13,11,... -> LP15,14,13,... & LP7,6,5,..   */
    _FS_SMC_trans_result(reg2,reg3,ecc1,ecc2);

    *ecc1=~(*ecc1); *ecc2=~(*ecc2);           /* Inv. ecc2 & ecc3             */
    *ecc3=((~reg1)<<2)|BIT1BIT0;              /* Make TEL format              */
}


/*********************************************************************
*
*             _FS_SMC_correct_data
*/
                             
static unsigned char _FS_SMC_correct_data(unsigned char *data,unsigned char *eccdata,
                                            unsigned char ecc1,unsigned char ecc2,
                                            unsigned char ecc3)
{
    unsigned long l;                          /* Working to check d           */
    unsigned long d;                          /* Result of comparison         */
    unsigned int i;                           /* For counting                 */
    unsigned char d1,d2,d3;                   /* Result of comparison         */
    unsigned char a;                          /* Working for add              */
    unsigned char add;                        /* Byte address of cor. DATA    */
    unsigned char b;                          /* Working for bit              */
    unsigned char bit;                        /* Bit address of cor. DATA     */

    d1=ecc1^eccdata[1]; d2=ecc2^eccdata[0];   /* Compare LP's                 */
    d3=ecc3^eccdata[2];                       /* Comapre CP's                 */
    d=((unsigned long)d1<<16)                 /* Result of comparison         */
        +((unsigned long)d2<<8)
        +(unsigned long)d3;

    if (d==0) return(0);                      /* If No error, return          */
    if (((d^(d>>1))&CORRECTABLE)==CORRECTABLE) {    /* If correctable         */
        l=BIT23;
        add=0;                                /* Clear parameter              */
        a=BIT7;
        for(i=0; i<8; ++i) {                  /* Checking 8 bit               */
            if ((d&l)!=0) add|=a;             /* Make byte address from LP's  */
            l>>=2; a>>=1;                     /* Right Shift                  */
        }
        bit=0;                                /* Clear parameter              */
        b=BIT2;
        for(i=0; i<3; ++i) {                  /* Checking 3 bit               */
            if ((d&l)!=0) bit|=b;             /* Make bit address from CP's   */
            l>>=2; b>>=1;                     /* Right shift                  */
        }
        b=BIT0;
        data[add]^=(b<<bit);                  /* Put corrected data           */
        return(1);
    }
    i=0;                                      /* Clear count                  */
    d&=0x00ffffffL;                           /* Masking                      */
    while(d) {                                /* If d=0 finish counting       */
        if (d&BIT0) ++i;                      /* Count number of 1 bit        */
        d>>=1;                                /* Right shift                  */
    }
    if (i==1) {                               /* If ECC error                 */
        eccdata[1]=ecc1; eccdata[0]=ecc2;    /* Put right ECC code           */
        eccdata[2]=ecc3;
        return(2);
    }
    return(3);                                /* Uncorrectable error          */
}


/*********************************************************************
*
*             Global functions
*
**********************************************************************
*/

/*********************************************************************
*
*             FS__SMC_ECC_Chk_CISdata
*/

int FS__SMC_ECC_Chk_CISdata(unsigned char *buf, unsigned char *redundant)
{
    unsigned char ecc1,ecc2,ecc3;
    unsigned int err;
    _FS_SMC_calculate_ecc(_FS_SMC_ecctable,buf,&ecc1,&ecc2,&ecc3);
    err=_FS_SMC_correct_data(buf,redundant+0x0D,ecc1,ecc2,ecc3);
    if(err==0 || err==1 || err==2)
        return(_FS_SMC_StringCmp((FS_FARCHARPTR)buf,(FS_FARCHARPTR)_FS_SMC_cis,10));
    buf+=0x100;
    _FS_SMC_calculate_ecc(_FS_SMC_ecctable,buf,&ecc1,&ecc2,&ecc3);
    err=_FS_SMC_correct_data(buf,redundant+0x08,ecc1,ecc2,ecc3);
    if(err==0 || err==1 || err==2)
        return(_FS_SMC_StringCmp((FS_FARCHARPTR)buf,(FS_FARCHARPTR)_FS_SMC_cis,10));
    return(ERROR);
}


/*********************************************************************
*
*             FS__SMC_ECC_Chk_ECCdata
*/

int FS__SMC_ECC_Chk_ECCdata(unsigned char *buf, unsigned char *redundant)
{
    unsigned char ecc1,ecc2,ecc3;
    unsigned int err, corr=SUCCESS;
    _FS_SMC_calculate_ecc(_FS_SMC_ecctable,buf,&ecc1,&ecc2,&ecc3);
    err=_FS_SMC_correct_data(buf,redundant+0x0D,ecc1,ecc2,ecc3);
    if(err==1 || err==2)    corr=CORRECT;
    else if(err)            return(ERROR);
    buf+=0x100;
    _FS_SMC_calculate_ecc(_FS_SMC_ecctable,buf,&ecc1,&ecc2,&ecc3);
    err=_FS_SMC_correct_data(buf,redundant+0x08,ecc1,ecc2,ecc3);
    if(err==1 || err==2)    corr=CORRECT;
    else if(err)            return(ERROR);
    return(corr);
}


/*********************************************************************
*
*             FS__SMC_ECC_Set_ECCdata
*/

void FS__SMC_ECC_Set_ECCdata(unsigned char *buf, unsigned char *redundant)
{
    _FS_SMC_calculate_ecc(_FS_SMC_ecctable,buf,redundant+0x0E,redundant+0x0D,redundant+0x0F);
    buf+=0x100;
    _FS_SMC_calculate_ecc(_FS_SMC_ecctable,buf,redundant+0x09,redundant+0x08,redundant+0x0A);
}

#endif /* FS_USE_SMC_DRIVER */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蓝色福利精品导航| 国产成人在线视频播放| 精品国产乱码久久久久久浪潮| 国产福利一区二区| 亚洲一区二区三区在线看| 3atv在线一区二区三区| 色哟哟一区二区三区| 国内精品视频666| 日韩精品成人一区二区在线| 17c精品麻豆一区二区免费| 精品日韩99亚洲| 欧美日韩国产精品自在自线| av在线免费不卡| 狠狠色丁香婷婷综合| 亚洲123区在线观看| 亚洲欧美激情小说另类| 欧美国产日韩在线观看| 欧美www视频| 欧美一区二区美女| 在线视频中文字幕一区二区| 成人avav在线| 成人综合婷婷国产精品久久 | 波波电影院一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 一区二区三区久久| 综合电影一区二区三区 | 亚洲美女淫视频| 中国色在线观看另类| 久久一区二区视频| 欧美成人三级电影在线| 制服丝袜激情欧洲亚洲| 欧美日韩三级在线| 欧美日韩性生活| 欧美色爱综合网| 欧美三级韩国三级日本三斤| 欧美专区亚洲专区| 色妹子一区二区| 色婷婷久久久综合中文字幕| 97se亚洲国产综合自在线| 丁香桃色午夜亚洲一区二区三区| 国产激情精品久久久第一区二区| 国内精品久久久久影院一蜜桃| 久久国产视频网| 久久99精品久久只有精品| 久久99精品久久久久婷婷| 久草热8精品视频在线观看| 九九国产精品视频| 国产一区视频导航| 国产aⅴ精品一区二区三区色成熟| 激情综合色综合久久综合| 国产在线播精品第三| 国产精品538一区二区在线| 国产精品18久久久久| 成人福利电影精品一区二区在线观看| 成人免费高清视频| 日本韩国欧美在线| 51久久夜色精品国产麻豆| 欧美一级片在线| 国产调教视频一区| 中文字幕在线观看一区二区| 一区二区三区在线观看欧美| 亚洲午夜在线观看视频在线| 天天操天天色综合| 裸体健美xxxx欧美裸体表演| 国产大陆亚洲精品国产| 99久久精品免费精品国产| 欧美性猛交xxxx黑人交| 日韩欧美在线1卡| 国产欧美日韩综合精品一区二区| 亚洲欧洲精品成人久久奇米网| 一级做a爱片久久| 免费一区二区视频| 99久久精品费精品国产一区二区| 欧美日韩欧美一区二区| 91精品国产高清一区二区三区蜜臀 | 日韩欧美一区二区视频| 国产午夜精品理论片a级大结局| 亚洲欧美乱综合| 日av在线不卡| jvid福利写真一区二区三区| 91精品一区二区三区在线观看| 久久午夜羞羞影院免费观看| 亚洲色图视频网| 毛片av一区二区| 9久草视频在线视频精品| 制服丝袜av成人在线看| 国产精品青草综合久久久久99| 午夜精品福利视频网站| 国产风韵犹存在线视精品| 在线观看成人免费视频| 国产清纯白嫩初高生在线观看91| 亚洲一二三四在线| 国产黄色91视频| 欧美日韩高清一区二区不卡| 日本一区二区三区久久久久久久久不 | 亚洲欧美激情视频在线观看一区二区三区 | 狠狠网亚洲精品| 欧美亚洲精品一区| 国产欧美视频一区二区| 日本女人一区二区三区| 91免费看`日韩一区二区| 日韩精品一区国产麻豆| 亚洲综合在线五月| 国产一区二区导航在线播放| 欧美日韩国产在线观看| 中文字幕在线不卡| 国产成人综合自拍| 日韩片之四级片| 亚洲一区二区三区自拍| 91在线精品秘密一区二区| 精品国内二区三区| 天天操天天综合网| 在线看一区二区| 自拍偷自拍亚洲精品播放| 国产一区二区免费在线| 日韩视频免费观看高清完整版在线观看| 亚洲欧洲成人自拍| 粉嫩在线一区二区三区视频| 欧美电视剧在线看免费| 免费在线看一区| 在线成人小视频| 亚洲一区二区三区视频在线| av电影天堂一区二区在线| 久久亚洲精品小早川怜子| 久久精品国产**网站演员| 欧美精品高清视频| 午夜激情综合网| 欧美三级韩国三级日本三斤| 亚洲一区二区偷拍精品| 色呦呦国产精品| 亚洲自拍偷拍图区| 欧美亚洲国产怡红院影院| 一区二区高清免费观看影视大全 | 国产精一区二区三区| 日韩免费一区二区三区在线播放| 日韩av一级片| 日韩一区二区三区电影在线观看| 五月激情综合婷婷| 日韩一级免费观看| 激情综合一区二区三区| 久久久久久夜精品精品免费| 国产精品影视在线| 中文无字幕一区二区三区 | 春色校园综合激情亚洲| 国产精品色婷婷| 91麻豆国产精品久久| 亚洲日本成人在线观看| 欧美主播一区二区三区美女| 亚洲综合男人的天堂| 欧美视频自拍偷拍| 日本成人在线看| 2020国产精品自拍| 成人午夜看片网址| 亚洲美女视频在线观看| 欧美日韩国产一区二区三区地区| 男男成人高潮片免费网站| 一区二区三区中文字幕| 色婷婷综合中文久久一本| 亚洲一区在线视频| 精品日韩一区二区三区免费视频| 国产成人av电影在线| 亚洲另类色综合网站| 欧美日韩视频第一区| 精品影视av免费| 国产精品素人视频| 欧美亚洲国产怡红院影院| 理论电影国产精品| 国产精品久久久久久久久免费樱桃 | 久久精品国产999大香线蕉| 国产日韩综合av| 在线观看免费一区| 久久er精品视频| 最新国产成人在线观看| 欧美日韩你懂的| 岛国精品在线播放| 亚洲.国产.中文慕字在线| 2020国产成人综合网| 91丨九色porny丨蝌蚪| 日产国产高清一区二区三区| 国产人伦精品一区二区| 欧美日韩精品福利| 国产成人综合视频| 性做久久久久久久免费看| 久久久欧美精品sm网站| 在线观看网站黄不卡| 国内不卡的二区三区中文字幕| 亚洲桃色在线一区| 日韩精品中文字幕一区 | 一本一道久久a久久精品| 奇米四色…亚洲| 亚洲六月丁香色婷婷综合久久| 日韩欧美久久一区| 色噜噜狠狠成人中文综合| 另类成人小视频在线| 夜夜嗨av一区二区三区中文字幕 | 成人高清免费在线播放| 麻豆国产欧美一区二区三区| 亚洲精品日日夜夜| 久久九九久久九九| 日韩一区二区三区三四区视频在线观看|