SkyStar S2 (и SkyStar 2) - решение проблемы выхода из спячки (1 Viewer)

Rara Avis

Portal Pro
April 9, 2009
120
9
Есть у линейки SkyStar 2 (S2 в том числе) и такая проблема на WinXP (про висту/семерку не в курсе): после пробуждения из спящего (hibernate) режима карточка недоступна и в портале мы получаем ошибку "Нет свободного тюнера", а если посмотреть в конфигураторе TV сервера, то увидим какую-то левый аналоговый тюнер, коего у нас отродясь не было.
Естественно, это все наблюдается на WDM драйверах (а по другому к порталу эти карты не прикрутить) и, видимо, ими же и вызвано :)

И тут как раз добрейшей души юзер Omny открыл мне глаза на существование HibernateTrigger !
Все остальное тоже уже придумано до нас, осталось сложить вместе и слегка причесать :)

Итак, качаем HibernateTrigger и устанавливаем. Не забываем, что эта утилита свой ярлык пишет в StartUp, и, если у нас винда русская - не мешает перенести в Автозагрузку.

Разворачиваем Devcon.exe и кладем в c:\windows\system32 . Если интересно, что это и для чего - http://support.microsoft.com/kb/311272/ru .

Создаем awake.bat со следующим содержимым:
Code:
net stop tvservice
devcon.exe restart PCI\VEN_13D0
net start tvservice
запоминаем, куда сохранили и прописываем его во втором поле Hibernate Trigger. Теперь по выходе из спячки вызовется этот батник и передернет скайстаровские драйвера, после чего все работает штатно.

В общем виде, конечно, некошерно дергать tvservice при живом портале (хотя, еще раз повторюсь - у меня, например,  отрабатывает достаточно быстро и MP не успевает потерять сервис)
Поэтому любители строгих классических подходов могут сохранить
Code:
Option Explicit

' *********************************************
' This function checks if a process is running 
' *********************************************
Function IsProcessRunning( strProcess )
    Dim Process, strObject
    IsProcessRunning = False
    strObject   = "winmgmts:\\.\root\cimv2"
    For Each Process in GetObject( strObject ).InstancesOf( "win32_process" )
        If UCase( Process.name ) = UCase( strProcess ) Then
            IsProcessRunning = True
            Exit Function
        End If
    Next
End Function

' ===

Dim Shell, process, prockill, return, mp_running

Set Shell = CreateObject("WScript.Shell")

process   = "MediaPortal"
prockill  = "tskill " & process
mp_running = IsProcessRunning ( process & ".exe" )

If mp_running Then
    ' Kill MediaPortal.exe
    return = Shell.Run (prockill, 0, True)
    ' Check for MediaPortal still running
    do
    WScript.Sleep(100)
    loop while IsProcessRunning ( process & ".exe" ) 
End If

' Stop tvservice
return = Shell.Run("""C:\\Windows\\System32\\net.exe""" & "stop tvservice", 1, true)
' Restart SkyStar2
return = Shell.Run("""C:\\Windows\\System32\\devcon.exe""" & "restart PCI\VEN_13D0", 1, true)
' Start tvservice
return = Shell.Run("""C:\\Windows\\System32\\net.exe""" & "start tvservice", 1, true)


If mp_running Then
    ' Run MediaPortal if was running on resume
    return = Shell.Run("""C:\\Program Files\\Team MediaPortal\\MediaPortal\\MediaPortal.exe""", 1, false)
End If
в файл awake.vbs и использовать его.
(По мотивам https://forum.team-mediaportal.com/tv-cards-333/skystar2-not-able-tune-after-resume-71679/#post519586)
 

Vlad999

Portal Member
December 6, 2008
28
0
Handler2

Спасибо... но я уже давно использовал другую прогу... в паре той же devicon.exe (куда без него)... MPstandbyHandler2 (именно 2 версия) она работает как служба... и перехватает обработку засыпания и awake... просто она заточена именно под портал.
 

Stellar

New Member
February 27, 2009
82
2
У меня применительно к SkyStar HD2 пришлось строку
devcon.exe restart PCI\VEN_13D0
заменить на
devcon.exe restart PCI\VEN_1822
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Top Bottom