Skip to content

Commit

Permalink
Merge pull request torvalds#13 from hendecarows/feature/isdb2056
Browse files Browse the repository at this point in the history
WinUSB 版 px4_drv に PX-M1UR / PX-S1UR のサポートを追加
  • Loading branch information
tsukumijima authored Sep 30, 2024
2 parents b701cf7 + 864fe6c commit 5854871
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 27 deletions.
19 changes: 19 additions & 0 deletions winusb/pkg/BonDriver_PX4/BonDriver_S1UR.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[BonDriver]
Name="PX-S1UR"
System="ISDB-T"
DriverHostPath=".\DriverHost_PX4.exe"
PipeConnectTimeout=1000
TuneTimeout=5000
NumberOfPacketsPerBuffer=1024
MaximumNumberOfBuffers=64
MinimumNumberOfBuffers=4
NumberOfBuffersToIgnoreAfterPurge=1
DisplayErrorMessage=0

[BonDriver.ISDB-T]
ChSetPath="BonDriver_PX4-T.ChSet.txt"

[ReceiverDefinition0]
DeviceName="PLEX PX-S1UR"
DeviceGUID="{bf4454d8-63c4-4a97-ae0d-19329c4da997}"
System="ISDB-T"
21 changes: 21 additions & 0 deletions winusb/pkg/DriverHost_PX4/DriverHost_PX4.ini
Original file line number Diff line number Diff line change
Expand Up @@ -465,3 +465,24 @@ Name="PLEX PX-M1UR ISDB-T/S Receiver #0"
GUID="{0aedb5cd-a9af-4aa0-b9d9-e9b378acfef6}"
System="ISDB-T,ISDB-S"
Index=0

[DeviceDefinition13]
Name="PLEX PX-S1UR"
GUID="{bf4454d8-63c4-4a97-ae0d-19329c4da997}"
Type="ISDB2056"
DeviceInterfaceGUID="{a3303a3b-ea2c-467f-beae-8e72fb158714}"

[DeviceDefinition13.Config]
XferPackets=816
UrbMaxPackets=816
MaxUrbs=5
NoRawIo=false
ReceiverMaxPackets=2048
PsbPurgeTimeout=2000
DiscardNullPackets=true

[DeviceDefinition13.Receiver0]
Name="PLEX PX-S1UR ISDB-T Receiver #0"
GUID="{f060ae2a-98d6-4149-9c9d-e0bfd28f6816}"
System="ISDB-T"
Index=0
44 changes: 44 additions & 0 deletions winusb/pkg/inf/PX-S1UR.inf
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
;
; PLEX PX-S1UR WinUSB
;
[Version]
Signature="$Windows NT$"
Class=Media
ClassGuid={4d36e96c-e325-11ce-bfc1-08002be10318}
Provider=%AuthorName%
DriverVer=05/01/2021,21.05.01.00
;CatalogFile=px4_drv_winusb.cat

[Manufacturer]
%AuthorName%=PXS1UR_WinUSB,ntx86,ntamd64,ntarm64

[PXS1UR_WinUSB.ntx86]
%PXS1UR_WinUSB.DeviceDesc%=PXS1UR_WinUSB.DeviceInstall,USB\VID_0511&PID_0855

[PXS1UR_WinUSB.ntamd64]
%PXS1UR_WinUSB.DeviceDesc%=PXS1UR_WinUSB.DeviceInstall,USB\VID_0511&PID_0855

[PXS1UR_WinUSB.ntarm64]
%PXS1UR_WinUSB.DeviceDesc%=PXS1UR_WinUSB.DeviceInstall,USB\VID_0511&PID_0855

[PXS1UR_WinUSB.DeviceInstall]
Include=winusb.inf
Needs=WINUSB.NT
AddProperty=PXS1UR_WinUSB.DeviceSetup.AddProperty

[PXS1UR_WinUSB.DeviceInstall.Services]
Include=winusb.inf
Needs=WINUSB.NT.Services

[PXS1UR_WinUSB.DeviceInstall.HW]
AddReg=PXS1UR_WinUSB.DeviceSetup.AddReg

[PXS1UR_WinUSB.DeviceSetup.AddReg]
HKR,,DeviceInterfaceGUIDs,0x00010000,"{a3303a3b-ea2c-467f-beae-8e72fb158714}"

[PXS1UR_WinUSB.DeviceSetup.AddProperty]
{afd97640-86a3-4210-b67c-289c41aabe55},3,0x00000011,,0 ;DEVPKEY_Device_SafeRemovalRequiredOverride=FALSE

[Strings]
AuthorName="nns779"
PXS1UR_WinUSB.DeviceDesc="PLEX PX-S1UR ISDB-T Receiver Device (WinUSB)"
88 changes: 61 additions & 27 deletions winusb/src/DriverHost_PX4/isdb2056_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ Isdb2056Device::Isdb2056Device(const std::wstring &path, const px4::DeviceDefini
model_ = Isdb2056DeviceModel::PXM1UR;
break;

case 0x0855:
model_ = Isdb2056DeviceModel::PXS1UR;
break;

default:
model_ = Isdb2056DeviceModel::OTHER;
}
Expand Down Expand Up @@ -295,7 +299,7 @@ int Isdb2056Device::SetBackendPower(bool state)

int Isdb2056Device::SetLnbVoltage(std::int32_t voltage)
{
dev_dbg(&dev_, "px4::Isdb2056Device::SetBackendPower: voltage: %d\n", voltage);
dev_dbg(&dev_, "px4::Isdb2056Device::SetLnbVoltage: voltage: %d\n", voltage);

return 0;
}
Expand Down Expand Up @@ -574,24 +578,36 @@ int Isdb2056Device::Isdb2056Receiver::Init(bool sleep)
}
}

ret = rt710_init(&rt710_);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Init(%u): rt710_init() failed. (ret: %d)\n", index_, ret);
return ret;
}

if (sleep) {
ret = rt710_sleep(&rt710_);
switch (parent_.model_) {
case px4::Isdb2056DeviceModel::ISDB2056:
case px4::Isdb2056DeviceModel::ISDB2056N:
case px4::Isdb2056DeviceModel::PXM1UR:
case px4::Isdb2056DeviceModel::OTHER:
{
ret = rt710_init(&rt710_);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Init(%u): rt710_sleep() failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Init(%u): rt710_init() failed. (ret: %d)\n", index_, ret);
return ret;
}

ret = tc90522_sleep_s(&tc90522_s_, true);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Init(%u): tc90522_sleep_s(true) failed. (ret: %d)\n", index_, ret);
return ret;
if (sleep) {
ret = rt710_sleep(&rt710_);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Init(%u): rt710_sleep() failed. (ret: %d)\n", index_, ret);
return ret;
}

ret = tc90522_sleep_s(&tc90522_s_, true);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Init(%u): tc90522_sleep_s(true) failed. (ret: %d)\n", index_, ret);
return ret;
}
}
break;
}

default:
break;
}

if (!ret)
Expand All @@ -610,7 +626,17 @@ void Isdb2056Device::Isdb2056Receiver::Term()
return;

r850_term(&r850_);
rt710_term(&rt710_);

switch (parent_.model_) {
case px4::Isdb2056DeviceModel::ISDB2056:
case px4::Isdb2056DeviceModel::ISDB2056N:
case px4::Isdb2056DeviceModel::PXM1UR:
case px4::Isdb2056DeviceModel::OTHER:
rt710_term(&rt710_);
break;
default:
break;
}

tc90522_term(&tc90522_t_);
tc90522_term(&tc90522_s0_);
Expand Down Expand Up @@ -751,13 +777,13 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = tc90522_set_agc_t(&tc90522_t_, false);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_set_agc_t(false) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_set_agc_t(false) failed. (ret: %d)\n", index_, ret);
break;
}

ret = tc90522_sleep_s(&tc90522_s_, true);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_sleep_s(true) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_sleep_s(true) failed. (ret: %d)\n", index_, ret);
break;
}

Expand All @@ -775,7 +801,7 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = tc90522_sleep_t(&tc90522_t_, false);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_sleep_t(false) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_sleep_t(false) failed. (ret: %d)\n", index_, ret);
break;
}

Expand All @@ -789,13 +815,13 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = r850_wakeup(&r850_);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): r850_wakeup() failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): r850_wakeup() failed. (ret: %d)\n", index_, ret);
break;
}

ret = r850_set_frequency(&r850_, params_.freq);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): r850_set_frequency(%u) failed. (ret: %d)\n", index_, params_.freq, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): r850_set_frequency(%u) failed. (ret: %d)\n", index_, params_.freq, ret);
break;
}

Expand All @@ -820,7 +846,7 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = tc90522_set_agc_t(&tc90522_t_, true);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_set_agc_t(true) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_set_agc_t(true) failed. (ret: %d)\n", index_, ret);
break;
}

Expand All @@ -841,9 +867,17 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

case px4::SystemType::ISDB_S:
{
switch (parent_.model_) {
case px4::Isdb2056DeviceModel::PXS1UR:
return -EINVAL;

default:
break;
}

ret = tc90522_set_agc_s(&tc90522_s_, false);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_set_agc_s(false) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_set_agc_s(false) failed. (ret: %d)\n", index_, ret);
break;
}

Expand All @@ -857,7 +891,7 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = tc90522_sleep_t(&tc90522_t_, true);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_sleep_t(true) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_sleep_t(true) failed. (ret: %d)\n", index_, ret);
break;
}

Expand Down Expand Up @@ -899,7 +933,7 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = tc90522_sleep_s(&tc90522_s_, false);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_sleep_s(false) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_sleep_s(false) failed. (ret: %d)\n", index_, ret);
break;
}

Expand All @@ -917,7 +951,7 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = rt710_set_params(&rt710_, params_.freq, 28860, 4);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): rt710_set_params(%u) failed. (ret: %d)\n", index_, params_.freq, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): rt710_set_params(%u) failed. (ret: %d)\n", index_, params_.freq, ret);
break;
}

Expand All @@ -942,7 +976,7 @@ int Isdb2056Device::Isdb2056Receiver::SetFrequency()

ret = tc90522_set_agc_s(&tc90522_s_, true);
if (ret) {
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::Open(%u): tc90522_set_agc_s(true) failed. (ret: %d)\n", index_, ret);
dev_err(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetFrequency(%u): tc90522_set_agc_s(true) failed. (ret: %d)\n", index_, ret);
break;
}

Expand Down Expand Up @@ -1006,7 +1040,7 @@ int Isdb2056Device::Isdb2056Receiver::SetStreamId()
if (!init_ || !open_)
return -EINVAL;

dev_dbg(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetStreamID(%u): tsid: %d\n", index_, params_.stream_id);
dev_dbg(&parent_.dev_, "px4::Isdb2056Device::Isdb2056Receiver::SetStreamId(%u): tsid: %d\n", index_, params_.stream_id);

int ret = 0;
std::uint16_t tsid;
Expand Down
1 change: 1 addition & 0 deletions winusb/src/DriverHost_PX4/isdb2056_device.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ enum class Isdb2056DeviceModel {
ISDB2056 = 0,
ISDB2056N,
PXM1UR,
PXS1UR,
OTHER,
};

Expand Down

0 comments on commit 5854871

Please sign in to comment.