📄 tunsdrv.c
字号:
Name: tuner_tunsdrv_Open()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t tuner_tunsdrv_Open(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Handle_t *Handle)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
const char *identity = "STTUNER tunsdrv.c tuner_tunsdrv_Open()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
TUNSDRV_InstanceData_t *Instance;
if(Installed == FALSE)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail driver not installed\n", identity));
#endif
return(STTUNER_ERROR_INITSTATE);
}
/* now safe to lock semaphore */
SEM_LOCK(Lock_InitTermOpenClose);
/* ---------- check that at least one init has taken place ---------- */
if(InstanceChainTop == NULL)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail nothing initalized\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(STTUNER_ERROR_INITSTATE);
}
/* find handle from name */
Instance = InstanceChainTop;
while(strcmp((char *)Instance->DeviceName, (char *)DeviceName) != 0)
{
/* error, should have found matching DeviceName before end of list */
if(Instance->InstanceChainNext == NULL)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("\n%s fail no block named '%s' before end of list\n", identity, DeviceName));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(STTUNER_ERROR_INITSTATE);
}
Instance = Instance->InstanceChainNext; /* next block */
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("(%s)", Instance->DeviceName));
#endif
}
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print((" found ok\n"));
#endif
if(Instance->TopLevelHandle != STTUNER_MAX_HANDLES)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail driver instance already open\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(ST_ERROR_OPEN_HANDLE);
}
/* now got pointer to free (and valid) data block */
*Handle = (U32)Instance;
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s opened ok\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(Error);
}
#ifdef STTUNER_BASIC
#ifdef STTUNER_DRV_SAT_TUN_VG1011
/* ----------------------------------------------------------------------------
Name: tuner_tunsdrv_Open_VG1011()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t tuner_tunsdrv_Open_VG1011(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
const char *identity = "STTUNER tunsdrv.c tuner_tunsdrv_Open_VG1011()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
TUNSDRV_InstanceData_t *Instance;
Error = tuner_tunsdrv_Open(DeviceName, OpenParams, Handle);
if (Error != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail, Error=%d\n", identity, Error));
#endif
return(Error);
}
Instance = TUNSDRV_GetInstFromHandle(*Handle);
if (Instance->TunerType != STTUNER_TUNER_VG1011)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail no STTUNER_TUNER_VG1011 for name (%s)\n", identity, Instance->DeviceName ));
#endif
return(ST_ERROR_BAD_PARAMETER);
}
/* Tuner Frequency range capability -> GNBvd09094 */
Capability->FreqMin = 950000;
Capability->FreqMax = 2150000;
Instance->FreqFactor = 1;
Instance->Status.TunerStep = 125000;
Instance->Status.IntermediateFrequency = 479500;
Instance->Status.IQSense = 1;
#ifdef STTUNER_IQ_WIRING
Instance->Status.IQSense = STTUNER_IQ_WIRING;
#endif
Instance->BandWidth[0] = 36000;
Instance->BandWidth[1] = 0;
Instance->IOBuffer[0] = 0x34;
Instance->IOBuffer[1] = 0x7C;
Instance->IOBuffer[2] = 0x95;
Instance->IOBuffer[3] = 0x80;
/* Select default bandwidth */
Instance->Status.Bandwidth = Instance->BandWidth[0];
/* Set device configuration (demod MUST have been initalized if this tuner is using its repeater)
subaddress 0, Tx 4 bytes
*/
Error = STTUNER_IOARCH_ReadWrite(Instance->IOHandle, STTUNER_IO_WRITE, 0, Instance->IOBuffer, 4, TUNSDRV_IO_TIMEOUT);
if (Error == ST_NO_ERROR)
{
Instance->TopLevelHandle = OpenParams->TopLevelHandle; /* mark as used */
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s opened ok\n", identity));
#endif
}
else
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail Error=%d\n", identity, Error));
#endif
}
return(Error);
}
#endif
#ifdef STTUNER_DRV_SAT_TUN_S68G21
/* ----------------------------------------------------------------------------
Name: tuner_tunsdrv_Open_S68G21()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t tuner_tunsdrv_Open_S68G21(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
const char *identity = "STTUNER tunsdrv.c tuner_tunsdrv_Open_S68G21()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
TUNSDRV_InstanceData_t *Instance;
Error = tuner_tunsdrv_Open(DeviceName, OpenParams, Handle);
if (Error != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail, Error=%d\n", identity, Error));
#endif
return(Error);
}
Instance = TUNSDRV_GetInstFromHandle(*Handle);
/* Tuner Frequency range capability -> GNBvd09094 */
Capability->FreqMin = 950000;
Capability->FreqMax = 2150000;
Instance->FreqFactor = 1;
Instance->Status.TunerStep = 125000;
Instance->Status.IntermediateFrequency = 479500;
Instance->Status.IQSense = -1;
#ifdef STTUNER_IQ_WIRING
Instance->Status.IQSense = STTUNER_IQ_WIRING;
#endif
Instance->BandWidth[0] = 36000;
Instance->BandWidth[1] = 0;
Instance->IOBuffer[0] = 0x0B;
Instance->IOBuffer[1] = 0x00;
Instance->IOBuffer[2] = 0xCE;
Instance->IOBuffer[3] = 0xA1;
/* Select default bandwidth */
Instance->Status.Bandwidth = Instance->BandWidth[0];
/* Set device configuration (demod MUST have been initalized if this tuner is using its repeater)
subaddress 0, Tx 4 bytes
*/
Error = STTUNER_IOARCH_ReadWrite(Instance->IOHandle, STTUNER_IO_WRITE, 0, Instance->IOBuffer, 4, TUNSDRV_IO_TIMEOUT);
if (Error == ST_NO_ERROR)
{
Instance->TopLevelHandle = OpenParams->TopLevelHandle; /* mark as used */
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s opened ok\n", identity));
#endif
}
else
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail Error=%d\n", identity, Error));
#endif
}
return(Error);
}
#endif
#ifdef STTUNER_DRV_SAT_TUN_TUA6100
/* ----------------------------------------------------------------------------
Name: tuner_tunsdrv_Open_TUA6100()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t tuner_tunsdrv_Open_TUA6100(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
const char *identity = "STTUNER tunsdrv.c tuner_tunsdrv_Open_TUA6100()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
TUNSDRV_InstanceData_t *Instance;
Error = tuner_tunsdrv_Open(DeviceName, OpenParams, Handle);
if (Error != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail, Error=%d\n", identity, Error));
#endif
return(Error);
}
/* Tuner Frequency range capability -> GNBvd09094 */
Capability->FreqMin = 950000;
Capability->FreqMax = 2150000;
Instance = TUNSDRV_GetInstFromHandle(*Handle);
Instance->FreqFactor = 1;
Instance->Status.TunerStep = 125000;
Instance->Status.IntermediateFrequency = 0;
Instance->Status.IQSense = 1;
#ifdef STTUNER_IQ_WIRING
Instance->Status.IQSense = STTUNER_IQ_WIRING;
#endif
Instance->BandWidth[0] = 60000;
Instance->BandWidth[1] = 0;
Instance->IOBuffer[0] = 0x00;
Instance->IOBuffer[1] = 0x0B;
Error = STTUNER_IOARCH_ReadWrite(Instance->IOHandle, STTUNER_IO_WRITE, 0, Instance->IOBuffer, 2, TUNSDRV_IO_TIMEOUT);
Instance->IOBuffer[0] = 0x02;
Instance->IOBuffer[1] = 0x1C;
Instance->IOBuffer[2] = 0x20;
Error |= STTUNER_IOARCH_ReadWrite(Instance->IOHandle, STTUNER_IO_WRITE, 0, Instance->IOBuffer, 3, TUNSDRV_IO_TIMEOUT);
Instance->IOBuffer[0] = 0x01;
Instance->IOBuffer[1] = 0x2C;
Instance->IOBuffer[2] = 0x96;
Instance->IOBuffer[3] = 0x00;
Error |= STTUNER_IOARCH_ReadWrite(Instance->IOHandle, STTUNER_IO_WRITE, 0, Instance->IOBuffer, 4, TUNSDRV_IO_TIMEOUT);
/* Select default bandwidth */
Instance->Status.Bandwidth = Instance->BandWidth[0];
if (Error == ST_NO_ERROR)
{
Instance->TopLevelHandle = OpenParams->TopLevelHandle; /* mark as used */
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s opened ok\n", identity));
#endif
}
else
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail Error=%d\n", identity, Error));
#endif
}
return(Error);
}
#endif
#ifdef STTUNER_DRV_SAT_TUN_EVALMAX
/* ----------------------------------------------------------------------------
Name: tuner_tunsdrv_Open_EVALMAX()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t tuner_tunsdrv_Open_EVALMAX(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
const char *identity = "STTUNER tunsdrv.c tuner_tunsdrv_Open_EVALMAX()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
TUNSDRV_InstanceData_t *Instance;
Error = tuner_tunsdrv_Open(DeviceName, OpenParams, Handle);
if (Error != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_TUNSDRV
STTBX_Print(("%s fail, Error=%d\n", identity, Error));
#endif
return(Error);
}
/* Tuner Frequency range capability -> GNBvd09094 */
Capability->FreqMin = 950000;
Capability->FreqMax = 2150000;
Instance = TUNSDRV_GetInstFromHandle(*Handle);
Instance->FreqFactor = 1;
Instance->Status.TunerStep = 500000;
Instance->Status.IntermediateFrequency = 479500;
Instance->Status.IQSense = 1;
#ifdef STTUNER_IQ_WIRING
Instance->Status.IQSense = STTUNER_IQ_WIRING;
#endif
Instance->BandWidth[0] = 16000;
Instance->BandWidth[1] = 60000;
Instance->BandWidth[2] = 0;
Instance->IOBuffer[0] = 0x08;
Instance->IOBuffer[1] = 0xC2;
Instance->IOBuffer[2] = 0x82;
Instance->IOBuffer[3] = 0x41;
/* Select default bandwidth */
Instance->Status.Bandwidth = Instance->BandWidth[0];
/* Set device configuration (demod MUST have been initalized if this tuner is using its repeater)
subaddress 0, Tx 4 bytes
*/
Error = STTUNER_IOARCH_ReadWrite(Instance->IOHandle, STTUNER_IO_WRITE, 0, Instance->IOBuffer, 4, TUNSDRV_IO_TIMEOUT);
if (Error == ST_NO_ERROR)
{
Instance->TopLevelHandle = OpenParams->TopLevelHandle; /* mark as used */
#ifdef
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -