⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yss903.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的设备库的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************************************/
extern tmLibdevErr_t yss903Read(UInt8 addr, UInt8 *data)
{
    int i, counter;

    if (addr == 0x10)
    {   /* hardware is readable */
        for (counter = 0; counter < 10; counter++)
        {   
            if (((ReadKaraCtrlReg() & 0x01)) == 0)
                break;
            microsleep (100);
        }
        if (counter >= 10) 
            return ERR_YSS903_YSS_READ_FAILED;

        DP(("yss903Read from %x (%d)\n",addr, counter));
        WriteKaraAddrReg(0x10);  /* Perhaps can only read register 0x10 */             
        WriteKaraCtrlReg(0x01);               

        for (counter = 0; counter < 10; counter++)
        {   
            if (((ReadKaraCtrlReg() & 0x01)) == 0)
                break;
            microsleep (100);
        }
        if (counter >= 10) 
            return ERR_YSS903_YSS_READ_FAILED;

        *data = ReadKaraDataReg();
        return TMLIBDEV_OK;
    }

    /* take it from shadow register */
    if (InKaraokeMode)
    {
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2)
        {
            if (addr == yssKaraokeModeShadow[i])
            {
                *data  = yssKaraokeModeShadow[i+1];
                return TMLIBDEV_OK;
            }
        }
    }
    else
    {
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2)
        {
            if (addr == yssMovieModeShadow[i])
            {
                *data = yssMovieModeShadow[i+1];
                return TMLIBDEV_OK;
            }
        }
    }
    return ERR_YSS903_YSS_READ_FAILED;
}

/******************************************************/
static tmLibdevErr_t yss903WriteRegisters(UInt8 *data, Int size)
{
    int i; 
    tmLibdevErr_t err;  
    for(i=0; i<size; i+=2)
    {
        DP(("%d: ", i));
        if (err = yss903Write(data[i], data[i+1]))
            return err;
   }
   return TMLIBDEV_OK;
}

/********************************************************************/
extern Bool yss903Init( Address dataReg, Address ctrlReg, Address addrReg)
{
    int i;
    
    DP_L2(("yss903Init()\n"));

    tmAssert(sizeof(yssMovieModeInit) == sizeof(yssMovieModeShadow), ERR_YSS903_YSS_STRUCTURE_SIZE_ERROR );
    tmAssert(sizeof(yssKaraokeModeInit) == sizeof(yssKaraokeModeShadow), ERR_YSS903_YSS_STRUCTURE_SIZE_ERROR );

    /* fill in static register addresses before they are used */
    YssData = dataReg;
    YssCtrl = ctrlReg;
    YssAddr = addrReg;

    for (i=0; i< sizeof(yssMovieModeInit); i++)
        yssMovieModeShadow[i] = yssMovieModeInit[i];
    for (i=0; i< sizeof(yssKaraokeModeInit); i++)
        yssKaraokeModeShadow[i] = yssKaraokeModeInit[i];

    return yss903SelectMovieMode();
}

/* choose operational mode (karaoke or Movie) */
extern Bool yss903SelectMovieMode(void)
{
    DP_L2(("yss903SelectMovieMode()\n"));
    InKaraokeMode = False;
    if(yss903WriteRegisters(yssMovieModeShadow, sizeof(yssMovieModeShadow)) )
        return False;
    return True; 
}

extern Bool yss903SelectKaraokeMode(void)
{
    DP_L2(("yss903SelectKaraokeMode()\n"));
    InKaraokeMode = True;
    if(yss903WriteRegisters(yssKaraokeModeShadow, sizeof(yssKaraokeModeShadow)))
        return False;
    return True; 
}


/* set the volume of line input.  value in dB. */ 
extern Bool yss903SetLineInputVolume(float leftVol, float rightVol)
{
    float value;
    Int ival;

    DP_L2(("yss903SetLineInputVolume()\n"));
    value = pow(10.0, leftVol*0.05);
    value *= 127.0;
    ival = (Int)value;  

    if (yss903Write(0x3E, ival))
         return False;
    if (InKaraokeMode)  /* shadow both modes */
    {   
        int i;
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2) {
            if (yssMovieModeShadow[i] == 0x3e)
                yssMovieModeShadow[i+1] = ival;
        }
    } else {
        int i;
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2) {
            if (yssKaraokeModeShadow[i] == 0x3e)
                yssKaraokeModeShadow[i+1] = ival;
        }
    }
    value = pow(10.0, rightVol*0.05);
    value *= 127.0;
    ival = (Int)value;  

    if (yss903Write(0x3F, ival))
         return False;

    if (InKaraokeMode)  /* shadow both modes */
    {   
        int i;
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2) {
            if (yssMovieModeShadow[i] == 0x3f)
                yssMovieModeShadow[i+1] = ival;
        }
    } else {
        int i;
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2) {
            if (yssKaraokeModeShadow[i] == 0x3f)
                yssKaraokeModeShadow[i+1] = ival;
        }
    }
    return True; 
}

/* set the volume of mic input.  value in dB. */ 
extern Bool yss903SetMicInputVolume (float level)
{
    Int ival;

    if (level > 0.0) ival = 0;
    else if (level < -45.0) ival = 0x1F;
    else ival = (Int)(level / -1.5);

    if (yss903Write(0x35, ival))
        return False;

    if (InKaraokeMode)  /* shadow both modes */
    {   
        int i;
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2) {
            if (yssMovieModeShadow[i] == 0x35)
                yssMovieModeShadow[i+1] = ival;
        }
    } else {
        int i;
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2) {
            if (yssKaraokeModeShadow[i] == 0x35)
                yssKaraokeModeShadow[i+1] = ival;
        }
    }
    return True; 
}


/***************************************************************/
/* set the tone controls of line input.  Values in dB, -10 to +10 in 2dB steps */ 
extern Bool yss903SetLineInputTreble(float level)
{
    UInt8 ival;

    DP_L2(("yss903SetLineInputTreble()\n"));
    if(level > 10.0)  ival = 5;
    else if(level >= 0)  ival = ((Int) level)/2;
    else if(level >= -10.0)  ival = 16 + ((Int) level)/2;
    else  ival = 0x0b;
    DP_L2(("treble ival is %x\n", ival));

    if (yss903WriteBits(0x05, ival<<4, 0xF0))
        return False;
    if (InKaraokeMode)  /* shadow both modes */
    {   
        int i;
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2) {
            if (yssMovieModeShadow[i] == 0x05)
                yssMovieModeShadow[i+1] = (yssMovieModeShadow[i+1] & 0x0F) | (ival<<4);
        }
    } else {
        int i;
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2) {
            if (yssKaraokeModeShadow[i] == 0x05)
                yssKaraokeModeShadow[i+1] = (yssKaraokeModeShadow[i+1] & 0x0F) | (ival<<4);
        }
    }

    return True;
}

/***************************************************************/
extern Bool yss903SetLineInputMidrange(float level)
{
   UInt8 ival;

    DP_L2(("yss903SetLineInputMidrange()\n"));
   if(level > 10.0)  ival = 5;
   else if(level >= 0)  ival = ((Int) level)/2;
   else if(level >= -10.0)  ival = 16 + ((Int) level)/2;
   else  ival = 0x0b;

   if (yss903WriteBits(0x06, ival, 0x0F))
      return False;

    if (InKaraokeMode)  /* shadow both modes */
    {   
        int i;
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2) {
            if (yssMovieModeShadow[i] == 0x06)
                yssMovieModeShadow[i+1] = (yssMovieModeShadow[i+1] & 0xF0) | ival;
        }
    } else {
        int i;
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2) {
            if (yssKaraokeModeShadow[i] == 0x06)
                yssKaraokeModeShadow[i+1] = (yssKaraokeModeShadow[i+1] & 0xF0) | ival;
        }
    }

   return True; 

}

/***************************************************************/
extern Bool yss903SetLineInputBass(float level)
{
   UInt8 ival;

    DP_L2(("yss903SetLineInputBass()\n"));
   if(level > 10.0)  ival = 5;
   else if(level >= 0)  ival = ((Int) level)/2;
   else if(level >= -10.0)  ival = 16 + ((Int) level)/2;
   else  ival = 0x0b;

   if (yss903WriteBits(0x05, ival, 0x0F))
      return False;

    if (InKaraokeMode)  /* shadow both modes */
    {   
        int i;
        for (i=0; i< sizeof(yssMovieModeShadow); i+=2) {
            if (yssMovieModeShadow[i] == 0x05)
                yssMovieModeShadow[i+1] = (yssMovieModeShadow[i+1] & 0xF0) | ival;
        }
    } else {
        int i;
        for (i=0; i< sizeof(yssKaraokeModeShadow); i+=2) {
            if (yssKaraokeModeShadow[i] == 0x05)
                yssKaraokeModeShadow[i+1] = (yssKaraokeModeShadow[i+1] & 0xF0) | ival;
        }
    }

   return True;

}

/***************************************************************/
extern Bool yss903SetSurroundMode(yss903SurroundMode_t mode)
{
    UInt8 surround_on_para_kara[]=
    { 0x21, 0x60, 
      0x24, 0x60 };
    UInt8 surround_on_para_movie[]=
    { 0x30, 0x30,   /* feed from before tone */
      0x31, 0x30,
      0x32, 0,
      0x33, 0,
      0x38, 0x30,   /* feed some of direct reflections into output */
      0x39, 0x30,
      0x3c, 0x0,    /* feed mix of direct and reflected (not reflected only) to Ymersion */
      0x3d, 0x0,
      0x3a, 0x30,   /* feed mix of direct and reflected to Ymersion */
      0x3b, 0x30,
      0x21, 0x30,   /* mix back in */
      0x24, 0x30 };
    UInt8 surround_off_para_kara[]=
    { 0x21, 0x00, 
      0x24, 0x00 };
    UInt8 surround_off_para_movie[]=
    { 0x30, 0x0,    /* feed from before tone */
      0x31, 0x0,
      0x32, 0,
      0x33, 0,
      0x38, 0x0,    /* feed some of direct reflections into output */
      0x39, 0x0,
      0x3c, 0x0,    /* feed mix of direct and reflected (not reflected only) to Ymersion */
      0x3d, 0x0,
      0x3a, 0x0,    /* feed mix of direct and reflected to Ymersion */
      0x3b, 0x0,
      0x21, 0x0,    /* mix back in */
      0x24, 0x0 };
    
    DP_L2(("yss903SetSurroundMode()\n"));
    switch (mode)
    {
        case yss903SurroundOff:
            if (InKaraokeMode)
                yss903WriteRegisters(surround_off_para_kara, sizeof(surround_off_para_kara));
            else 
                yss903WriteRegisters(surround_off_para_movie, sizeof(surround_off_para_movie));
            break;

        case yss903SurroundPseudoStereo:
            if (!InKaraokeMode)
            {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -