aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhudokkow <hudokkow@gmail.com>2015-05-15 11:59:32 +0100
committerhudokkow <hudokkow@gmail.com>2015-07-08 15:52:41 +0100
commitcd6429d63cd6860766e1fad4cf01727cc259f23a (patch)
tree04b72c92d6031824820f79a441a11be831094670
parentac54ddfe73672487aaaa54ab8d06b231d44e1201 (diff)
Drop internal HDHomeRun support
-rw-r--r--.gitignore3
-rw-r--r--Kodi.xcodeproj/project.pbxproj44
-rw-r--r--Makefile.in5
-rw-r--r--configure.ac1
-rw-r--r--lib/libhdhomerun/Makefile.in41
-rw-r--r--lib/libhdhomerun/Makefile.win3226
-rw-r--r--lib/libhdhomerun/README41
-rw-r--r--lib/libhdhomerun/hdhomerun.h42
-rw-r--r--lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj140
-rw-r--r--lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj.filters83
-rw-r--r--lib/libhdhomerun/hdhomerun_channels.c378
-rw-r--r--lib/libhdhomerun/hdhomerun_channels.h63
-rw-r--r--lib/libhdhomerun/hdhomerun_channelscan.c325
-rw-r--r--lib/libhdhomerun/hdhomerun_channelscan.h53
-rw-r--r--lib/libhdhomerun/hdhomerun_config.c636
-rw-r--r--lib/libhdhomerun/hdhomerun_control.c453
-rw-r--r--lib/libhdhomerun/hdhomerun_control.h115
-rw-r--r--lib/libhdhomerun/hdhomerun_debug.c464
-rw-r--r--lib/libhdhomerun/hdhomerun_debug.h63
-rw-r--r--lib/libhdhomerun/hdhomerun_device.c927
-rw-r--r--lib/libhdhomerun/hdhomerun_device.h280
-rw-r--r--lib/libhdhomerun/hdhomerun_dhcp.c248
-rw-r--r--lib/libhdhomerun/hdhomerun_dhcp.h44
-rw-r--r--lib/libhdhomerun/hdhomerun_discover.c506
-rw-r--r--lib/libhdhomerun/hdhomerun_discover.h69
-rw-r--r--lib/libhdhomerun/hdhomerun_os.h49
-rw-r--r--lib/libhdhomerun/hdhomerun_os_posix.h88
-rw-r--r--lib/libhdhomerun/hdhomerun_os_windows.h183
-rw-r--r--lib/libhdhomerun/hdhomerun_pkt.c245
-rw-r--r--lib/libhdhomerun/hdhomerun_pkt.h177
-rw-r--r--lib/libhdhomerun/hdhomerun_types.h72
-rw-r--r--lib/libhdhomerun/hdhomerun_video.c372
-rw-r--r--lib/libhdhomerun/hdhomerun_video.h105
-rw-r--r--lib/libhdhomerun/lgpl.txt165
-rw-r--r--project/VS2010Express/XBMC for Windows.sln2
-rw-r--r--project/VS2010Express/XBMC.vcxproj4
-rw-r--r--project/VS2010Express/XBMC.vcxproj.filters12
-rw-r--r--system/playercorefactory.xml2
-rw-r--r--xbmc/DllPaths_generated.h.in1
-rw-r--r--xbmc/DllPaths_generated_android.h.in1
-rw-r--r--xbmc/DllPaths_win32.h1
-rw-r--r--xbmc/FileItem.cpp7
-rw-r--r--xbmc/FileItem.h1
-rw-r--r--xbmc/URL.cpp1
-rw-r--r--xbmc/Util.cpp9
-rw-r--r--xbmc/dialogs/GUIDialogMediaSource.cpp4
-rw-r--r--xbmc/filesystem/DirectoryFactory.cpp2
-rw-r--r--xbmc/filesystem/DllHDHomeRun.h70
-rw-r--r--xbmc/filesystem/FileFactory.cpp2
-rw-r--r--xbmc/filesystem/HDHomeRunDirectory.cpp116
-rw-r--r--xbmc/filesystem/HDHomeRunDirectory.h38
-rw-r--r--xbmc/filesystem/HDHomeRunFile.cpp154
-rw-r--r--xbmc/filesystem/HDHomeRunFile.h49
-rw-r--r--xbmc/filesystem/Makefile.in2
-rw-r--r--xbmc/utils/URIUtils.cpp8
-rw-r--r--xbmc/utils/URIUtils.h1
-rw-r--r--xbmc/utils/test/TestURIUtils.cpp6
57 files changed, 4 insertions, 6995 deletions
diff --git a/.gitignore b/.gitignore
index 5bbb9107e6..06e45f3c3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -362,7 +362,6 @@ lib/cpluff/stamp-h1
/system/libgif.dll
/system/libssh2.dll
/system/libssl32.dll
-/system/hdhomerun.dll
/system/ssh.dll
/system/sqlite3.dll
/system/libnfs.dll
@@ -906,8 +905,6 @@ lib/cpluff/stamp-h1
/lib/libexif/Release (DLL)
/lib/libexif/libexif.lib
-/lib/libhdhomerun/Makefile
-
/lib/libsquish/Makefile
/lib/libsquish/lib/squishd.lib
/lib/libsquish/lib/squish.lib
diff --git a/Kodi.xcodeproj/project.pbxproj b/Kodi.xcodeproj/project.pbxproj
index 975f961d3e..381683386e 100644
--- a/Kodi.xcodeproj/project.pbxproj
+++ b/Kodi.xcodeproj/project.pbxproj
@@ -923,8 +923,6 @@
DF93D6B11444A8B1007C6459 /* UDFFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D6931444A8B0007C6459 /* UDFFile.cpp */; };
DF93D6B21444A8B1007C6459 /* UPnPFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D6951444A8B0007C6459 /* UPnPFile.cpp */; };
DF93D6B31444A8B1007C6459 /* ZipFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D6971444A8B0007C6459 /* ZipFile.cpp */; };
- DF93D7F21444B54A007C6459 /* HDHomeRunFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D7F01444B54A007C6459 /* HDHomeRunFile.cpp */; };
- DF93D7F61444B568007C6459 /* HDHomeRunDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D7F51444B568007C6459 /* HDHomeRunDirectory.cpp */; };
DF98D98C1434F47D00A6EBE1 /* SkinVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF98D98A1434F47D00A6EBE1 /* SkinVariable.cpp */; };
DF9A71EE1639C8F6005ECB2E /* HTTPFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF9A71EC1639C8F6005ECB2E /* HTTPFile.cpp */; };
DFA8157E16713B1200E4E597 /* WakeOnAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFA8157C16713B1200E4E597 /* WakeOnAccess.cpp */; };
@@ -1265,8 +1263,6 @@
DFF0F1FE17528350002DA3A4 /* FileReaderFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D6731444A8B0007C6459 /* FileReaderFile.cpp */; };
DFF0F1FF17528350002DA3A4 /* FTPDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16E40D25F9FA00618676 /* FTPDirectory.cpp */; };
DFF0F20017528350002DA3A4 /* FTPParse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16E60D25F9FA00618676 /* FTPParse.cpp */; };
- DFF0F20317528350002DA3A4 /* HDHomeRunDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D7F51444B568007C6459 /* HDHomeRunDirectory.cpp */; };
- DFF0F20417528350002DA3A4 /* HDHomeRunFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D7F01444B54A007C6459 /* HDHomeRunFile.cpp */; };
DFF0F20717528350002DA3A4 /* HTTPDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F584E12D0F257C5100DB26A5 /* HTTPDirectory.cpp */; };
DFF0F20817528350002DA3A4 /* HTTPFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF9A71EC1639C8F6005ECB2E /* HTTPFile.cpp */; };
DFF0F20917528350002DA3A4 /* IDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16EC0D25F9FA00618676 /* IDirectory.cpp */; };
@@ -2447,8 +2443,6 @@
E4991267174E5D8F00741B6D /* FileReaderFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D6731444A8B0007C6459 /* FileReaderFile.cpp */; };
E4991268174E5D8F00741B6D /* FTPDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16E40D25F9FA00618676 /* FTPDirectory.cpp */; };
E4991269174E5D8F00741B6D /* FTPParse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16E60D25F9FA00618676 /* FTPParse.cpp */; };
- E499126C174E5D8F00741B6D /* HDHomeRunDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D7F51444B568007C6459 /* HDHomeRunDirectory.cpp */; };
- E499126D174E5D8F00741B6D /* HDHomeRunFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF93D7F01444B54A007C6459 /* HDHomeRunFile.cpp */; };
E4991270174E5D8F00741B6D /* HTTPDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F584E12D0F257C5100DB26A5 /* HTTPDirectory.cpp */; };
E4991271174E5D8F00741B6D /* HTTPFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF9A71EC1639C8F6005ECB2E /* HTTPFile.cpp */; };
E4991272174E5D8F00741B6D /* IDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16EC0D25F9FA00618676 /* IDirectory.cpp */; };
@@ -4550,10 +4544,6 @@
DF93D6961444A8B0007C6459 /* UPnPFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UPnPFile.h; sourceTree = "<group>"; };
DF93D6971444A8B0007C6459 /* ZipFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ZipFile.cpp; sourceTree = "<group>"; };
DF93D6981444A8B0007C6459 /* ZipFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZipFile.h; sourceTree = "<group>"; };
- DF93D7F01444B54A007C6459 /* HDHomeRunFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HDHomeRunFile.cpp; sourceTree = "<group>"; };
- DF93D7F11444B54A007C6459 /* HDHomeRunFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDHomeRunFile.h; sourceTree = "<group>"; };
- DF93D7F41444B568007C6459 /* HDHomeRunDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDHomeRunDirectory.h; sourceTree = "<group>"; };
- DF93D7F51444B568007C6459 /* HDHomeRunDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HDHomeRunDirectory.cpp; sourceTree = "<group>"; };
DF98D98A1434F47D00A6EBE1 /* SkinVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkinVariable.cpp; sourceTree = "<group>"; };
DF98D98B1434F47D00A6EBE1 /* SkinVariable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkinVariable.h; sourceTree = "<group>"; };
DF9A71EC1639C8F6005ECB2E /* HTTPFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPFile.cpp; sourceTree = "<group>"; };
@@ -5154,14 +5144,6 @@
E38E18580D25F9FA00618676 /* LangInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LangInfo.cpp; sourceTree = "<group>"; };
E38E18590D25F9FA00618676 /* LangInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LangInfo.h; sourceTree = "<group>"; };
E38E18830D25F9FA00618676 /* libexif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libexif.h; sourceTree = "<group>"; };
- E38E196E0D25F9FB00618676 /* hdhomerun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun.h; sourceTree = "<group>"; };
- E38E196F0D25F9FB00618676 /* hdhomerun_channelscan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_channelscan.h; sourceTree = "<group>"; };
- E38E19700D25F9FB00618676 /* hdhomerun_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_control.h; sourceTree = "<group>"; };
- E38E19710D25F9FB00618676 /* hdhomerun_device.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_device.h; sourceTree = "<group>"; };
- E38E19720D25F9FB00618676 /* hdhomerun_discover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_discover.h; sourceTree = "<group>"; };
- E38E19730D25F9FB00618676 /* hdhomerun_os.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_os.h; sourceTree = "<group>"; };
- E38E19740D25F9FB00618676 /* hdhomerun_pkt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_pkt.h; sourceTree = "<group>"; };
- E38E19750D25F9FB00618676 /* hdhomerun_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hdhomerun_video.h; sourceTree = "<group>"; };
E38E1AB80D25F9FB00618676 /* SConstruct */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConstruct; sourceTree = "<group>"; };
E38E1CD70D25F9FC00618676 /* dataset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dataset.cpp; sourceTree = "<group>"; };
E38E1CD80D25F9FC00618676 /* dataset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dataset.h; sourceTree = "<group>"; };
@@ -8705,10 +8687,6 @@
E38E16E50D25F9FA00618676 /* FTPDirectory.h */,
E38E16E60D25F9FA00618676 /* FTPParse.cpp */,
E38E16E70D25F9FA00618676 /* FTPParse.h */,
- DF93D7F51444B568007C6459 /* HDHomeRunDirectory.cpp */,
- DF93D7F41444B568007C6459 /* HDHomeRunDirectory.h */,
- DF93D7F01444B54A007C6459 /* HDHomeRunFile.cpp */,
- DF93D7F11444B54A007C6459 /* HDHomeRunFile.h */,
F584E12D0F257C5100DB26A5 /* HTTPDirectory.cpp */,
F584E12C0F257C5100DB26A5 /* HTTPDirectory.h */,
DF9A71EC1639C8F6005ECB2E /* HTTPFile.cpp */,
@@ -8928,7 +8906,6 @@
isa = PBXGroup;
children = (
E38E18820D25F9FA00618676 /* libexif */,
- E38E196D0D25F9FB00618676 /* libhdhomerun */,
E38E1A550D25F9FB00618676 /* libUPnP */,
E38E1CE40D25F9FC00618676 /* UnrarXLib */,
);
@@ -8943,21 +8920,6 @@
path = libexif;
sourceTree = "<group>";
};
- E38E196D0D25F9FB00618676 /* libhdhomerun */ = {
- isa = PBXGroup;
- children = (
- E38E196E0D25F9FB00618676 /* hdhomerun.h */,
- E38E196F0D25F9FB00618676 /* hdhomerun_channelscan.h */,
- E38E19700D25F9FB00618676 /* hdhomerun_control.h */,
- E38E19710D25F9FB00618676 /* hdhomerun_device.h */,
- E38E19720D25F9FB00618676 /* hdhomerun_discover.h */,
- E38E19730D25F9FB00618676 /* hdhomerun_os.h */,
- E38E19740D25F9FB00618676 /* hdhomerun_pkt.h */,
- E38E19750D25F9FB00618676 /* hdhomerun_video.h */,
- );
- path = libhdhomerun;
- sourceTree = "<group>";
- };
E38E1A550D25F9FB00618676 /* libUPnP */ = {
isa = PBXGroup;
children = (
@@ -10797,8 +10759,6 @@
DF93D6B11444A8B1007C6459 /* UDFFile.cpp in Sources */,
DF93D6B21444A8B1007C6459 /* UPnPFile.cpp in Sources */,
DF93D6B31444A8B1007C6459 /* ZipFile.cpp in Sources */,
- DF93D7F21444B54A007C6459 /* HDHomeRunFile.cpp in Sources */,
- DF93D7F61444B568007C6459 /* HDHomeRunDirectory.cpp in Sources */,
7C1A85661520522500C63311 /* TextureCacheJob.cpp in Sources */,
7C1F6EBB13ECCFA7001726AB /* LibraryDirectory.cpp in Sources */,
EC720A8F155091BB00FFD782 /* ilog.cpp in Sources */,
@@ -11408,8 +11368,6 @@
DFF0F1FE17528350002DA3A4 /* FileReaderFile.cpp in Sources */,
DFF0F1FF17528350002DA3A4 /* FTPDirectory.cpp in Sources */,
DFF0F20017528350002DA3A4 /* FTPParse.cpp in Sources */,
- DFF0F20317528350002DA3A4 /* HDHomeRunDirectory.cpp in Sources */,
- DFF0F20417528350002DA3A4 /* HDHomeRunFile.cpp in Sources */,
395F6DE41A81FACF0088CC74 /* HTTPImageTransformationHandler.cpp in Sources */,
DFF0F20717528350002DA3A4 /* HTTPDirectory.cpp in Sources */,
DFF0F20817528350002DA3A4 /* HTTPFile.cpp in Sources */,
@@ -12450,8 +12408,6 @@
E4991267174E5D8F00741B6D /* FileReaderFile.cpp in Sources */,
E4991268174E5D8F00741B6D /* FTPDirectory.cpp in Sources */,
E4991269174E5D8F00741B6D /* FTPParse.cpp in Sources */,
- E499126C174E5D8F00741B6D /* HDHomeRunDirectory.cpp in Sources */,
- E499126D174E5D8F00741B6D /* HDHomeRunFile.cpp in Sources */,
E4991270174E5D8F00741B6D /* HTTPDirectory.cpp in Sources */,
E4991271174E5D8F00741B6D /* HTTPFile.cpp in Sources */,
DFC6F4C21AFF7E300039A7FA /* rfft.cpp in Sources */,
diff --git a/Makefile.in b/Makefile.in
index 392abf8315..da3e94d36e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -189,7 +189,6 @@ endif
LIB_DIRS=\
lib/cximage-6.0 \
lib/libexif \
- lib/libhdhomerun \
lib/cpluff \
lib/xbmc-dll-symbols
@@ -405,15 +404,13 @@ else
endif
libexif: dllloader
$(MAKE) -C lib/libexif
-libhdhomerun: dllloader
- $(MAKE) -C lib/libhdhomerun
imagelib: dllloader
$(MAKE) -C lib/cximage-6.0
codecs: dvdpcodecs dvdpextcodecs
-libs: $(LIBSSE4) libhdhomerun imagelib libexif system/libcpluff-@ARCH@.so
+libs: $(LIBSSE4) imagelib libexif system/libcpluff-@ARCH@.so
externals: codecs libs visualizations screensavers libaddon
diff --git a/configure.ac b/configure.ac
index 4457e643c6..2077dacfc1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2478,7 +2478,6 @@ OUTPUT_FILES="Makefile \
xbmc/network/httprequesthandler/python/Makefile \
xbmc/network/upnp/Makefile \
lib/libexif/Makefile \
- lib/libhdhomerun/Makefile \
lib/cximage-6.0/Makefile \
lib/libUPnP/Makefile \
xbmc/DllPaths_generated.h \
diff --git a/lib/libhdhomerun/Makefile.in b/lib/libhdhomerun/Makefile.in
deleted file mode 100644
index ce909c17ca..0000000000
--- a/lib/libhdhomerun/Makefile.in
+++ /dev/null
@@ -1,41 +0,0 @@
-ARCH=@ARCH@
-
-OBJS += hdhomerun_pkt.o
-OBJS += hdhomerun_debug.o
-OBJS += hdhomerun_discover.o
-OBJS += hdhomerun_channels.o
-OBJS += hdhomerun_channelscan.o
-OBJS += hdhomerun_control.o
-OBJS += hdhomerun_video.o
-OBJS += hdhomerun_device.o
-
-CFLAGS += -Wall -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith -fPIC
-
-SLIBS += -lws2_32
-DEFINES += -D__MINGW__
-
-SYSDIR=../../system
-SO=hdhomerun-$(ARCH).so
-SLIB=$(SYSDIR)/$(SO)
-
-$(SLIB): $(OBJS)
-ifeq ($(findstring osx,$(ARCH)), osx)
- $(CC) $(LDFLAGS) -Wl,-alias_list,@abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper_mach_alias \
- -bundle -undefined dynamic_lookup -read_only_relocs suppress -o $@ \
- @abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.o $(OBJS)
-else
- $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -shared -o $@ -Wl,--unresolved-symbols=ignore-all -lm \
- `cat @abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.def` \
- @abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.o
-endif
-
-hdhomerun_dll : $(OBJS)
- $(CC) $(CFLAGS) $(OBJS) $(SLIBS) -Wl,--out-implib,hdhomerun.lib -shared -o hdhomerun.dll
-
-hdhomerun_config hdhomerun_config.exe : $(OBJS) hdhomerun_config.o
- $(CC) $(CFLAGS) $(OBJS) hdhomerun_config.o $(SLIBS) -lpthreadGC -liphlpapi -o $@
-
-hdhomerun_mythconfig : $(LIBSRCS) hdhomerun_mythconfig.o
- $(CC) $(CFLAGS) $(OBJS) hdhomerun_config.o $(SLIBS) -lpthreadGC -liphlpapi -lmysqlclient -o $@
-
-include @abs_top_srcdir@/Makefile.include
diff --git a/lib/libhdhomerun/Makefile.win32 b/lib/libhdhomerun/Makefile.win32
deleted file mode 100644
index ad1cd8cb5e..0000000000
--- a/lib/libhdhomerun/Makefile.win32
+++ /dev/null
@@ -1,26 +0,0 @@
-ARCH=@ARCH@
-
-OBJS += hdhomerun_pkt.o
-OBJS += hdhomerun_debug.o
-OBJS += hdhomerun_discover.o
-OBJS += hdhomerun_channels.o
-OBJS += hdhomerun_channelscan.o
-OBJS += hdhomerun_control.o
-OBJS += hdhomerun_video.o
-OBJS += hdhomerun_device.o
-
-CFLAGS += -Wall -O2 -D__MINGW__ -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith
-CC=gcc
-
-SLIBS += -lws2_32 -liphlpapi
-
-SYSDIR=../../../system
-DLL=hdhomerun.dll
-SLIB=$(SYSDIR)/$(DLL)
-
-hdhomerun_dll : $(OBJS)
- gcc $(OBJS) $(SLIBS) -Wl,--out-implib,hdhomerun.lib -shared -o $(SLIB)
-
-clean :
- rm $(OBJS)
- rm hdhomerun.lib \ No newline at end of file
diff --git a/lib/libhdhomerun/README b/lib/libhdhomerun/README
deleted file mode 100644
index f10520c029..0000000000
--- a/lib/libhdhomerun/README
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * README
- *
- * Copyright © 2005-2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-Top level include file: hdhomerun.h
-
-Top level API: hdhomerun_device. See hdhomerun_device.h for documentation.
-
-The hdhomerun_device API should be used rather than the low level control and video APIs required with previous versions.
-
-Additional libraries required:
-- pthread
-- iphlpapi (windows only)
diff --git a/lib/libhdhomerun/hdhomerun.h b/lib/libhdhomerun/hdhomerun.h
deleted file mode 100644
index 5174d33954..0000000000
--- a/lib/libhdhomerun/hdhomerun.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * hdhomerun.h
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun_os.h"
-#include "hdhomerun_types.h"
-#include "hdhomerun_pkt.h"
-#include "hdhomerun_debug.h"
-#include "hdhomerun_discover.h"
-#include "hdhomerun_control.h"
-#include "hdhomerun_video.h"
-#include "hdhomerun_channels.h"
-#include "hdhomerun_channelscan.h"
-#include "hdhomerun_device.h"
diff --git a/lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj b/lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj
deleted file mode 100644
index 9a9e26ae12..0000000000
--- a/lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectName>libhdhomerun_dll</ProjectName>
- <ProjectGuid>{1E2FB608-3DD2-4021-A598-90008FA6DE85}</ProjectGuid>
- <RootNamespace>hdhomerun</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(SolutionDir)\XBMC.defaults.props" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="$(SolutionDir)\XBMC.defaults.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(ProjectName)\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(ProjectName)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(ProjectName)\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(ProjectName)\$(Configuration)\</IntDir>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Build</CustomBuildAfterTargets>
- <CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Build</CustomBuildAfterTargets>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">hdhomerun</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">hdhomerun</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_USRDLL;DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <CompileAs>CompileAsCpp</CompileAs>
- <ExceptionHandling>Sync</ExceptionHandling>
- </ClCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ProfileGuidedDatabase>
- </ProfileGuidedDatabase>
- <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
- </Link>
- <CustomBuildStep>
- <Command>copy /B /Y "$(TargetPath)" "$(SolutionDir)..\..\system\$(TargetFileName)"</Command>
- </CustomBuildStep>
- <CustomBuildStep>
- <Message>Copy Output</Message>
- <Outputs>$(SolutionDir)..\..\system\$(TargetFileName)</Outputs>
- <Inputs>$(TargetPath)</Inputs>
- </CustomBuildStep>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <PreprocessorDefinitions>_USRDLL;DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <ExceptionHandling>Sync</ExceptionHandling>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <CompileAs>CompileAsCpp</CompileAs>
- </ClCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ProfileGuidedDatabase>
- </ProfileGuidedDatabase>
- <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
- </Link>
- <CustomBuildStep>
- <Command>copy /B /Y "$(TargetPath)" "$(SolutionDir)..\..\system\$(TargetFileName)"</Command>
- </CustomBuildStep>
- <CustomBuildStep>
- <Message>Copy Output</Message>
- <Outputs>$(SolutionDir)..\..\system\$(TargetFileName)</Outputs>
- <Inputs>$(TargetPath)</Inputs>
- </CustomBuildStep>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\hdhomerun_channels.c" />
- <ClCompile Include="..\hdhomerun_channelscan.c" />
- <ClCompile Include="..\hdhomerun_config.c" />
- <ClCompile Include="..\hdhomerun_control.c" />
- <ClCompile Include="..\hdhomerun_debug.c" />
- <ClCompile Include="..\hdhomerun_device.c" />
- <ClCompile Include="..\hdhomerun_dhcp.c" />
- <ClCompile Include="..\hdhomerun_discover.c" />
- <ClCompile Include="..\hdhomerun_pkt.c" />
- <ClCompile Include="..\hdhomerun_video.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\hdhomerun.h" />
- <ClInclude Include="..\hdhomerun_channels.h" />
- <ClInclude Include="..\hdhomerun_channelscan.h" />
- <ClInclude Include="..\hdhomerun_control.h" />
- <ClInclude Include="..\hdhomerun_debug.h" />
- <ClInclude Include="..\hdhomerun_device.h" />
- <ClInclude Include="..\hdhomerun_dhcp.h" />
- <ClInclude Include="..\hdhomerun_discover.h" />
- <ClInclude Include="..\hdhomerun_os_windows.h" />
- <ClInclude Include="..\hdhomerun_pkt.h" />
- <ClInclude Include="..\hdhomerun_types.h" />
- <ClInclude Include="..\hdhomerun_video.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj.filters b/lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj.filters
deleted file mode 100644
index ae402701f3..0000000000
--- a/lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj.filters
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="..\hdhomerun_channels.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_channelscan.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_config.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_control.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_debug.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_device.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_dhcp.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_discover.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_pkt.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\hdhomerun_video.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\hdhomerun.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_channels.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_channelscan.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_control.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_debug.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_device.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_dhcp.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_discover.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_os_windows.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_pkt.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_types.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\hdhomerun_video.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/lib/libhdhomerun/hdhomerun_channels.c b/lib/libhdhomerun/hdhomerun_channels.c
deleted file mode 100644
index 38d72a3823..0000000000
--- a/lib/libhdhomerun/hdhomerun_channels.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * hdhomerun_channels.c
- *
- * Copyright © 2007-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-#define FREQUENCY_RESOLUTION 62500
-
-struct hdhomerun_channel_entry_t {
- struct hdhomerun_channel_entry_t *next;
- struct hdhomerun_channel_entry_t *prev;
- uint32_t frequency;
- uint8_t channel_number;
- char name[16];
-};
-
-struct hdhomerun_channel_list_t {
- struct hdhomerun_channel_entry_t *head;
- struct hdhomerun_channel_entry_t *tail;
-};
-
-struct hdhomerun_channelmap_range_t {
- uint8_t channel_range_start;
- uint8_t channel_range_end;
- uint32_t frequency;
- uint32_t spacing;
-};
-
-struct hdhomerun_channelmap_record_t {
- const char *channelmap_prefix;
- const char *channelmap;
- const struct hdhomerun_channelmap_range_t *range_list;
- const char *channelmap_scan_group;
- const char *countrycodes;
-};
-
-/* AU antenna channels. Channels {0, 1, 2, 6, 7, 8, 9, 9A} are numbered {2, 3, 4, 5, 6, 7, 8, 9} by the HDHomeRun. */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_au_bcast[] = {
- { 2, 2, 48500000, 7000000},
- { 3, 4, 59500000, 7000000},
- { 5, 12, 177500000, 7000000},
- { 28, 69, 529500000, 7000000},
- { 0, 0, 0, 0}
-};
-
-/* AU cable channels. TBD. */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_au_cable[] = {
- { 0, 0, 0, 0}
-};
-
-/* EU antenna channels. */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_eu_bcast[] = {
- { 2, 4, 50500000, 7000000},
- { 5, 12, 177500000, 7000000},
- { 21, 69, 474000000, 8000000},
- { 0, 0, 0, 0}
-};
-
-/* EU cable channels. Channels do not have simple numbers - the HDHomeRun uses its own numbering scheme (subject to change). */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_eu_cable[] = {
- { 6, 7, 113000000, 8000000},
- { 9, 100, 138000000, 8000000},
- { 0, 0, 0, 0}
-};
-
-/* US antenna channels. */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_us_bcast[] = {
- { 2, 4, 57000000, 6000000},
- { 5, 6, 79000000, 6000000},
- { 7, 13, 177000000, 6000000},
- { 14, 69, 473000000, 6000000},
- { 0, 0, 0, 0}
-};
-
-/* US cable channels. */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_us_cable[] = {
- { 2, 4, 57000000, 6000000},
- { 5, 6, 79000000, 6000000},
- { 7, 13, 177000000, 6000000},
- { 14, 22, 123000000, 6000000},
- { 23, 94, 219000000, 6000000},
- { 95, 99, 93000000, 6000000},
- {100, 135, 651000000, 6000000},
- { 0, 0, 0, 0}
-};
-
-/* US cable channels (HRC). */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_us_hrc[] = {
- { 2, 4, 55752700, 6000300},
- { 5, 6, 79753900, 6000300},
- { 7, 13, 175758700, 6000300},
- { 14, 22, 121756000, 6000300},
- { 23, 94, 217760800, 6000300},
- { 95, 99, 91754500, 6000300},
- {100, 135, 649782400, 6000300},
- { 0, 0, 0, 0}
-};
-
-/* US cable channels (IRC). */
-static const struct hdhomerun_channelmap_range_t hdhomerun_channelmap_range_us_irc[] = {
- { 2, 4, 57012500, 6000000},
- { 5, 6, 81012500, 6000000},
- { 7, 13, 177012500, 6000000},
- { 14, 22, 123012500, 6000000},
- { 23, 41, 219012500, 6000000},
- { 42, 42, 333025000, 6000000},
- { 43, 94, 339012500, 6000000},
- { 95, 97, 93012500, 6000000},
- { 98, 99, 111025000, 6000000},
- {100, 135, 651012500, 6000000},
- { 0, 0, 0, 0}
-};
-
-static const struct hdhomerun_channelmap_record_t hdhomerun_channelmap_table[] = {
- {"au", "au-bcast", hdhomerun_channelmap_range_au_bcast, "au-bcast", "AU"},
- {"au", "au-cable", hdhomerun_channelmap_range_au_cable, "au-cable", "AU"},
- {"eu", "eu-bcast", hdhomerun_channelmap_range_eu_bcast, "eu-bcast", "EU"},
- {"eu", "eu-cable", hdhomerun_channelmap_range_eu_cable, "eu-cable", "EU"},
- {"tw", "tw-bcast", hdhomerun_channelmap_range_us_bcast, "tw-bcast", "TW"},
- {"tw", "tw-cable", hdhomerun_channelmap_range_us_cable, "tw-cable", "TW"},
- {"us", "us-bcast", hdhomerun_channelmap_range_us_bcast, "us-bcast", "CA US"},
- {"us", "us-cable", hdhomerun_channelmap_range_us_cable, "us-cable us-hrc us-irc", "CA US"},
- {"us", "us-hrc", hdhomerun_channelmap_range_us_hrc , "us-cable us-hrc us-irc", "CA US"},
- {"us", "us-irc", hdhomerun_channelmap_range_us_irc, "us-cable us-hrc us-irc", "CA US"},
- {NULL, NULL, NULL, NULL, NULL}
-};
-
-const char *hdhomerun_channelmap_convert_countrycode_to_channelmap_prefix(const char *countrycode)
-{
- const struct hdhomerun_channelmap_record_t *record = hdhomerun_channelmap_table;
- while (record->channelmap) {
- if (strstr(record->countrycodes, countrycode)) {
- return record->channelmap_prefix;
- }
- record++;
- }
-
- return "eu";
-}
-
-const char *hdhomerun_channelmap_get_channelmap_scan_group(const char *channelmap)
-{
- const struct hdhomerun_channelmap_record_t *record = hdhomerun_channelmap_table;
- while (record->channelmap) {
- if (strstr(channelmap, record->channelmap)) {
- return record->channelmap_scan_group;
- }
- record++;
- }
-
- return NULL;
-}
-
-uint8_t hdhomerun_channel_entry_channel_number(struct hdhomerun_channel_entry_t *entry)
-{
- return entry->channel_number;
-}
-
-uint32_t hdhomerun_channel_entry_frequency(struct hdhomerun_channel_entry_t *entry)
-{
- return entry->frequency;
-}
-
-const char *hdhomerun_channel_entry_name(struct hdhomerun_channel_entry_t *entry)
-{
- return entry->name;
-}
-
-struct hdhomerun_channel_entry_t *hdhomerun_channel_list_first(struct hdhomerun_channel_list_t *channel_list)
-{
- return channel_list->head;
-}
-
-struct hdhomerun_channel_entry_t *hdhomerun_channel_list_last(struct hdhomerun_channel_list_t *channel_list)
-{
- return channel_list->tail;
-}
-
-struct hdhomerun_channel_entry_t *hdhomerun_channel_list_next(struct hdhomerun_channel_list_t *channel_list, struct hdhomerun_channel_entry_t *entry)
-{
- return entry->next;
-}
-
-struct hdhomerun_channel_entry_t *hdhomerun_channel_list_prev(struct hdhomerun_channel_list_t *channel_list, struct hdhomerun_channel_entry_t *entry)
-{
- return entry->prev;
-}
-
-uint32_t hdhomerun_channel_list_total_count(struct hdhomerun_channel_list_t *channel_list)
-{
- uint32_t count = 0;
-
- struct hdhomerun_channel_entry_t *entry = hdhomerun_channel_list_first(channel_list);
- while (entry) {
- count++;
- entry = hdhomerun_channel_list_next(channel_list, entry);
- }
-
- return count;
-}
-
-uint32_t hdhomerun_channel_list_frequency_count(struct hdhomerun_channel_list_t *channel_list)
-{
- uint32_t count = 0;
- uint32_t last_frequency = 0;
-
- struct hdhomerun_channel_entry_t *entry = hdhomerun_channel_list_first(channel_list);
- while (entry) {
- if (entry->frequency != last_frequency) {
- last_frequency = entry->frequency;
- count++;
- }
-
- entry = hdhomerun_channel_list_next(channel_list, entry);
- }
-
- return count;
-}
-
-uint32_t hdhomerun_channel_frequency_truncate(uint32_t frequency)
-{
- return (frequency / FREQUENCY_RESOLUTION) * FREQUENCY_RESOLUTION;
-}
-
-uint32_t hdhomerun_channel_number_to_frequency(struct hdhomerun_channel_list_t *channel_list, uint8_t channel_number)
-{
- struct hdhomerun_channel_entry_t *entry = hdhomerun_channel_list_first(channel_list);
- while (entry) {
- if (entry->channel_number == channel_number) {
- return entry->frequency;
- }
-
- entry = hdhomerun_channel_list_next(channel_list, entry);
- }
-
- return 0;
-}
-
-uint8_t hdhomerun_channel_frequency_to_number(struct hdhomerun_channel_list_t *channel_list, uint32_t frequency)
-{
- frequency = hdhomerun_channel_frequency_truncate(frequency);
-
- struct hdhomerun_channel_entry_t *entry = hdhomerun_channel_list_first(channel_list);
- while (entry) {
- if (entry->frequency == frequency) {
- return entry->channel_number;
- }
- if (entry->frequency > frequency) {
- return 0;
- }
-
- entry = hdhomerun_channel_list_next(channel_list, entry);
- }
-
- return 0;
-}
-
-static void hdhomerun_channel_list_build_insert(struct hdhomerun_channel_list_t *channel_list, struct hdhomerun_channel_entry_t *entry)
-{
- struct hdhomerun_channel_entry_t *prev = NULL;
- struct hdhomerun_channel_entry_t *next = channel_list->head;
-
- while (next) {
- if (next->frequency > entry->frequency) {
- break;
- }
-
- prev = next;
- next = next->next;
- }
-
- entry->prev = prev;
- entry->next = next;
-
- if (prev) {
- prev->next = entry;
- } else {
- channel_list->head = entry;
- }
-
- if (next) {
- next->prev = entry;
- } else {
- channel_list->tail = entry;
- }
-}
-
-static void hdhomerun_channel_list_build_range(struct hdhomerun_channel_list_t *channel_list, const char *channelmap, const struct hdhomerun_channelmap_range_t *range)
-{
- uint8_t channel_number;
- for (channel_number = range->channel_range_start; channel_number <= range->channel_range_end; channel_number++) {
- struct hdhomerun_channel_entry_t *entry = (struct hdhomerun_channel_entry_t *)calloc(1, sizeof(struct hdhomerun_channel_entry_t));
- if (!entry) {
- return;
- }
-
- entry->channel_number = channel_number;
- entry->frequency = range->frequency + ((uint32_t)(channel_number - range->channel_range_start) * range->spacing);
- entry->frequency = hdhomerun_channel_frequency_truncate(entry->frequency);
- sprintf(entry->name, "%s:%u", channelmap, entry->channel_number);
-
- hdhomerun_channel_list_build_insert(channel_list, entry);
- }
-}
-
-static void hdhomerun_channel_list_build_ranges(struct hdhomerun_channel_list_t *channel_list, const struct hdhomerun_channelmap_record_t *record)
-{
- const struct hdhomerun_channelmap_range_t *range = record->range_list;
- while (range->frequency) {
- hdhomerun_channel_list_build_range(channel_list, record->channelmap, range);
- range++;
- }
-}
-
-void hdhomerun_channel_list_destroy(struct hdhomerun_channel_list_t *channel_list)
-{
- while (channel_list->head) {
- struct hdhomerun_channel_entry_t *entry = channel_list->head;
- channel_list->head = entry->next;
- free(entry);
- }
-
- free(channel_list);
-}
-
-struct hdhomerun_channel_list_t *hdhomerun_channel_list_create(const char *channelmap)
-{
- struct hdhomerun_channel_list_t *channel_list = (struct hdhomerun_channel_list_t *)calloc(1, sizeof(struct hdhomerun_channel_list_t));
- if (!channel_list) {
- return NULL;
- }
-
- const struct hdhomerun_channelmap_record_t *record = hdhomerun_channelmap_table;
- while (record->channelmap) {
- if (!strstr(channelmap, record->channelmap)) {
- record++;
- continue;
- }
-
- hdhomerun_channel_list_build_ranges(channel_list, record);
- record++;
- }
-
- if (!channel_list->head) {
- free(channel_list);
- return NULL;
- }
-
- return channel_list;
-}
diff --git a/lib/libhdhomerun/hdhomerun_channels.h b/lib/libhdhomerun/hdhomerun_channels.h
deleted file mode 100644
index 7f602a28db..0000000000
--- a/lib/libhdhomerun/hdhomerun_channels.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * hdhomerun_channels.h
- *
- * Copyright © 2007-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hdhomerun_channel_entry_t;
-struct hdhomerun_channel_list_t;
-
-extern LIBTYPE const char *hdhomerun_channelmap_convert_countrycode_to_channelmap_prefix(const char *countrycode);
-extern LIBTYPE const char *hdhomerun_channelmap_get_channelmap_scan_group(const char *channelmap);
-
-extern LIBTYPE uint8_t hdhomerun_channel_entry_channel_number(struct hdhomerun_channel_entry_t *entry);
-extern LIBTYPE uint32_t hdhomerun_channel_entry_frequency(struct hdhomerun_channel_entry_t *entry);
-extern LIBTYPE const char *hdhomerun_channel_entry_name(struct hdhomerun_channel_entry_t *entry);
-
-extern LIBTYPE struct hdhomerun_channel_list_t *hdhomerun_channel_list_create(const char *channelmap);
-extern LIBTYPE void hdhomerun_channel_list_destroy(struct hdhomerun_channel_list_t *channel_list);
-
-extern LIBTYPE struct hdhomerun_channel_entry_t *hdhomerun_channel_list_first(struct hdhomerun_channel_list_t *channel_list);
-extern LIBTYPE struct hdhomerun_channel_entry_t *hdhomerun_channel_list_last(struct hdhomerun_channel_list_t *channel_list);
-extern LIBTYPE struct hdhomerun_channel_entry_t *hdhomerun_channel_list_next(struct hdhomerun_channel_list_t *channel_list, struct hdhomerun_channel_entry_t *entry);
-extern LIBTYPE struct hdhomerun_channel_entry_t *hdhomerun_channel_list_prev(struct hdhomerun_channel_list_t *channel_list, struct hdhomerun_channel_entry_t *entry);
-extern LIBTYPE uint32_t hdhomerun_channel_list_total_count(struct hdhomerun_channel_list_t *channel_list);
-extern LIBTYPE uint32_t hdhomerun_channel_list_frequency_count(struct hdhomerun_channel_list_t *channel_list);
-
-extern LIBTYPE uint32_t hdhomerun_channel_frequency_truncate(uint32_t frequency);
-extern LIBTYPE uint32_t hdhomerun_channel_number_to_frequency(struct hdhomerun_channel_list_t *channel_list, uint8_t channel_number);
-extern LIBTYPE uint8_t hdhomerun_channel_frequency_to_number(struct hdhomerun_channel_list_t *channel_list, uint32_t frequency);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_channelscan.c b/lib/libhdhomerun/hdhomerun_channelscan.c
deleted file mode 100644
index f661bc4a82..0000000000
--- a/lib/libhdhomerun/hdhomerun_channelscan.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * hdhomerun_channelscan.c
- *
- * Copyright © 2007-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-struct hdhomerun_channelscan_t {
- struct hdhomerun_device_t *hd;
- uint32_t scanned_channels;
- struct hdhomerun_channel_list_t *channel_list;
- struct hdhomerun_channel_entry_t *next_channel;
-};
-
-struct hdhomerun_channelscan_t *channelscan_create(struct hdhomerun_device_t *hd, const char *channelmap)
-{
- struct hdhomerun_channelscan_t *scan = (struct hdhomerun_channelscan_t *)calloc(1, sizeof(struct hdhomerun_channelscan_t));
- if (!scan) {
- return NULL;
- }
-
- scan->hd = hd;
-
- scan->channel_list = hdhomerun_channel_list_create(channelmap);
- if (!scan->channel_list) {
- free(scan);
- return NULL;
- }
-
- scan->next_channel = hdhomerun_channel_list_last(scan->channel_list);
- return scan;
-}
-
-void channelscan_destroy(struct hdhomerun_channelscan_t *scan)
-{
- free(scan);
-}
-
-static int channelscan_find_lock(struct hdhomerun_channelscan_t *scan, uint32_t frequency, struct hdhomerun_channelscan_result_t *result)
-{
- /* Set channel. */
- char channel_str[64];
- sprintf(channel_str, "auto:%ld", (unsigned long)frequency);
-
- int ret = hdhomerun_device_set_tuner_channel(scan->hd, channel_str);
- if (ret <= 0) {
- return ret;
- }
-
- /* Wait for lock. */
- ret = hdhomerun_device_wait_for_lock(scan->hd, &result->status);
- if (ret <= 0) {
- return ret;
- }
- if (!result->status.lock_supported) {
- return 1;
- }
-
- /* Wait for symbol quality = 100%. */
- uint64_t timeout = getcurrenttime() + 5000;
- while (1) {
- ret = hdhomerun_device_get_tuner_status(scan->hd, NULL, &result->status);
- if (ret <= 0) {
- return ret;
- }
-
- if (result->status.symbol_error_quality == 100) {
- return 1;
- }
-
- if (getcurrenttime() >= timeout) {
- return 1;
- }
-
- msleep(250);
- }
-}
-
-static void channelscan_extract_name(struct hdhomerun_channelscan_program_t *program, const char *line)
-{
- /* Find start of name. */
- const char *start = strchr(line, ' ');
- if (!start) {
- return;
- }
- start++;
-
- start = strchr(start, ' ');
- if (!start) {
- return;
- }
- start++;
-
- /* Find end of name. */
- const char *end = strstr(start, " (");
- if (!end) {
- end = strchr(line, 0);
- }
-
- if (end <= start) {
- return;
- }
-
- /* Extract name. */
- size_t length = (size_t)(end - start);
- if (length > sizeof(program->name) - 1) {
- length = sizeof(program->name) - 1;
- }
-
- strncpy(program->name, start, length);
- program->name[length] = 0;
-}
-
-static int channelscan_detect_programs(struct hdhomerun_channelscan_t *scan, struct hdhomerun_channelscan_result_t *result, bool_t *pchanged, bool_t *pincomplete)
-{
- *pchanged = FALSE;
- *pincomplete = FALSE;
-
- char *streaminfo;
- int ret = hdhomerun_device_get_tuner_streaminfo(scan->hd, &streaminfo);
- if (ret <= 0) {
- return ret;
- }
-
- char *line = streaminfo;
- int program_count = 0;
-
- while (1) {
- char *end = strchr(line, '\n');
- if (!end) {
- break;
- }
-
- *end = 0;
-
- unsigned long pat_crc;
- if (sscanf(line, "crc=0x%lx", &pat_crc) == 1) {
- result->pat_crc = pat_crc;
- continue;
- }
-
- struct hdhomerun_channelscan_program_t program;
- memset(&program, 0, sizeof(program));
-
- strncpy(program.program_str, line, sizeof(program.program_str));
- program.program_str[sizeof(program.program_str) - 1] = 0;
-
- unsigned int program_number;
- unsigned int virtual_major, virtual_minor;
- if (sscanf(line, "%u: %u.%u", &program_number, &virtual_major, &virtual_minor) != 3) {
- if (sscanf(line, "%u: %u", &program_number, &virtual_major) != 2) {
- continue;
- }
- virtual_minor = 0;
- }
-
- program.program_number = program_number;
- program.virtual_major = virtual_major;
- program.virtual_minor = virtual_minor;
-
- channelscan_extract_name(&program, line);
-
- if (strstr(line, "(control)")) {
- program.type = HDHOMERUN_CHANNELSCAN_PROGRAM_CONTROL;
- } else if (strstr(line, "(encrypted)")) {
- program.type = HDHOMERUN_CHANNELSCAN_PROGRAM_ENCRYPTED;
- } else if (strstr(line, "(no data)")) {
- program.type = HDHOMERUN_CHANNELSCAN_PROGRAM_NODATA;
- *pincomplete = TRUE;
- } else {
- program.type = HDHOMERUN_CHANNELSCAN_PROGRAM_NORMAL;
- if ((program.virtual_major == 0) || (program.name[0] == 0)) {
- *pincomplete = TRUE;
- }
- }
-
- if (memcmp(&result->programs[program_count], &program, sizeof(program)) != 0) {
- memcpy(&result->programs[program_count], &program, sizeof(program));
- *pchanged = TRUE;
- }
-
- program_count++;
- if (program_count >= HDHOMERUN_CHANNELSCAN_MAX_PROGRAM_COUNT) {
- break;
- }
-
- line = end + 1;
- }
-
- if (program_count == 0) {
- *pincomplete = TRUE;
- }
- if (result->program_count != program_count) {
- result->program_count = program_count;
- *pchanged = TRUE;
- }
-
- return 1;
-}
-
-int channelscan_advance(struct hdhomerun_channelscan_t *scan, struct hdhomerun_channelscan_result_t *result)
-{
- memset(result, 0, sizeof(struct hdhomerun_channelscan_result_t));
-
- struct hdhomerun_channel_entry_t *entry = scan->next_channel;
- if (!entry) {
- return 0;
- }
-
- /* Combine channels with same frequency. */
- result->frequency = hdhomerun_channel_entry_frequency(entry);
- strncpy(result->channel_str, hdhomerun_channel_entry_name(entry), sizeof(result->channel_str) - 1);
- result->channel_str[sizeof(result->channel_str) - 1] = 0;
-
- while (1) {
- entry = hdhomerun_channel_list_prev(scan->channel_list, entry);
- if (!entry) {
- scan->next_channel = NULL;
- break;
- }
-
- if (hdhomerun_channel_entry_frequency(entry) != result->frequency) {
- scan->next_channel = entry;
- break;
- }
-
- char *ptr = strchr(result->channel_str, 0);
- sprintf(ptr, ", %s", hdhomerun_channel_entry_name(entry));
- }
-
- return 1;
-}
-
-int channelscan_detect(struct hdhomerun_channelscan_t *scan, struct hdhomerun_channelscan_result_t *result)
-{
- scan->scanned_channels++;
-
- /* Find lock. */
- int ret = channelscan_find_lock(scan, result->frequency, result);
- if (ret <= 0) {
- return ret;
- }
- if (!result->status.lock_supported) {
- return 1;
- }
-
- /* Detect programs. */
- result->program_count = 0;
-
- uint64_t timeout = getcurrenttime() + 10000;
- uint64_t complete_time = getcurrenttime() + 2000;
- while (1) {
- bool_t changed, incomplete;
- ret = channelscan_detect_programs(scan, result, &changed, &incomplete);
- if (ret <= 0) {
- return ret;
- }
-
- if (changed) {
- complete_time = getcurrenttime() + 2000;
- }
-
- if (!incomplete && (getcurrenttime() >= complete_time)) {
- return 1;
- }
-
- if (getcurrenttime() >= timeout) {
- return 1;
- }
-
- msleep(250);
- }
-}
-
-uint8_t channelscan_get_progress(struct hdhomerun_channelscan_t *scan)
-{
- struct hdhomerun_channel_entry_t *entry = scan->next_channel;
- if (!entry) {
- return 100;
- }
-
- uint32_t channels_remaining = 1;
- uint32_t frequency = hdhomerun_channel_entry_frequency(entry);
-
- while (1) {
- entry = hdhomerun_channel_list_prev(scan->channel_list, entry);
- if (!entry) {
- break;
- }
-
- if (hdhomerun_channel_entry_frequency(entry) != frequency) {
- channels_remaining++;
- frequency = hdhomerun_channel_entry_frequency(entry);
- }
- }
-
- return scan->scanned_channels * 100 / (scan->scanned_channels + channels_remaining);
-}
diff --git a/lib/libhdhomerun/hdhomerun_channelscan.h b/lib/libhdhomerun/hdhomerun_channelscan.h
deleted file mode 100644
index 3c853d5fac..0000000000
--- a/lib/libhdhomerun/hdhomerun_channelscan.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * hdhomerun_channelscan.h
- *
- * Copyright © 2007-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define HDHOMERUN_CHANNELSCAN_PROGRAM_NORMAL 0
-#define HDHOMERUN_CHANNELSCAN_PROGRAM_NODATA 1
-#define HDHOMERUN_CHANNELSCAN_PROGRAM_CONTROL 2
-#define HDHOMERUN_CHANNELSCAN_PROGRAM_ENCRYPTED 3
-
-struct hdhomerun_channelscan_t;
-
-extern LIBTYPE struct hdhomerun_channelscan_t *channelscan_create(struct hdhomerun_device_t *hd, const char *channelmap);
-extern LIBTYPE void channelscan_destroy(struct hdhomerun_channelscan_t *scan);
-
-extern LIBTYPE int channelscan_advance(struct hdhomerun_channelscan_t *scan, struct hdhomerun_channelscan_result_t *result);
-extern LIBTYPE int channelscan_detect(struct hdhomerun_channelscan_t *scan, struct hdhomerun_channelscan_result_t *result);
-extern LIBTYPE uint8_t channelscan_get_progress(struct hdhomerun_channelscan_t *scan);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_config.c b/lib/libhdhomerun/hdhomerun_config.c
deleted file mode 100644
index fc65078167..0000000000
--- a/lib/libhdhomerun/hdhomerun_config.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- * hdhomerun_config.c
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-/*
- * The console output format should be set to UTF-8, however in XP and Vista this breaks batch file processing.
- * Attempting to restore on exit fails to restore if the program is terminated by the user.
- * Solution - set the output format each printf.
- */
-#if defined(__WINDOWS__)
-#define printf console_printf
-#define vprintf console_vprintf
-#endif
-
-static const char *appname;
-
-struct hdhomerun_device_t *hd;
-
-static int help(void)
-{
- printf("Usage:\n");
- printf("\t%s discover\n", appname);
- printf("\t%s <id> get help\n", appname);
- printf("\t%s <id> get <item>\n", appname);
- printf("\t%s <id> set <item> <value>\n", appname);
- printf("\t%s <id> scan <tuner> [<filename>]\n", appname);
- printf("\t%s <id> save <tuner> <filename>\n", appname);
- printf("\t%s <id> upgrade <filename>\n", appname);
- return -1;
-}
-
-static void extract_appname(const char *argv0)
-{
- const char *ptr = strrchr(argv0, '/');
- if (ptr) {
- argv0 = ptr + 1;
- }
- ptr = strrchr(argv0, '\\');
- if (ptr) {
- argv0 = ptr + 1;
- }
- appname = argv0;
-}
-
-static bool_t contains(const char *arg, const char *cmpstr)
-{
- if (strcmp(arg, cmpstr) == 0) {
- return TRUE;
- }
-
- if (*arg++ != '-') {
- return FALSE;
- }
- if (*arg++ != '-') {
- return FALSE;
- }
- if (strcmp(arg, cmpstr) == 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-static uint32_t parse_ip_addr(const char *str)
-{
- unsigned long a[4];
- if (sscanf(str, "%lu.%lu.%lu.%lu", &a[0], &a[1], &a[2], &a[3]) != 4) {
- return 0;
- }
-
- return (uint32_t)((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | (a[3] << 0));
-}
-
-static int discover_print(char *target_ip_str)
-{
- uint32_t target_ip = 0;
- if (target_ip_str) {
- target_ip = parse_ip_addr(target_ip_str);
- if (target_ip == 0) {
- fprintf(stderr, "invalid ip address: %s\n", target_ip_str);
- return -1;
- }
- }
-
- struct hdhomerun_discover_device_t result_list[64];
- int count = hdhomerun_discover_find_devices_custom(target_ip, HDHOMERUN_DEVICE_TYPE_TUNER, HDHOMERUN_DEVICE_ID_WILDCARD, result_list, 64);
- if (count < 0) {
- fprintf(stderr, "error sending discover request\n");
- return -1;
- }
- if (count == 0) {
- printf("no devices found\n");
- return 0;
- }
-
- int index;
- for (index = 0; index < count; index++) {
- struct hdhomerun_discover_device_t *result = &result_list[index];
- printf("hdhomerun device %08lX found at %u.%u.%u.%u\n",
- (unsigned long)result->device_id,
- (unsigned int)(result->ip_addr >> 24) & 0x0FF, (unsigned int)(result->ip_addr >> 16) & 0x0FF,
- (unsigned int)(result->ip_addr >> 8) & 0x0FF, (unsigned int)(result->ip_addr >> 0) & 0x0FF
- );
- }
-
- return count;
-}
-
-static int cmd_get(const char *item)
-{
- char *ret_value;
- char *ret_error;
- if (hdhomerun_device_get_var(hd, item, &ret_value, &ret_error) < 0) {
- fprintf(stderr, "communication error sending request to hdhomerun device\n");
- return -1;
- }
-
- if (ret_error) {
- printf("%s\n", ret_error);
- return 0;
- }
-
- printf("%s\n", ret_value);
- return 1;
-}
-
-static int cmd_set_internal(const char *item, const char *value)
-{
- char *ret_error;
- if (hdhomerun_device_set_var(hd, item, value, NULL, &ret_error) < 0) {
- fprintf(stderr, "communication error sending request to hdhomerun device\n");
- return -1;
- }
-
- if (ret_error) {
- printf("%s\n", ret_error);
- return 0;
- }
-
- return 1;
-}
-
-static int cmd_set(const char *item, const char *value)
-{
- if (strcmp(value, "-") == 0) {
- char *buffer = NULL;
- size_t pos = 0;
-
- while (1) {
- buffer = (char *)realloc(buffer, pos + 1024);
- if (!buffer) {
- fprintf(stderr, "out of memory\n");
- return -1;
- }
-
- size_t size = fread(buffer + pos, 1, 1024, stdin);
- pos += size;
-
- if (size < 1024) {
- break;
- }
- }
-
- buffer[pos] = 0;
-
- int ret = cmd_set_internal(item, buffer);
-
- free(buffer);
- return ret;
- }
-
- return cmd_set_internal(item, value);
-}
-
-static void cmd_scan_printf(FILE *fp, const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
-
- if (fp) {
- va_list apc;
- va_copy(apc, ap);
-
- vfprintf(fp, fmt, apc);
- fflush(fp);
-
- va_end(apc);
- }
-
- vprintf(fmt, ap);
- fflush(stdout);
-
- va_end(ap);
-}
-
-static int cmd_scan(const char *tuner_str, const char *filename)
-{
- if (hdhomerun_device_set_tuner_from_str(hd, tuner_str) <= 0) {
- fprintf(stderr, "invalid tuner number\n");
- return -1;
- }
-
- char *channelmap;
- if (hdhomerun_device_get_tuner_channelmap(hd, &channelmap) <= 0) {
- fprintf(stderr, "failed to query channelmap from device\n");
- return -1;
- }
-
- const char *channelmap_scan_group = hdhomerun_channelmap_get_channelmap_scan_group(channelmap);
- if (!channelmap_scan_group) {
- fprintf(stderr, "unknown channelmap '%s'\n", channelmap);
- return -1;
- }
-
- if (hdhomerun_device_channelscan_init(hd, channelmap_scan_group) <= 0) {
- fprintf(stderr, "failed to initialize channel scan\n");
- return -1;
- }
-
- FILE *fp = NULL;
- if (filename) {
- fp = fopen(filename, "w");
- if (!fp) {
- fprintf(stderr, "unable to create file: %s\n", filename);
- return -1;
- }
- }
-
- int ret;
- while (1) {
- struct hdhomerun_channelscan_result_t result;
- ret = hdhomerun_device_channelscan_advance(hd, &result);
- if (ret <= 0) {
- break;
- }
-
- cmd_scan_printf(fp, "SCANNING: %lu (%s)\n",
- result.frequency, result.channel_str
- );
-
- ret = hdhomerun_device_channelscan_detect(hd, &result);
- if (ret <= 0) {
- break;
- }
-
- cmd_scan_printf(fp, "LOCK: %s (ss=%u snq=%u seq=%u)\n",
- result.status.lock_str, result.status.signal_strength,
- result.status.signal_to_noise_quality, result.status.symbol_error_quality
- );
-
- int i;
- for (i = 0; i < result.program_count; i++) {
- struct hdhomerun_channelscan_program_t *program = &result.programs[i];
- cmd_scan_printf(fp, "PROGRAM %s\n", program->program_str);
- }
- }
-
- if (fp) {
- fclose(fp);
- }
- if (ret < 0) {
- fprintf(stderr, "communication error sending request to hdhomerun device\n");
- }
- return ret;
-}
-
-static bool_t cmd_saving = FALSE;
-
-static void cmd_save_abort(int arg)
-{
- cmd_saving = FALSE;
-}
-
-static int cmd_save(const char *tuner_str, const char *filename)
-{
- if (hdhomerun_device_set_tuner_from_str(hd, tuner_str) <= 0) {
- fprintf(stderr, "invalid tuner number\n");
- return -1;
- }
-
- FILE *fp;
- if (strcmp(filename, "null") == 0) {
- fp = NULL;
- } else if (strcmp(filename, "-") == 0) {
- fp = stdout;
- } else {
- fp = fopen(filename, "wb");
- if (!fp) {
- fprintf(stderr, "unable to create file %s\n", filename);
- return -1;
- }
- }
-
- int ret = hdhomerun_device_stream_start(hd);
- if (ret <= 0) {
- fprintf(stderr, "unable to start stream\n");
- return ret;
- }
-
- signal(SIGINT, cmd_save_abort);
- signal(SIGPIPE, cmd_save_abort);
-
- struct hdhomerun_video_stats_t stats_old, stats_cur;
- hdhomerun_device_get_video_stats(hd, &stats_old);
-
- uint64_t next_progress = getcurrenttime() + 1000;
-
- cmd_saving = TRUE;
- while (cmd_saving) {
- uint64_t loop_start_time = getcurrenttime();
-
- size_t actual_size;
- uint8_t *ptr = hdhomerun_device_stream_recv(hd, VIDEO_DATA_BUFFER_SIZE_1S, &actual_size);
- if (!ptr) {
- msleep(64);
- continue;
- }
-
- if (fp) {
- if (fwrite(ptr, 1, actual_size, fp) != actual_size) {
- fprintf(stderr, "error writing output\n");
- return -1;
- }
- }
-
- if (loop_start_time >= next_progress) {
- next_progress += 1000;
- if (loop_start_time >= next_progress) {
- next_progress = loop_start_time + 1000;
- }
-
- hdhomerun_device_get_video_stats(hd, &stats_cur);
-
- if (stats_cur.overflow_error_count > stats_old.overflow_error_count) {
- fprintf(stderr, "o");
- } else if (stats_cur.network_error_count > stats_old.network_error_count) {
- fprintf(stderr, "n");
- } else if (stats_cur.transport_error_count > stats_old.transport_error_count) {
- fprintf(stderr, "t");
- } else if (stats_cur.sequence_error_count > stats_old.sequence_error_count) {
- fprintf(stderr, "s");
- } else {
- fprintf(stderr, ".");
- }
-
- stats_old = stats_cur;
- fflush(stderr);
- }
-
- int32_t delay = 64 - (int32_t)(getcurrenttime() - loop_start_time);
- if (delay <= 0) {
- continue;
- }
-
- msleep(delay);
- }
-
- if (fp) {
- fclose(fp);
- }
-
- hdhomerun_device_stream_stop(hd);
- hdhomerun_device_get_video_stats(hd, &stats_cur);
-
- fprintf(stderr, "\n");
- fprintf(stderr, "-- Video statistics --\n");
- fprintf(stderr, "%u packets received, %u overflow errors, %u network errors, %u transport errors, %u sequence errors\n",
- (unsigned int)stats_cur.packet_count,
- (unsigned int)stats_cur.overflow_error_count,
- (unsigned int)stats_cur.network_error_count,
- (unsigned int)stats_cur.transport_error_count,
- (unsigned int)stats_cur.sequence_error_count);
-
- return 0;
-}
-
-static int cmd_upgrade(const char *filename)
-{
- FILE *fp = fopen(filename, "rb");
- if (!fp) {
- fprintf(stderr, "unable to open file %s\n", filename);
- return -1;
- }
-
- printf("uploading firmware...\n");
- if (hdhomerun_device_upgrade(hd, fp) <= 0) {
- fprintf(stderr, "error sending upgrade file to hdhomerun device\n");
- fclose(fp);
- return -1;
- }
- sleep(2);
-
- printf("upgrading firmware...\n");
- sleep(8);
-
- printf("rebooting...\n");
- int count = 0;
- char *version_str;
- while (1) {
- if (hdhomerun_device_get_version(hd, &version_str, NULL) >= 0) {
- break;
- }
-
- count++;
- if (count > 30) {
- fprintf(stderr, "error finding device after firmware upgrade\n");
- fclose(fp);
- return -1;
- }
-
- sleep(1);
- }
-
- printf("upgrade complete - now running firmware %s\n", version_str);
- return 0;
-}
-
-static int cmd_execute(void)
-{
- char *ret_value;
- char *ret_error;
- if (hdhomerun_device_get_var(hd, "/sys/boot", &ret_value, &ret_error) < 0) {
- fprintf(stderr, "communication error sending request to hdhomerun device\n");
- return -1;
- }
-
- if (ret_error) {
- printf("%s\n", ret_error);
- return 0;
- }
-
- char *end = ret_value + strlen(ret_value);
- char *pos = ret_value;
-
- while (1) {
- if (pos >= end) {
- break;
- }
-
- char *eol_r = strchr(pos, '\r');
- if (!eol_r) {
- eol_r = end;
- }
-
- char *eol_n = strchr(pos, '\n');
- if (!eol_n) {
- eol_n = end;
- }
-
- char *eol = min(eol_r, eol_n);
-
- char *sep = strchr(pos, ' ');
- if (!sep || sep > eol) {
- pos = eol + 1;
- continue;
- }
-
- *sep = 0;
- *eol = 0;
-
- char *item = pos;
- char *value = sep + 1;
-
- printf("set %s \"%s\"\n", item, value);
-
- cmd_set_internal(item, value);
-
- pos = eol + 1;
- }
-
- return 1;
-}
-
-static int main_cmd(int argc, char *argv[])
-{
- if (argc < 1) {
- return help();
- }
-
- char *cmd = *argv++; argc--;
-
- if (contains(cmd, "key")) {
- if (argc < 2) {
- return help();
- }
- uint32_t lockkey = strtoul(argv[0], NULL, 0);
- hdhomerun_device_tuner_lockkey_use_value(hd, lockkey);
-
- cmd = argv[1];
- argv+=2; argc-=2;
- }
-
- if (contains(cmd, "get")) {
- if (argc < 1) {
- return help();
- }
- return cmd_get(argv[0]);
- }
-
- if (contains(cmd, "set")) {
- if (argc < 2) {
- return help();
- }
- return cmd_set(argv[0], argv[1]);
- }
-
- if (contains(cmd, "scan")) {
- if (argc < 1) {
- return help();
- }
- if (argc < 2) {
- return cmd_scan(argv[0], NULL);
- } else {
- return cmd_scan(argv[0], argv[1]);
- }
- }
-
- if (contains(cmd, "save")) {
- if (argc < 2) {
- return help();
- }
- return cmd_save(argv[0], argv[1]);
- }
-
- if (contains(cmd, "upgrade")) {
- if (argc < 1) {
- return help();
- }
- return cmd_upgrade(argv[0]);
- }
-
- if (contains(cmd, "execute")) {
- return cmd_execute();
- }
-
- return help();
-}
-
-static int main_internal(int argc, char *argv[])
-{
-#if defined(__WINDOWS__)
- /* Initialize network socket support. */
- WORD wVersionRequested = MAKEWORD(2, 0);
- WSADATA wsaData;
- WSAStartup(wVersionRequested, &wsaData);
-#endif
-
- extract_appname(argv[0]);
- argv++;
- argc--;
-
- if (argc == 0) {
- return help();
- }
-
- char *id_str = *argv++; argc--;
- if (contains(id_str, "help")) {
- return help();
- }
- if (contains(id_str, "discover")) {
- if (argc < 1) {
- return discover_print(NULL);
- } else {
- return discover_print(argv[0]);
- }
- }
-
- /* Device object. */
- hd = hdhomerun_device_create_from_str(id_str, NULL);
- if (!hd) {
- fprintf(stderr, "invalid device id: %s\n", id_str);
- return -1;
- }
-
- /* Device ID check. */
- uint32_t device_id_requested = hdhomerun_device_get_device_id_requested(hd);
- if (!hdhomerun_discover_validate_device_id(device_id_requested)) {
- fprintf(stderr, "invalid device id: %08lX\n", (unsigned long)device_id_requested);
- }
-
- /* Connect to device and check model. */
- const char *model = hdhomerun_device_get_model_str(hd);
- if (!model) {
- fprintf(stderr, "unable to connect to device\n");
- hdhomerun_device_destroy(hd);
- return -1;
- }
-
- /* Command. */
- int ret = main_cmd(argc, argv);
-
- /* Cleanup. */
- hdhomerun_device_destroy(hd);
-
- /* Complete. */
- return ret;
-}
-
-int main(int argc, char *argv[])
-{
- int ret = main_internal(argc, argv);
- if (ret <= 0) {
- return 1;
- }
- return 0;
-}
diff --git a/lib/libhdhomerun/hdhomerun_control.c b/lib/libhdhomerun/hdhomerun_control.c
deleted file mode 100644
index 8d76a23756..0000000000
--- a/lib/libhdhomerun/hdhomerun_control.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * hdhomerun_control.c
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-#define HDHOMERUN_CONTROL_SEND_TIMEOUT 5000
-#define HDHOMERUN_CONTROL_RECV_TIMEOUT 5000
-#define HDHOMERUN_CONTROL_UPGRADE_TIMEOUT 20000
-
-struct hdhomerun_control_sock_t {
- uint32_t desired_device_id;
- uint32_t desired_device_ip;
- uint32_t actual_device_id;
- uint32_t actual_device_ip;
- int sock;
- struct hdhomerun_debug_t *dbg;
- struct hdhomerun_pkt_t tx_pkt;
- struct hdhomerun_pkt_t rx_pkt;
-};
-
-static void hdhomerun_control_close_sock(struct hdhomerun_control_sock_t *cs)
-{
- if (cs->sock == -1) {
- return;
- }
-
- close(cs->sock);
- cs->sock = -1;
-}
-
-void hdhomerun_control_set_device(struct hdhomerun_control_sock_t *cs, uint32_t device_id, uint32_t device_ip)
-{
- hdhomerun_control_close_sock(cs);
-
- cs->desired_device_id = device_id;
- cs->desired_device_ip = device_ip;
- cs->actual_device_id = 0;
- cs->actual_device_ip = 0;
-}
-
-struct hdhomerun_control_sock_t *hdhomerun_control_create(uint32_t device_id, uint32_t device_ip, struct hdhomerun_debug_t *dbg)
-{
- struct hdhomerun_control_sock_t *cs = (struct hdhomerun_control_sock_t *)calloc(1, sizeof(struct hdhomerun_control_sock_t));
- if (!cs) {
- hdhomerun_debug_printf(dbg, "hdhomerun_control_create: failed to allocate control object\n");
- return NULL;
- }
-
- cs->dbg = dbg;
- cs->sock = -1;
- hdhomerun_control_set_device(cs, device_id, device_ip);
-
- return cs;
-}
-
-void hdhomerun_control_destroy(struct hdhomerun_control_sock_t *cs)
-{
- hdhomerun_control_close_sock(cs);
- free(cs);
-}
-
-static bool_t hdhomerun_control_connect_sock(struct hdhomerun_control_sock_t *cs)
-{
- if (cs->sock != -1) {
- return TRUE;
- }
-
- if ((cs->desired_device_id == 0) && (cs->desired_device_ip == 0)) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: no device specified\n");
- return FALSE;
- }
-
- /* Find device. */
- struct hdhomerun_discover_device_t result;
- if (hdhomerun_discover_find_devices_custom(cs->desired_device_ip, HDHOMERUN_DEVICE_TYPE_WILDCARD, cs->desired_device_id, &result, 1) <= 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: device not found\n");
- return FALSE;
- }
- cs->actual_device_ip = result.ip_addr;
- cs->actual_device_id = result.device_id;
-
- /* Create socket. */
- cs->sock = (int)socket(AF_INET, SOCK_STREAM, 0);
- if (cs->sock == -1) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: failed to create socket (%d)\n", sock_getlasterror);
- return FALSE;
- }
-
- /* Set timeouts. */
- setsocktimeout(cs->sock, SOL_SOCKET, SO_SNDTIMEO, HDHOMERUN_CONTROL_SEND_TIMEOUT);
- setsocktimeout(cs->sock, SOL_SOCKET, SO_RCVTIMEO, HDHOMERUN_CONTROL_RECV_TIMEOUT);
-
- /* Initiate connection. */
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
- sock_addr.sin_addr.s_addr = htonl(cs->actual_device_ip);
- sock_addr.sin_port = htons(HDHOMERUN_CONTROL_TCP_PORT);
- if (connect(cs->sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: failed to connect (%d)\n", sock_getlasterror);
- hdhomerun_control_close_sock(cs);
- return FALSE;
- }
-
- /* Success. */
- return TRUE;
-}
-
-uint32_t hdhomerun_control_get_device_id(struct hdhomerun_control_sock_t *cs)
-{
- if (!hdhomerun_control_connect_sock(cs)) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_device_id: connect failed\n");
- return 0;
- }
-
- return cs->actual_device_id;
-}
-
-uint32_t hdhomerun_control_get_device_ip(struct hdhomerun_control_sock_t *cs)
-{
- if (!hdhomerun_control_connect_sock(cs)) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_device_ip: connect failed\n");
- return 0;
- }
-
- return cs->actual_device_ip;
-}
-
-uint32_t hdhomerun_control_get_device_id_requested(struct hdhomerun_control_sock_t *cs)
-{
- return cs->desired_device_id;
-}
-
-uint32_t hdhomerun_control_get_device_ip_requested(struct hdhomerun_control_sock_t *cs)
-{
- return cs->desired_device_ip;
-}
-
-uint32_t hdhomerun_control_get_local_addr(struct hdhomerun_control_sock_t *cs)
-{
- if (!hdhomerun_control_connect_sock(cs)) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_local_addr: connect failed\n");
- return 0;
- }
-
- struct sockaddr_in sock_addr;
- socklen_t sockaddr_size = sizeof(sock_addr);
- if (getsockname(cs->sock, (struct sockaddr*)&sock_addr, &sockaddr_size) != 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_local_addr: getsockname failed (%d)\n", sock_getlasterror);
- return 0;
- }
-
- return ntohl(sock_addr.sin_addr.s_addr);
-}
-
-static int hdhomerun_control_send_sock(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt)
-{
- int length = (int)(tx_pkt->end - tx_pkt->start);
- if (send(cs->sock, (char *)tx_pkt->start, (int)length, 0) != length) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_sock: send failed (%d)\n", sock_getlasterror);
- hdhomerun_control_close_sock(cs);
- return -1;
- }
-
- return 1;
-}
-
-static int hdhomerun_control_recv_sock(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *rx_pkt, uint16_t *ptype, uint64_t recv_timeout)
-{
- uint64_t stop_time = getcurrenttime() + recv_timeout;
- hdhomerun_pkt_reset(rx_pkt);
-
- while (getcurrenttime() < stop_time) {
- struct timeval t;
- t.tv_sec = 0;
- t.tv_usec = 250000;
-
- fd_set readfds;
- FD_ZERO(&readfds);
- FD_SET(cs->sock, &readfds);
-
- if (select(cs->sock+1, &readfds, NULL, NULL, &t) < 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: select failed (%d)\n", sock_getlasterror);
- hdhomerun_control_close_sock(cs);
- return -1;
- }
-
- if (!FD_ISSET(cs->sock, &readfds)) {
- continue;
- }
-
- int rx_length = recv(cs->sock, (char *)rx_pkt->end, (int)(rx_pkt->limit - rx_pkt->end), 0);
- if (rx_length <= 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: recv failed (%d)\n", sock_getlasterror);
- hdhomerun_control_close_sock(cs);
- return -1;
- }
- rx_pkt->end += rx_length;
-
- int ret = hdhomerun_pkt_open_frame(rx_pkt, ptype);
- if (ret < 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: frame error\n");
- hdhomerun_control_close_sock(cs);
- return -1;
- }
- if (ret == 0) {
- continue;
- }
-
- return 1;
- }
-
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: timeout\n");
- hdhomerun_control_close_sock(cs);
- return -1;
-}
-
-static int hdhomerun_control_send_recv_internal(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt, struct hdhomerun_pkt_t *rx_pkt, uint16_t type, uint64_t recv_timeout)
-{
- hdhomerun_pkt_seal_frame(tx_pkt, type);
-
- int i;
- for (i = 0; i < 2; i++) {
- if (cs->sock == -1) {
- if (!hdhomerun_control_connect_sock(cs)) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_recv: connect failed\n");
- return -1;
- }
- }
-
- if (hdhomerun_control_send_sock(cs, tx_pkt) < 0) {
- continue;
- }
- if (!rx_pkt) {
- return 1;
- }
-
- uint16_t rsp_type;
- if (hdhomerun_control_recv_sock(cs, rx_pkt, &rsp_type, recv_timeout) < 0) {
- continue;
- }
- if (rsp_type != type + 1) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_recv: unexpected frame type\n");
- hdhomerun_control_close_sock(cs);
- continue;
- }
-
- return 1;
- }
-
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_recv: failed\n");
- return -1;
-}
-
-int hdhomerun_control_send_recv(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt, struct hdhomerun_pkt_t *rx_pkt, uint16_t type)
-{
- return hdhomerun_control_send_recv_internal(cs, tx_pkt, rx_pkt, type, HDHOMERUN_CONTROL_RECV_TIMEOUT);
-}
-
-static int hdhomerun_control_get_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, uint32_t lockkey, char **pvalue, char **perror)
-{
- struct hdhomerun_pkt_t *tx_pkt = &cs->tx_pkt;
- struct hdhomerun_pkt_t *rx_pkt = &cs->rx_pkt;
-
- /* Request. */
- hdhomerun_pkt_reset(tx_pkt);
-
- int name_len = (int)strlen(name) + 1;
- if (tx_pkt->end + 3 + name_len > tx_pkt->limit) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: request too long\n");
- return -1;
- }
- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_GETSET_NAME);
- hdhomerun_pkt_write_var_length(tx_pkt, name_len);
- hdhomerun_pkt_write_mem(tx_pkt, (void *)name, name_len);
-
- if (value) {
- int value_len = (int)strlen(value) + 1;
- if (tx_pkt->end + 3 + value_len > tx_pkt->limit) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: request too long\n");
- return -1;
- }
- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_GETSET_VALUE);
- hdhomerun_pkt_write_var_length(tx_pkt, value_len);
- hdhomerun_pkt_write_mem(tx_pkt, (void *)value, value_len);
- }
-
- if (lockkey != 0) {
- if (tx_pkt->end + 6 > tx_pkt->limit) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: request too long\n");
- return -1;
- }
- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_GETSET_LOCKKEY);
- hdhomerun_pkt_write_var_length(tx_pkt, 4);
- hdhomerun_pkt_write_u32(tx_pkt, lockkey);
- }
-
- /* Send/Recv. */
- if (hdhomerun_control_send_recv_internal(cs, tx_pkt, rx_pkt, HDHOMERUN_TYPE_GETSET_REQ, HDHOMERUN_CONTROL_RECV_TIMEOUT) < 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: send/recv error\n");
- return -1;
- }
-
- /* Response. */
- while (1) {
- uint8_t tag;
- size_t len;
- uint8_t *next = hdhomerun_pkt_read_tlv(rx_pkt, &tag, &len);
- if (!next) {
- break;
- }
-
- switch (tag) {
- case HDHOMERUN_TAG_GETSET_VALUE:
- if (pvalue) {
- *pvalue = (char *)rx_pkt->pos;
- rx_pkt->pos[len] = 0;
- }
- if (perror) {
- *perror = NULL;
- }
- return 1;
-
- case HDHOMERUN_TAG_ERROR_MESSAGE:
- rx_pkt->pos[len] = 0;
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: %s\n", rx_pkt->pos);
-
- if (pvalue) {
- *pvalue = NULL;
- }
- if (perror) {
- *perror = (char *)rx_pkt->pos;
- }
-
- return 0;
- }
-
- rx_pkt->pos = next;
- }
-
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: missing response tags\n");
- return -1;
-}
-
-int hdhomerun_control_get(struct hdhomerun_control_sock_t *cs, const char *name, char **pvalue, char **perror)
-{
- return hdhomerun_control_get_set(cs, name, NULL, 0, pvalue, perror);
-}
-
-int hdhomerun_control_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, char **pvalue, char **perror)
-{
- return hdhomerun_control_get_set(cs, name, value, 0, pvalue, perror);
-}
-
-int hdhomerun_control_set_with_lockkey(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, uint32_t lockkey, char **pvalue, char **perror)
-{
- return hdhomerun_control_get_set(cs, name, value, lockkey, pvalue, perror);
-}
-
-int hdhomerun_control_upgrade(struct hdhomerun_control_sock_t *cs, FILE *upgrade_file)
-{
- struct hdhomerun_pkt_t *tx_pkt = &cs->tx_pkt;
- struct hdhomerun_pkt_t *rx_pkt = &cs->rx_pkt;
- uint32_t sequence = 0;
-
- /* Upload. */
- while (1) {
- uint8_t data[256];
- size_t length = fread(data, 1, 256, upgrade_file);
- if (length == 0) {
- break;
- }
-
- hdhomerun_pkt_reset(tx_pkt);
- hdhomerun_pkt_write_u32(tx_pkt, sequence);
- hdhomerun_pkt_write_mem(tx_pkt, data, length);
-
- if (hdhomerun_control_send_recv_internal(cs, tx_pkt, NULL, HDHOMERUN_TYPE_UPGRADE_REQ, 0) < 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: send/recv failed\n");
- return -1;
- }
-
- sequence += (uint32_t)length;
- }
-
- if (sequence == 0) {
- /* No data in file. Error, but no need to close connection. */
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: zero length file\n");
- return 0;
- }
-
- /* Execute upgrade. */
- hdhomerun_pkt_reset(tx_pkt);
- hdhomerun_pkt_write_u32(tx_pkt, 0xFFFFFFFF);
-
- if (hdhomerun_control_send_recv_internal(cs, tx_pkt, rx_pkt, HDHOMERUN_TYPE_UPGRADE_REQ, HDHOMERUN_CONTROL_UPGRADE_TIMEOUT) < 0) {
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: send/recv failed\n");
- return -1;
- }
-
- /* Check response. */
- while (1) {
- uint8_t tag;
- size_t len;
- uint8_t *next = hdhomerun_pkt_read_tlv(rx_pkt, &tag, &len);
- if (!next) {
- break;
- }
-
- switch (tag) {
- case HDHOMERUN_TAG_ERROR_MESSAGE:
- rx_pkt->pos[len] = 0;
- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: %s\n", (char *)rx_pkt->pos);
- return 0;
-
- default:
- break;
- }
-
- rx_pkt->pos = next;
- }
-
- return 1;
-}
diff --git a/lib/libhdhomerun/hdhomerun_control.h b/lib/libhdhomerun/hdhomerun_control.h
deleted file mode 100644
index 170ed1d428..0000000000
--- a/lib/libhdhomerun/hdhomerun_control.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * hdhomerun_control.h
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hdhomerun_control_sock_t;
-
-/*
- * Create a control socket.
- *
- * This function will not attempt to connect to the device.
- * The connection will be established when first used.
- *
- * uint32_t device_id = 32-bit device id of device. Set to HDHOMERUN_DEVICE_ID_WILDCARD to match any device ID.
- * uint32_t device_ip = IP address of device. Set to 0 to auto-detect.
- * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL.
- *
- * Returns a pointer to the newly created control socket.
- *
- * When no longer needed, the socket should be destroyed by calling hdhomerun_control_destroy.
- */
-extern LIBTYPE struct hdhomerun_control_sock_t *hdhomerun_control_create(uint32_t device_id, uint32_t device_ip, struct hdhomerun_debug_t *dbg);
-extern LIBTYPE void hdhomerun_control_destroy(struct hdhomerun_control_sock_t *cs);
-
-/*
- * Get the actual device id or ip of the device.
- *
- * Returns 0 if the device id cannot be determined.
- */
-extern LIBTYPE uint32_t hdhomerun_control_get_device_id(struct hdhomerun_control_sock_t *cs);
-extern LIBTYPE uint32_t hdhomerun_control_get_device_ip(struct hdhomerun_control_sock_t *cs);
-extern LIBTYPE uint32_t hdhomerun_control_get_device_id_requested(struct hdhomerun_control_sock_t *cs);
-extern LIBTYPE uint32_t hdhomerun_control_get_device_ip_requested(struct hdhomerun_control_sock_t *cs);
-
-extern LIBTYPE void hdhomerun_control_set_device(struct hdhomerun_control_sock_t *cs, uint32_t device_id, uint32_t device_ip);
-
-/*
- * Get the local machine IP address used when communicating with the device.
- *
- * This function is useful for determining the IP address to use with set target commands.
- *
- * Returns 32-bit IP address with native endianness, or 0 on error.
- */
-extern LIBTYPE uint32_t hdhomerun_control_get_local_addr(struct hdhomerun_control_sock_t *cs);
-
-/*
- * Low-level communication.
- */
-extern LIBTYPE int hdhomerun_control_send_recv(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt, struct hdhomerun_pkt_t *rx_pkt, uint16_t type);
-
-/*
- * Get/set a control variable on the device.
- *
- * const char *name: The name of var to get/set (c-string). The supported vars is device/firmware dependant.
- * const char *value: The value to set (c-string). The format is device/firmware dependant.
-
- * char **pvalue: If provided, the caller-supplied char pointer will be populated with a pointer to the value
- * string returned by the device, or NULL if the device returned an error string. The string will remain
- * valid until the next call to a control sock function.
- * char **perror: If provided, the caller-supplied char pointer will be populated with a pointer to the error
- * string returned by the device, or NULL if the device returned an value string. The string will remain
- * valid until the next call to a control sock function.
- *
- * Returns 1 if the operation was successful (pvalue set, perror NULL).
- * Returns 0 if the operation was rejected (pvalue NULL, perror set).
- * Returns -1 if a communication error occurs.
- */
-extern LIBTYPE int hdhomerun_control_get(struct hdhomerun_control_sock_t *cs, const char *name, char **pvalue, char **perror);
-extern LIBTYPE int hdhomerun_control_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, char **pvalue, char **perror);
-extern LIBTYPE int hdhomerun_control_set_with_lockkey(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, uint32_t lockkey, char **pvalue, char **perror);
-
-/*
- * Upload new firmware to the device.
- *
- * FILE *upgrade_file: File pointer to read from. The file must have been opened in binary mode for reading.
- *
- * Returns 1 if the upload succeeded.
- * Returns 0 if the upload was rejected.
- * Returns -1 if an error occurs.
- */
-extern LIBTYPE int hdhomerun_control_upgrade(struct hdhomerun_control_sock_t *cs, FILE *upgrade_file);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_debug.c b/lib/libhdhomerun/hdhomerun_debug.c
deleted file mode 100644
index 7861e4e4ad..0000000000
--- a/lib/libhdhomerun/hdhomerun_debug.c
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * hdhomerun_debug.c
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-/*
- * The debug logging includes optional support for connecting to the
- * Silicondust support server. This option should not be used without
- * being explicitly enabled by the user. Debug information should be
- * limited to information useful to diagnosing a problem.
- * - Silicondust.
- */
-
-#include "hdhomerun.h"
-
-#if !defined(HDHOMERUN_DEBUG_HOST)
-#define HDHOMERUN_DEBUG_HOST "debug.silicondust.com"
-#endif
-#if !defined(HDHOMERUN_DEBUG_PORT)
-#define HDHOMERUN_DEBUG_PORT "8002"
-#endif
-
-struct hdhomerun_debug_message_t
-{
- struct hdhomerun_debug_message_t *next;
- struct hdhomerun_debug_message_t *prev;
- char buffer[2048];
-};
-
-struct hdhomerun_debug_t
-{
- pthread_t thread;
- volatile bool_t enabled;
- volatile bool_t terminate;
- char *prefix;
-
- pthread_mutex_t print_lock;
- pthread_mutex_t queue_lock;
- pthread_mutex_t send_lock;
-
- struct hdhomerun_debug_message_t *queue_head;
- struct hdhomerun_debug_message_t *queue_tail;
- uint32_t queue_depth;
-
- uint64_t connect_delay;
-
- char *file_name;
- FILE *file_fp;
- int sock;
-};
-
-static THREAD_FUNC_PREFIX hdhomerun_debug_thread_execute(void *arg);
-
-struct hdhomerun_debug_t *hdhomerun_debug_create(void)
-{
- struct hdhomerun_debug_t *dbg = (struct hdhomerun_debug_t *)calloc(1, sizeof(struct hdhomerun_debug_t));
- if (!dbg) {
- return NULL;
- }
-
- dbg->sock = -1;
-
- pthread_mutex_init(&dbg->print_lock, NULL);
- pthread_mutex_init(&dbg->queue_lock, NULL);
- pthread_mutex_init(&dbg->send_lock, NULL);
-
- if (pthread_create(&dbg->thread, NULL, &hdhomerun_debug_thread_execute, dbg) != 0) {
- free(dbg);
- return NULL;
- }
-
- return dbg;
-}
-
-/* Send lock held by caller */
-static void hdhomerun_debug_close_file(struct hdhomerun_debug_t *dbg)
-{
- if (!dbg->file_fp) {
- return;
- }
-
- fclose(dbg->file_fp);
- dbg->file_fp = NULL;
-}
-
-/* Send lock held by caller */
-static void hdhomerun_debug_close_sock(struct hdhomerun_debug_t *dbg)
-{
- if (dbg->sock == -1) {
- return;
- }
-
- close(dbg->sock);
- dbg->sock = -1;
-}
-
-void hdhomerun_debug_destroy(struct hdhomerun_debug_t *dbg)
-{
- dbg->terminate = TRUE;
- pthread_join(dbg->thread, NULL);
-
- hdhomerun_debug_close_file(dbg);
- hdhomerun_debug_close_sock(dbg);
-
- if (dbg->prefix) {
- free(dbg->prefix);
- }
-
- free(dbg);
-}
-
-void hdhomerun_debug_set_prefix(struct hdhomerun_debug_t *dbg, const char *prefix)
-{
- pthread_mutex_lock(&dbg->print_lock);
-
- if (dbg->prefix) {
- free(dbg->prefix);
- dbg->prefix = NULL;
- }
-
- if (prefix) {
- dbg->prefix = strdup(prefix);
- }
-
- pthread_mutex_unlock(&dbg->print_lock);
-}
-
-void hdhomerun_debug_set_filename(struct hdhomerun_debug_t *dbg, const char *filename)
-{
- pthread_mutex_lock(&dbg->send_lock);
-
- if (!filename && !dbg->file_name) {
- pthread_mutex_unlock(&dbg->send_lock);
- return;
- }
- if (filename && dbg->file_name) {
- if (strcmp(filename, dbg->file_name) == 0) {
- pthread_mutex_unlock(&dbg->send_lock);
- return;
- }
- }
-
- hdhomerun_debug_close_file(dbg);
- hdhomerun_debug_close_sock(dbg);
-
- if (dbg->file_name) {
- free(dbg->file_name);
- dbg->file_name = NULL;
- }
- if (filename) {
- dbg->file_name = strdup(filename);
- }
-
- pthread_mutex_unlock(&dbg->send_lock);
-}
-
-void hdhomerun_debug_enable(struct hdhomerun_debug_t *dbg)
-{
- pthread_mutex_lock(&dbg->send_lock);
-
- dbg->enabled = TRUE;
-
- pthread_mutex_unlock(&dbg->send_lock);
-}
-
-void hdhomerun_debug_disable(struct hdhomerun_debug_t *dbg)
-{
- pthread_mutex_lock(&dbg->send_lock);
-
- dbg->enabled = FALSE;
- hdhomerun_debug_close_file(dbg);
- hdhomerun_debug_close_sock(dbg);
-
- pthread_mutex_unlock(&dbg->send_lock);
-}
-
-bool_t hdhomerun_debug_enabled(struct hdhomerun_debug_t *dbg)
-{
- if (!dbg) {
- return FALSE;
- }
-
- return dbg->enabled;
-}
-
-void hdhomerun_debug_flush(struct hdhomerun_debug_t *dbg, uint64_t timeout)
-{
- timeout = getcurrenttime() + timeout;
-
- while (getcurrenttime() < timeout) {
- pthread_mutex_lock(&dbg->queue_lock);
- struct hdhomerun_debug_message_t *message = dbg->queue_tail;
- pthread_mutex_unlock(&dbg->queue_lock);
-
- if (!message) {
- return;
- }
-
- msleep(10);
- }
-}
-
-void hdhomerun_debug_printf(struct hdhomerun_debug_t *dbg, const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- hdhomerun_debug_vprintf(dbg, fmt, args);
- va_end(args);
-}
-
-void hdhomerun_debug_vprintf(struct hdhomerun_debug_t *dbg, const char *fmt, va_list args)
-{
- if (!dbg) {
- return;
- }
- if (!dbg->enabled) {
- return;
- }
-
- struct hdhomerun_debug_message_t *message = (struct hdhomerun_debug_message_t *)malloc(sizeof(struct hdhomerun_debug_message_t));
- if (!message) {
- return;
- }
-
- char *ptr = message->buffer;
- char *end = message->buffer + sizeof(message->buffer) - 2;
- *end = 0;
-
- /*
- * Timestamp.
- */
- time_t current_time = time(NULL);
- ptr += strftime(ptr, end - ptr, "%Y%m%d-%H:%M:%S ", localtime(&current_time));
- if (ptr > end) {
- ptr = end;
- }
-
- /*
- * Debug prefix.
- */
- pthread_mutex_lock(&dbg->print_lock);
-
- if (dbg->prefix) {
- int len = snprintf(ptr, end - ptr, "%s ", dbg->prefix);
- len = (len <= 0) ? 0 : len;
- ptr += len;
- if (ptr > end) {
- ptr = end;
- }
- }
-
- pthread_mutex_unlock(&dbg->print_lock);
-
- /*
- * Message text.
- */
- int len = vsnprintf(ptr, end - ptr, fmt, args);
- len = (len < 0) ? 0 : len; /* len does not include null */
- ptr += len;
- if (ptr > end) {
- ptr = end;
- }
-
- /*
- * Force newline.
- */
- if ((ptr[-1] != '\n') && (ptr + 1 <= end)) {
- *ptr++ = '\n';
- }
-
- /*
- * Force NULL.
- */
- if (ptr + 1 > end) {
- ptr = end - 1;
- }
- *ptr++ = 0;
-
- /*
- * Enqueue.
- */
- pthread_mutex_lock(&dbg->queue_lock);
-
- message->prev = NULL;
- message->next = dbg->queue_head;
- dbg->queue_head = message;
- if (message->next) {
- message->next->prev = message;
- } else {
- dbg->queue_tail = message;
- }
- dbg->queue_depth++;
-
- pthread_mutex_unlock(&dbg->queue_lock);
-}
-
-/* Send lock held by caller */
-static bool_t hdhomerun_debug_output_message_file(struct hdhomerun_debug_t *dbg, struct hdhomerun_debug_message_t *message)
-{
- if (!dbg->file_fp) {
- uint64_t current_time = getcurrenttime();
- if (current_time < dbg->connect_delay) {
- return FALSE;
- }
- dbg->connect_delay = current_time + 30*1000;
-
- dbg->file_fp = fopen(dbg->file_name, "a");
- if (!dbg->file_fp) {
- return FALSE;
- }
- }
-
- fprintf(dbg->file_fp, "%s", message->buffer);
- fflush(dbg->file_fp);
-
- return TRUE;
-}
-
-/* Send lock held by caller */
-#if defined(__CYGWIN__)
-static bool_t hdhomerun_debug_output_message_sock(struct hdhomerun_debug_t *dbg, struct hdhomerun_debug_message_t *message)
-{
- return TRUE;
-}
-#else
-static bool_t hdhomerun_debug_output_message_sock(struct hdhomerun_debug_t *dbg, struct hdhomerun_debug_message_t *message)
-{
- if (dbg->sock == -1) {
- uint64_t current_time = getcurrenttime();
- if (current_time < dbg->connect_delay) {
- return FALSE;
- }
- dbg->connect_delay = current_time + 30*1000;
-
- dbg->sock = (int)socket(AF_INET, SOCK_STREAM, 0);
- if (dbg->sock == -1) {
- return FALSE;
- }
-
- struct addrinfo hints;
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_INET;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
-
- struct addrinfo *sock_info;
- if (getaddrinfo(HDHOMERUN_DEBUG_HOST, HDHOMERUN_DEBUG_PORT, &hints, &sock_info) != 0) {
- hdhomerun_debug_close_sock(dbg);
- return FALSE;
- }
- if (connect(dbg->sock, sock_info->ai_addr, (int)sock_info->ai_addrlen) != 0) {
- freeaddrinfo(sock_info);
- hdhomerun_debug_close_sock(dbg);
- return FALSE;
- }
- freeaddrinfo(sock_info);
- }
-
- size_t length = strlen(message->buffer);
- if (send(dbg->sock, (char *)message->buffer, (int)length, 0) != length) {
- hdhomerun_debug_close_sock(dbg);
- return FALSE;
- }
-
- return TRUE;
-}
-#endif
-
-static bool_t hdhomerun_debug_output_message(struct hdhomerun_debug_t *dbg, struct hdhomerun_debug_message_t *message)
-{
- pthread_mutex_lock(&dbg->send_lock);
-
- if (!dbg->enabled) {
- pthread_mutex_unlock(&dbg->send_lock);
- return TRUE;
- }
-
- bool_t ret;
- if (dbg->file_name) {
- ret = hdhomerun_debug_output_message_file(dbg, message);
- } else {
- ret = hdhomerun_debug_output_message_sock(dbg, message);
- }
-
- pthread_mutex_unlock(&dbg->send_lock);
- return ret;
-}
-
-static void hdhomerun_debug_pop_and_free_message(struct hdhomerun_debug_t *dbg)
-{
- pthread_mutex_lock(&dbg->queue_lock);
-
- struct hdhomerun_debug_message_t *message = dbg->queue_tail;
- dbg->queue_tail = message->prev;
- if (message->prev) {
- message->prev->next = NULL;
- } else {
- dbg->queue_head = NULL;
- }
- dbg->queue_depth--;
-
- pthread_mutex_unlock(&dbg->queue_lock);
-
- free(message);
-}
-
-static THREAD_FUNC_PREFIX hdhomerun_debug_thread_execute(void *arg)
-{
- struct hdhomerun_debug_t *dbg = (struct hdhomerun_debug_t *)arg;
-
- while (!dbg->terminate) {
-
- pthread_mutex_lock(&dbg->queue_lock);
- struct hdhomerun_debug_message_t *message = dbg->queue_tail;
- uint32_t queue_depth = dbg->queue_depth;
- pthread_mutex_unlock(&dbg->queue_lock);
-
- if (!message) {
- msleep(250);
- continue;
- }
-
- if (queue_depth > 256) {
- hdhomerun_debug_pop_and_free_message(dbg);
- continue;
- }
-
- if (!hdhomerun_debug_output_message(dbg, message)) {
- msleep(250);
- continue;
- }
-
- hdhomerun_debug_pop_and_free_message(dbg);
- }
-
- return 0;
-}
diff --git a/lib/libhdhomerun/hdhomerun_debug.h b/lib/libhdhomerun/hdhomerun_debug.h
deleted file mode 100644
index a8f996b63c..0000000000
--- a/lib/libhdhomerun/hdhomerun_debug.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * hdhomerun_debug.h
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-/*
- * The debug logging includes optional support for connecting to the
- * Silicondust support server. This option should not be used without
- * being explicitly enabled by the user. Debug information should be
- * limited to information useful to diagnosing a problem.
- * - Silicondust.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hdhomerun_debug_t;
-
-extern LIBTYPE struct hdhomerun_debug_t *hdhomerun_debug_create(void);
-extern LIBTYPE void hdhomerun_debug_destroy(struct hdhomerun_debug_t *dbg);
-
-extern LIBTYPE void hdhomerun_debug_set_prefix(struct hdhomerun_debug_t *dbg, const char *prefix);
-extern LIBTYPE void hdhomerun_debug_set_filename(struct hdhomerun_debug_t *dbg, const char *filename);
-extern LIBTYPE void hdhomerun_debug_enable(struct hdhomerun_debug_t *dbg);
-extern LIBTYPE void hdhomerun_debug_disable(struct hdhomerun_debug_t *dbg);
-extern LIBTYPE bool_t hdhomerun_debug_enabled(struct hdhomerun_debug_t *dbg);
-
-extern LIBTYPE void hdhomerun_debug_flush(struct hdhomerun_debug_t *dbg, uint64_t timeout);
-
-extern LIBTYPE void hdhomerun_debug_printf(struct hdhomerun_debug_t *dbg, const char *fmt, ...);
-extern LIBTYPE void hdhomerun_debug_vprintf(struct hdhomerun_debug_t *dbg, const char *fmt, va_list args);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_device.c b/lib/libhdhomerun/hdhomerun_device.c
deleted file mode 100644
index 2f253b40ed..0000000000
--- a/lib/libhdhomerun/hdhomerun_device.c
+++ /dev/null
@@ -1,927 +0,0 @@
-/*
- * hdhomerun_device.c
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-struct hdhomerun_device_t {
- struct hdhomerun_control_sock_t *cs;
- struct hdhomerun_video_sock_t *vs;
- struct hdhomerun_debug_t *dbg;
- struct hdhomerun_channelscan_t *scan;
- unsigned int tuner;
- uint32_t lockkey;
- char name[32];
- char model[32];
-};
-
-static void hdhomerun_device_set_update(struct hdhomerun_device_t *hd)
-{
- /* Clear cached information. */
- *hd->model = 0;
-
- /* New name. */
- sprintf(hd->name, "%08lX-%u", (unsigned long)hdhomerun_control_get_device_id(hd->cs), hd->tuner);
-}
-
-void hdhomerun_device_set_device(struct hdhomerun_device_t *hd, uint32_t device_id, uint32_t device_ip)
-{
- hdhomerun_control_set_device(hd->cs, device_id, device_ip);
- hdhomerun_device_set_update(hd);
-}
-
-void hdhomerun_device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner)
-{
- hd->tuner = tuner;
- hdhomerun_device_set_update(hd);
-}
-
-struct hdhomerun_device_t *hdhomerun_device_create(uint32_t device_id, uint32_t device_ip, unsigned int tuner, struct hdhomerun_debug_t *dbg)
-{
- struct hdhomerun_device_t *hd = (struct hdhomerun_device_t *)calloc(1, sizeof(struct hdhomerun_device_t));
- if (!hd) {
- hdhomerun_debug_printf(dbg, "hdhomerun_device_create: failed to allocate device object\n");
- return NULL;
- }
-
- hd->dbg = dbg;
-
- hd->cs = hdhomerun_control_create(0, 0, hd->dbg);
- if (!hd->cs) {
- hdhomerun_debug_printf(hd->dbg, "hdhomerun_device_create: failed to create control object\n");
- free(hd);
- return NULL;
- }
-
- hdhomerun_device_set_device(hd, device_id, device_ip);
- hdhomerun_device_set_tuner(hd, tuner);
-
- return hd;
-}
-
-void hdhomerun_device_destroy(struct hdhomerun_device_t *hd)
-{
- if (hd->scan) {
- channelscan_destroy(hd->scan);
- }
-
- if (hd->vs) {
- hdhomerun_video_destroy(hd->vs);
- }
-
- hdhomerun_control_destroy(hd->cs);
-
- free(hd);
-}
-
-static bool_t is_hex_char(char c)
-{
- if ((c >= '0') && (c <= '9')) {
- return TRUE;
- }
- if ((c >= 'A') && (c <= 'F')) {
- return TRUE;
- }
- if ((c >= 'a') && (c <= 'f')) {
- return TRUE;
- }
- return FALSE;
-}
-
-static struct hdhomerun_device_t *hdhomerun_device_create_from_str_device_id(const char *device_str, struct hdhomerun_debug_t *dbg)
-{
- int i;
- const char *ptr = device_str;
- for (i = 0; i < 8; i++) {
- if (!is_hex_char(*ptr++)) {
- return NULL;
- }
- }
-
- if (*ptr == 0) {
- unsigned long device_id;
- if (sscanf(device_str, "%lx", &device_id) != 1) {
- return NULL;
- }
- return hdhomerun_device_create((uint32_t)device_id, 0, 0, dbg);
- }
-
- if (*ptr == '-') {
- unsigned long device_id;
- unsigned int tuner;
- if (sscanf(device_str, "%lx-%u", &device_id, &tuner) != 2) {
- return NULL;
- }
- return hdhomerun_device_create((uint32_t)device_id, 0, tuner, dbg);
- }
-
- return NULL;
-}
-
-static struct hdhomerun_device_t *hdhomerun_device_create_from_str_ip(const char *device_str, struct hdhomerun_debug_t *dbg)
-{
- unsigned long a[4];
- if (sscanf(device_str, "%lu.%lu.%lu.%lu", &a[0], &a[1], &a[2], &a[3]) != 4) {
- return NULL;
- }
-
- unsigned long device_ip = (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | (a[3] << 0);
- return hdhomerun_device_create(HDHOMERUN_DEVICE_ID_WILDCARD, (uint32_t)device_ip, 0, dbg);
-}
-
-static struct hdhomerun_device_t *hdhomerun_device_create_from_str_dns(const char *device_str, struct hdhomerun_debug_t *dbg)
-{
-#if defined(__CYGWIN__)
- return NULL;
-#else
- struct addrinfo hints;
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_INET;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
-
- struct addrinfo *sock_info;
- if (getaddrinfo(device_str, "65001", &hints, &sock_info) != 0) {
- return NULL;
- }
-
- struct sockaddr_in *sock_addr = (struct sockaddr_in *)sock_info->ai_addr;
- uint32_t device_ip = ntohl(sock_addr->sin_addr.s_addr);
- freeaddrinfo(sock_info);
-
- if (device_ip == 0) {
- return NULL;
- }
-
- return hdhomerun_device_create(HDHOMERUN_DEVICE_ID_WILDCARD, (uint32_t)device_ip, 0, dbg);
-#endif
-}
-
-struct hdhomerun_device_t *hdhomerun_device_create_from_str(const char *device_str, struct hdhomerun_debug_t *dbg)
-{
- struct hdhomerun_device_t *device = hdhomerun_device_create_from_str_device_id(device_str, dbg);
- if (device) {
- return device;
- }
-
- device = hdhomerun_device_create_from_str_ip(device_str, dbg);
- if (device) {
- return device;
- }
-
- device = hdhomerun_device_create_from_str_dns(device_str, dbg);
- if (device) {
- return device;
- }
-
- return NULL;
-}
-
-int hdhomerun_device_set_tuner_from_str(struct hdhomerun_device_t *hd, const char *tuner_str)
-{
- unsigned int tuner;
- if (sscanf(tuner_str, "%u", &tuner) == 1) {
- hdhomerun_device_set_tuner(hd, tuner);
- return 1;
- }
- if (sscanf(tuner_str, "/tuner%u", &tuner) == 1) {
- hdhomerun_device_set_tuner(hd, tuner);
- return 1;
- }
-
- return -1;
-}
-
-uint32_t hdhomerun_device_get_device_id(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_control_get_device_id(hd->cs);
-}
-
-uint32_t hdhomerun_device_get_device_ip(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_control_get_device_ip(hd->cs);
-}
-
-uint32_t hdhomerun_device_get_device_id_requested(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_control_get_device_id_requested(hd->cs);
-}
-
-uint32_t hdhomerun_device_get_device_ip_requested(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_control_get_device_ip_requested(hd->cs);
-}
-
-unsigned int hdhomerun_device_get_tuner(struct hdhomerun_device_t *hd)
-{
- return hd->tuner;
-}
-
-struct hdhomerun_control_sock_t *hdhomerun_device_get_control_sock(struct hdhomerun_device_t *hd)
-{
- return hd->cs;
-}
-
-struct hdhomerun_video_sock_t *hdhomerun_device_get_video_sock(struct hdhomerun_device_t *hd)
-{
- if (hd->vs) {
- return hd->vs;
- }
-
- hd->vs = hdhomerun_video_create(0, VIDEO_DATA_BUFFER_SIZE_1S * 2, hd->dbg);
- if (!hd->vs) {
- hdhomerun_debug_printf(hd->dbg, "hdhomerun_device_get_video_sock: failed to create video object\n");
- return NULL;
- }
-
- return hd->vs;
-}
-
-uint32_t hdhomerun_device_get_local_machine_addr(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_control_get_local_addr(hd->cs);
-}
-
-static uint32_t hdhomerun_device_get_status_parse(const char *status_str, const char *tag)
-{
- const char *ptr = strstr(status_str, tag);
- if (!ptr) {
- return 0;
- }
-
- unsigned long value = 0;
- sscanf(ptr + strlen(tag), "%lu", &value);
-
- return (uint32_t)value;
-}
-
-static bool_t hdhomerun_device_get_tuner_status_lock_is_bcast(struct hdhomerun_tuner_status_t *status)
-{
- if (strcmp(status->lock_str, "8vsb") == 0) {
- return TRUE;
- }
- if (strncmp(status->lock_str, "t8", 2) == 0) {
- return TRUE;
- }
- if (strncmp(status->lock_str, "t7", 2) == 0) {
- return TRUE;
- }
- if (strncmp(status->lock_str, "t6", 2) == 0) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-uint32_t hdhomerun_device_get_tuner_status_ss_color(struct hdhomerun_tuner_status_t *status)
-{
- unsigned int ss_yellow_min;
- unsigned int ss_green_min;
-
- if (!status->lock_supported) {
- return HDHOMERUN_STATUS_COLOR_NEUTRAL;
- }
-
- if (hdhomerun_device_get_tuner_status_lock_is_bcast(status)) {
- ss_yellow_min = 50; /* -30dBmV */
- ss_green_min = 75; /* -15dBmV */
- } else {
- ss_yellow_min = 80; /* -12dBmV */
- ss_green_min = 90; /* -6dBmV */
- }
-
- if (status->signal_strength >= ss_green_min) {
- return HDHOMERUN_STATUS_COLOR_GREEN;
- }
- if (status->signal_strength >= ss_yellow_min) {
- return HDHOMERUN_STATUS_COLOR_YELLOW;
- }
-
- return HDHOMERUN_STATUS_COLOR_RED;
-}
-
-uint32_t hdhomerun_device_get_tuner_status_snq_color(struct hdhomerun_tuner_status_t *status)
-{
- if (status->signal_to_noise_quality >= 70) {
- return HDHOMERUN_STATUS_COLOR_GREEN;
- }
- if (status->signal_to_noise_quality >= 50) {
- return HDHOMERUN_STATUS_COLOR_YELLOW;
- }
-
- return HDHOMERUN_STATUS_COLOR_RED;
-}
-
-uint32_t hdhomerun_device_get_tuner_status_seq_color(struct hdhomerun_tuner_status_t *status)
-{
- if (status->symbol_error_quality >= 100) {
- return HDHOMERUN_STATUS_COLOR_GREEN;
- }
-
- return HDHOMERUN_STATUS_COLOR_RED;
-}
-
-int hdhomerun_device_get_tuner_status(struct hdhomerun_device_t *hd, char **pstatus_str, struct hdhomerun_tuner_status_t *status)
-{
- memset(status, 0, sizeof(struct hdhomerun_tuner_status_t));
-
- char name[32];
- sprintf(name, "/tuner%u/status", hd->tuner);
-
- char *status_str;
- int ret = hdhomerun_control_get(hd->cs, name, &status_str, NULL);
- if (ret <= 0) {
- return ret;
- }
-
- if (pstatus_str) {
- *pstatus_str = status_str;
- }
-
- char *channel = strstr(status_str, "ch=");
- if (channel) {
- sscanf(channel + 3, "%31s", status->channel);
- }
-
- char *lock = strstr(status_str, "lock=");
- if (lock) {
- sscanf(lock + 5, "%31s", status->lock_str);
- }
-
- status->signal_strength = (unsigned int)hdhomerun_device_get_status_parse(status_str, "ss=");
- status->signal_to_noise_quality = (unsigned int)hdhomerun_device_get_status_parse(status_str, "snq=");
- status->symbol_error_quality = (unsigned int)hdhomerun_device_get_status_parse(status_str, "seq=");
- status->raw_bits_per_second = hdhomerun_device_get_status_parse(status_str, "bps=");
- status->packets_per_second = hdhomerun_device_get_status_parse(status_str, "pps=");
-
- status->signal_present = status->signal_strength >= 45;
-
- if (strcmp(status->lock_str, "none") != 0) {
- if (status->lock_str[0] == '(') {
- status->lock_unsupported = TRUE;
- } else {
- status->lock_supported = TRUE;
- }
- }
-
- return 1;
-}
-
-int hdhomerun_device_get_tuner_streaminfo(struct hdhomerun_device_t *hd, char **pstreaminfo)
-{
- char name[32];
- sprintf(name, "/tuner%u/streaminfo", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, pstreaminfo, NULL);
-}
-
-int hdhomerun_device_get_tuner_channel(struct hdhomerun_device_t *hd, char **pchannel)
-{
- char name[32];
- sprintf(name, "/tuner%u/channel", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, pchannel, NULL);
-}
-
-int hdhomerun_device_get_tuner_channelmap(struct hdhomerun_device_t *hd, char **pchannelmap)
-{
- char name[32];
- sprintf(name, "/tuner%u/channelmap", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, pchannelmap, NULL);
-}
-
-int hdhomerun_device_get_tuner_filter(struct hdhomerun_device_t *hd, char **pfilter)
-{
- char name[32];
- sprintf(name, "/tuner%u/filter", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, pfilter, NULL);
-}
-
-int hdhomerun_device_get_tuner_program(struct hdhomerun_device_t *hd, char **pprogram)
-{
- char name[32];
- sprintf(name, "/tuner%u/program", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, pprogram, NULL);
-}
-
-int hdhomerun_device_get_tuner_target(struct hdhomerun_device_t *hd, char **ptarget)
-{
- char name[32];
- sprintf(name, "/tuner%u/target", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, ptarget, NULL);
-}
-
-int hdhomerun_device_get_tuner_plotsample(struct hdhomerun_device_t *hd, struct hdhomerun_plotsample_t **psamples, size_t *pcount)
-{
- char name[32];
- sprintf(name, "/tuner%u/plotsample", hd->tuner);
-
- char *result;
- int ret = hdhomerun_control_get(hd->cs, name, &result, NULL);
- if (ret <= 0) {
- return ret;
- }
-
- struct hdhomerun_plotsample_t *samples = (struct hdhomerun_plotsample_t *)result;
- *psamples = samples;
- size_t count = 0;
-
- while (1) {
- char *ptr = strchr(result, ' ');
- if (!ptr) {
- break;
- }
- *ptr++ = 0;
-
- unsigned long raw;
- if (sscanf(result, "%lx", &raw) != 1) {
- break;
- }
-
- uint16_t real = (raw >> 12) & 0x0FFF;
- if (real & 0x0800) {
- real |= 0xF000;
- }
-
- uint16_t imag = (raw >> 0) & 0x0FFF;
- if (imag & 0x0800) {
- imag |= 0xF000;
- }
-
- samples->real = (int16_t)real;
- samples->imag = (int16_t)imag;
- samples++;
- count++;
-
- result = ptr;
- }
-
- *pcount = count;
- return 1;
-}
-
-int hdhomerun_device_get_tuner_lockkey_owner(struct hdhomerun_device_t *hd, char **powner)
-{
- char name[32];
- sprintf(name, "/tuner%u/lockkey", hd->tuner);
- return hdhomerun_control_get(hd->cs, name, powner, NULL);
-}
-
-int hdhomerun_device_get_ir_target(struct hdhomerun_device_t *hd, char **ptarget)
-{
- return hdhomerun_control_get(hd->cs, "/ir/target", ptarget, NULL);
-}
-
-int hdhomerun_device_get_lineup_location(struct hdhomerun_device_t *hd, char **plocation)
-{
- return hdhomerun_control_get(hd->cs, "/lineup/location", plocation, NULL);
-}
-
-int hdhomerun_device_get_version(struct hdhomerun_device_t *hd, char **pversion_str, uint32_t *pversion_num)
-{
- char *version_str;
- int ret = hdhomerun_control_get(hd->cs, "/sys/version", &version_str, NULL);
- if (ret <= 0) {
- return ret;
- }
-
- if (pversion_str) {
- *pversion_str = version_str;
- }
-
- if (pversion_num) {
- unsigned long version_num;
- if (sscanf(version_str, "%lu", &version_num) != 1) {
- *pversion_num = 0;
- } else {
- *pversion_num = (uint32_t)version_num;
- }
- }
-
- return 1;
-}
-
-int hdhomerun_device_set_tuner_channel(struct hdhomerun_device_t *hd, const char *channel)
-{
- char name[32];
- sprintf(name, "/tuner%u/channel", hd->tuner);
- return hdhomerun_control_set_with_lockkey(hd->cs, name, channel, hd->lockkey, NULL, NULL);
-}
-
-int hdhomerun_device_set_tuner_channelmap(struct hdhomerun_device_t *hd, const char *channelmap)
-{
- char name[32];
- sprintf(name, "/tuner%u/channelmap", hd->tuner);
- return hdhomerun_control_set_with_lockkey(hd->cs, name, channelmap, hd->lockkey, NULL, NULL);
-}
-
-int hdhomerun_device_set_tuner_filter(struct hdhomerun_device_t *hd, const char *filter)
-{
- char name[32];
- sprintf(name, "/tuner%u/filter", hd->tuner);
- return hdhomerun_control_set_with_lockkey(hd->cs, name, filter, hd->lockkey, NULL, NULL);
-}
-
-static int hdhomerun_device_set_tuner_filter_by_array_append(char **pptr, char *end, uint16_t range_begin, uint16_t range_end)
-{
- char *ptr = *pptr;
-
- size_t available = end - ptr;
- size_t required;
-
- if (range_begin == range_end) {
- required = snprintf(ptr, available, "0x%04x ", range_begin) + 1;
- } else {
- required = snprintf(ptr, available, "0x%04x-0x%04x ", range_begin, range_end) + 1;
- }
-
- if (required > available) {
- return FALSE;
- }
-
- *pptr = strchr(ptr, 0);
- return TRUE;
-}
-
-int hdhomerun_device_set_tuner_filter_by_array(struct hdhomerun_device_t *hd, unsigned char filter_array[0x2000])
-{
- char filter[1024];
- char *ptr = filter;
- char *end = filter + sizeof(filter);
-
- uint16_t range_begin = 0xFFFF;
- uint16_t range_end = 0xFFFF;
-
- uint16_t i;
- for (i = 0; i <= 0x1FFF; i++) {
- if (!filter_array[i]) {
- if (range_begin == 0xFFFF) {
- continue;
- }
- if (!hdhomerun_device_set_tuner_filter_by_array_append(&ptr, end, range_begin, range_end)) {
- return 0;
- }
- range_begin = 0xFFFF;
- range_end = 0xFFFF;
- continue;
- }
-
- if (range_begin == 0xFFFF) {
- range_begin = i;
- range_end = i;
- continue;
- }
-
- range_end = i;
- }
-
- if (range_begin != 0xFFFF) {
- if (!hdhomerun_device_set_tuner_filter_by_array_append(&ptr, end, range_begin, range_end)) {
- return 0;
- }
- }
-
- /* Remove trailing space. */
- if (ptr > filter) {
- ptr--;
- }
- *ptr = 0;
-
- return hdhomerun_device_set_tuner_filter(hd, filter);
-}
-
-int hdhomerun_device_set_tuner_program(struct hdhomerun_device_t *hd, const char *program)
-{
- char name[32];
- sprintf(name, "/tuner%u/program", hd->tuner);
- return hdhomerun_control_set_with_lockkey(hd->cs, name, program, hd->lockkey, NULL, NULL);
-}
-
-int hdhomerun_device_set_tuner_target(struct hdhomerun_device_t *hd, char *target)
-{
- char name[32];
- sprintf(name, "/tuner%u/target", hd->tuner);
- return hdhomerun_control_set_with_lockkey(hd->cs, name, target, hd->lockkey, NULL, NULL);
-}
-
-int hdhomerun_device_set_tuner_target_to_local_protocol(struct hdhomerun_device_t *hd, const char *protocol)
-{
- /* Create video socket. */
- hdhomerun_device_get_video_sock(hd);
- if (!hd->vs) {
- return -1;
- }
-
- /* Set target. */
- char target[64];
- uint32_t local_ip = hdhomerun_control_get_local_addr(hd->cs);
- uint16_t local_port = hdhomerun_video_get_local_port(hd->vs);
- sprintf(target, "%s://%u.%u.%u.%u:%u",
- protocol,
- (unsigned int)(local_ip >> 24) & 0xFF, (unsigned int)(local_ip >> 16) & 0xFF,
- (unsigned int)(local_ip >> 8) & 0xFF, (unsigned int)(local_ip >> 0) & 0xFF,
- (unsigned int)local_port
- );
-
- return hdhomerun_device_set_tuner_target(hd, target);
-}
-
-int hdhomerun_device_set_tuner_target_to_local(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_device_set_tuner_target_to_local_protocol(hd, HDHOMERUN_TARGET_PROTOCOL_UDP);
-}
-
-int hdhomerun_device_set_ir_target(struct hdhomerun_device_t *hd, const char *target)
-{
- return hdhomerun_control_set(hd->cs, "/ir/target", target, NULL, NULL);
-}
-
-int hdhomerun_device_set_lineup_location(struct hdhomerun_device_t *hd, const char *location)
-{
- return hdhomerun_control_set(hd->cs, "/lineup/location", location, NULL, NULL);
-}
-
-int hdhomerun_device_get_var(struct hdhomerun_device_t *hd, const char *name, char **pvalue, char **perror)
-{
- return hdhomerun_control_get(hd->cs, name, pvalue, perror);
-}
-
-int hdhomerun_device_set_var(struct hdhomerun_device_t *hd, const char *name, const char *value, char **pvalue, char **perror)
-{
- return hdhomerun_control_set_with_lockkey(hd->cs, name, value, hd->lockkey, pvalue, perror);
-}
-
-int hdhomerun_device_tuner_lockkey_request(struct hdhomerun_device_t *hd, char **perror)
-{
- uint32_t new_lockkey = (uint32_t)getcurrenttime();
-
- char name[32];
- sprintf(name, "/tuner%u/lockkey", hd->tuner);
-
- char new_lockkey_str[64];
- sprintf(new_lockkey_str, "%u", (unsigned int)new_lockkey);
-
- int ret = hdhomerun_control_set_with_lockkey(hd->cs, name, new_lockkey_str, hd->lockkey, NULL, perror);
- if (ret <= 0) {
- hd->lockkey = 0;
- return ret;
- }
-
- hd->lockkey = new_lockkey;
- return ret;
-}
-
-int hdhomerun_device_tuner_lockkey_release(struct hdhomerun_device_t *hd)
-{
- if (hd->lockkey == 0) {
- return 1;
- }
-
- char name[32];
- sprintf(name, "/tuner%u/lockkey", hd->tuner);
- int ret = hdhomerun_control_set_with_lockkey(hd->cs, name, "none", hd->lockkey, NULL, NULL);
-
- hd->lockkey = 0;
- return ret;
-}
-
-int hdhomerun_device_tuner_lockkey_force(struct hdhomerun_device_t *hd)
-{
- char name[32];
- sprintf(name, "/tuner%u/lockkey", hd->tuner);
- int ret = hdhomerun_control_set(hd->cs, name, "force", NULL, NULL);
-
- hd->lockkey = 0;
- return ret;
-}
-
-void hdhomerun_device_tuner_lockkey_use_value(struct hdhomerun_device_t *hd, uint32_t lockkey)
-{
- hd->lockkey = lockkey;
-}
-
-int hdhomerun_device_wait_for_lock(struct hdhomerun_device_t *hd, struct hdhomerun_tuner_status_t *status)
-{
- /* Delay for SS reading to be valid (signal present). */
- msleep(250);
-
- /* Wait for up to 2.5 seconds for lock. */
- uint64_t timeout = getcurrenttime() + 2500;
- while (1) {
- /* Get status to check for lock. Quality numbers will not be valid yet. */
- int ret = hdhomerun_device_get_tuner_status(hd, NULL, status);
- if (ret <= 0) {
- return ret;
- }
-
- if (!status->signal_present) {
- return 1;
- }
- if (status->lock_supported || status->lock_unsupported) {
- return 1;
- }
-
- if (getcurrenttime() >= timeout) {
- return 1;
- }
-
- msleep(250);
- }
-}
-
-int hdhomerun_device_stream_start(struct hdhomerun_device_t *hd)
-{
- /* Set target. */
- int ret = hdhomerun_device_stream_refresh_target(hd);
- if (ret <= 0) {
- return ret;
- }
-
- /* Flush video buffer. */
- msleep(64);
- hdhomerun_video_flush(hd->vs);
-
- /* Success. */
- return 1;
-}
-
-int hdhomerun_device_stream_refresh_target(struct hdhomerun_device_t *hd)
-{
- return hdhomerun_device_set_tuner_target_to_local_protocol(hd, HDHOMERUN_TARGET_PROTOCOL_RTP);
-}
-
-uint8_t *hdhomerun_device_stream_recv(struct hdhomerun_device_t *hd, size_t max_size, size_t *pactual_size)
-{
- if (!hd->vs) {
- return NULL;
- }
- return hdhomerun_video_recv(hd->vs, max_size, pactual_size);
-}
-
-void hdhomerun_device_stream_flush(struct hdhomerun_device_t *hd)
-{
- hdhomerun_video_flush(hd->vs);
-}
-
-void hdhomerun_device_stream_stop(struct hdhomerun_device_t *hd)
-{
- hdhomerun_device_set_tuner_target(hd, "none");
-}
-
-int hdhomerun_device_channelscan_init(struct hdhomerun_device_t *hd, const char *channelmap)
-{
- if (hd->scan) {
- channelscan_destroy(hd->scan);
- }
-
- hd->scan = channelscan_create(hd, channelmap);
- if (!hd->scan) {
- return -1;
- }
-
- return 1;
-}
-
-int hdhomerun_device_channelscan_advance(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result)
-{
- if (!hd->scan) {
- return 0;
- }
-
- int ret = channelscan_advance(hd->scan, result);
- if (ret <= 0) {
- channelscan_destroy(hd->scan);
- hd->scan = NULL;
- }
-
- return ret;
-}
-
-int hdhomerun_device_channelscan_detect(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result)
-{
- if (!hd->scan) {
- return 0;
- }
-
- int ret = channelscan_detect(hd->scan, result);
- if (ret <= 0) {
- channelscan_destroy(hd->scan);
- hd->scan = NULL;
- }
-
- return ret;
-}
-
-uint8_t hdhomerun_device_channelscan_get_progress(struct hdhomerun_device_t *hd)
-{
- if (!hd->scan) {
- return 0;
- }
-
- return channelscan_get_progress(hd->scan);
-}
-
-int hdhomerun_device_firmware_version_check(struct hdhomerun_device_t *hd, uint32_t features)
-{
- uint32_t version;
- if (hdhomerun_device_get_version(hd, NULL, &version) <= 0) {
- return -1;
- }
-
- if (version < 20070219) {
- return 0;
- }
-
- return 1;
-}
-
-const char *hdhomerun_device_get_model_str(struct hdhomerun_device_t *hd)
-{
- if (*hd->model) {
- return hd->model;
- }
-
- char *model_str;
- int ret = hdhomerun_control_get(hd->cs, "/sys/model", &model_str, NULL);
- if (ret < 0) {
- return NULL;
- }
- if (ret == 0) {
- model_str = "hdhomerun_atsc";
- }
-
- strncpy(hd->model, model_str, sizeof(hd->model) - 1);
- hd->model[sizeof(hd->model) - 1] = 0;
-
- return hd->model;
-}
-
-int hdhomerun_device_upgrade(struct hdhomerun_device_t *hd, FILE *upgrade_file)
-{
- hdhomerun_control_set(hd->cs, "/tuner0/lockkey", "force", NULL, NULL);
- hdhomerun_control_set(hd->cs, "/tuner0/channel", "none", NULL, NULL);
-
- hdhomerun_control_set(hd->cs, "/tuner1/lockkey", "force", NULL, NULL);
- hdhomerun_control_set(hd->cs, "/tuner1/channel", "none", NULL, NULL);
-
- return hdhomerun_control_upgrade(hd->cs, upgrade_file);
-}
-
-void hdhomerun_device_debug_print_video_stats(struct hdhomerun_device_t *hd)
-{
- if (!hdhomerun_debug_enabled(hd->dbg)) {
- return;
- }
-
- char name[32];
- sprintf(name, "/tuner%u/debug", hd->tuner);
-
- char *debug_str;
- char *error_str;
- int ret = hdhomerun_control_get(hd->cs, name, &debug_str, &error_str);
- if (ret < 0) {
- hdhomerun_debug_printf(hd->dbg, "video dev: communication error getting debug stats\n");
- return;
- }
-
- if (error_str) {
- hdhomerun_debug_printf(hd->dbg, "video dev: %s\n", error_str);
- } else {
- hdhomerun_debug_printf(hd->dbg, "video dev: %s\n", debug_str);
- }
-
- if (hd->vs) {
- hdhomerun_video_debug_print_stats(hd->vs);
- }
-}
-
-void hdhomerun_device_get_video_stats(struct hdhomerun_device_t *hd, struct hdhomerun_video_stats_t *stats)
-{
- hdhomerun_video_get_stats(hd->vs, stats);
-}
diff --git a/lib/libhdhomerun/hdhomerun_device.h b/lib/libhdhomerun/hdhomerun_device.h
deleted file mode 100644
index be424fe57d..0000000000
--- a/lib/libhdhomerun/hdhomerun_device.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * hdhomerun_device.h
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define HDHOMERUN_DEVICE_MAX_TUNE_TO_LOCK_TIME 1500
-#define HDHOMERUN_DEVICE_MAX_LOCK_TO_DATA_TIME 2000
-#define HDHOMERUN_DEVICE_MAX_TUNE_TO_DATA_TIME (HDHOMERUN_DEVICE_MAX_TUNE_TO_LOCK_TIME + HDHOMERUN_DEVICE_MAX_LOCK_TO_DATA_TIME)
-
-#define HDHOMERUN_STATUS_COLOR_NEUTRAL 0xFFFFFFFF
-#define HDHOMERUN_STATUS_COLOR_RED 0xFFFF0000
-#define HDHOMERUN_STATUS_COLOR_YELLOW 0xFFFFFF00
-#define HDHOMERUN_STATUS_COLOR_GREEN 0xFF00C000
-
-#define HDHOMERUN_TARGET_PROTOCOL_UDP "udp"
-#define HDHOMERUN_TARGET_PROTOCOL_RTP "rtp"
-
-/*
- * Create a device object.
- *
- * Typically a device object will be created for each tuner.
- * It is valid to have multiple device objects communicating with a single HDHomeRun.
- *
- * For example, a threaded application that streams video from 4 tuners (2 HDHomeRun devices) and has
- * GUI feedback to the user of the selected tuner might use 5 device objects: 4 for streaming video
- * (one per thread) and one for the GUI display that can just between tuners.
- *
- * This function will not attempt to connect to the device.
- * The connection will be established when first used.
- *
- * uint32_t device_id = 32-bit device id of device. Set to HDHOMERUN_DEVICE_ID_WILDCARD to match any device ID.
- * uint32_t device_ip = IP address of device. Set to 0 to auto-detect.
- * unsigned int tuner = tuner index (0 or 1). Can be changed later by calling hdhomerun_device_set_tuner.
- * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL.
- *
- * Returns a pointer to the newly created device object.
- *
- * When no longer needed, the socket should be destroyed by calling hdhomerun_device_destroy.
- *
- * The hdhomerun_device_create_from_str function creates a device object from the given device_str.
- * The device_str parameter can be any of the following forms:
- * <device id>
- * <device id>-<tuner index>
- * <ip address>
- * If the tuner index is not included in the device_str then it is set to zero.
- * Use hdhomerun_device_set_tuner or hdhomerun_device_set_tuner_from_str to set the tuner.
- *
- * The hdhomerun_device_set_tuner_from_str function sets the tuner from the given tuner_str.
- * The tuner_str parameter can be any of the following forms:
- * <tuner index>
- * /tuner<tuner index>
- */
-extern LIBTYPE struct hdhomerun_device_t *hdhomerun_device_create(uint32_t device_id, uint32_t device_ip, unsigned int tuner, struct hdhomerun_debug_t *dbg);
-extern LIBTYPE struct hdhomerun_device_t *hdhomerun_device_create_from_str(const char *device_str, struct hdhomerun_debug_t *dbg);
-extern LIBTYPE void hdhomerun_device_destroy(struct hdhomerun_device_t *hd);
-
-/*
- * Get the device id, ip, or tuner of the device instance.
- */
-extern LIBTYPE uint32_t hdhomerun_device_get_device_id(struct hdhomerun_device_t *hd);
-extern LIBTYPE uint32_t hdhomerun_device_get_device_ip(struct hdhomerun_device_t *hd);
-extern LIBTYPE uint32_t hdhomerun_device_get_device_id_requested(struct hdhomerun_device_t *hd);
-extern LIBTYPE uint32_t hdhomerun_device_get_device_ip_requested(struct hdhomerun_device_t *hd);
-extern LIBTYPE unsigned int hdhomerun_device_get_tuner(struct hdhomerun_device_t *hd);
-
-extern LIBTYPE void hdhomerun_device_set_device(struct hdhomerun_device_t *hd, uint32_t device_id, uint32_t device_ip);
-extern LIBTYPE void hdhomerun_device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner);
-extern LIBTYPE int hdhomerun_device_set_tuner_from_str(struct hdhomerun_device_t *hd, const char *tuner_str);
-
-/*
- * Get the local machine IP address used when communicating with the device.
- *
- * This function is useful for determining the IP address to use with set target commands.
- *
- * Returns 32-bit IP address with native endianness, or 0 on error.
- */
-extern LIBTYPE uint32_t hdhomerun_device_get_local_machine_addr(struct hdhomerun_device_t *hd);
-
-/*
- * Get operations.
- *
- * struct hdhomerun_tuner_status_t *status = Pointer to caller supplied status struct to be populated with result.
- * const char **p<name> = Caller supplied char * to be updated to point to the result string. The string will remain
- * valid until another call to a device function.
- *
- * Returns 1 if the operation was successful.
- * Returns 0 if the operation was rejected.
- * Returns -1 if a communication error occurred.
- */
-extern LIBTYPE int hdhomerun_device_get_tuner_status(struct hdhomerun_device_t *hd, char **pstatus_str, struct hdhomerun_tuner_status_t *status);
-extern LIBTYPE int hdhomerun_device_get_tuner_streaminfo(struct hdhomerun_device_t *hd, char **pstreaminfo);
-extern LIBTYPE int hdhomerun_device_get_tuner_channel(struct hdhomerun_device_t *hd, char **pchannel);
-extern LIBTYPE int hdhomerun_device_get_tuner_channelmap(struct hdhomerun_device_t *hd, char **pchannelmap);
-extern LIBTYPE int hdhomerun_device_get_tuner_filter(struct hdhomerun_device_t *hd, char **pfilter);
-extern LIBTYPE int hdhomerun_device_get_tuner_program(struct hdhomerun_device_t *hd, char **pprogram);
-extern LIBTYPE int hdhomerun_device_get_tuner_target(struct hdhomerun_device_t *hd, char **ptarget);
-extern LIBTYPE int hdhomerun_device_get_tuner_plotsample(struct hdhomerun_device_t *hd, struct hdhomerun_plotsample_t **psamples, size_t *pcount);
-extern LIBTYPE int hdhomerun_device_get_tuner_lockkey_owner(struct hdhomerun_device_t *hd, char **powner);
-extern LIBTYPE int hdhomerun_device_get_ir_target(struct hdhomerun_device_t *hd, char **ptarget);
-extern LIBTYPE int hdhomerun_device_get_lineup_location(struct hdhomerun_device_t *hd, char **plocation);
-extern LIBTYPE int hdhomerun_device_get_version(struct hdhomerun_device_t *hd, char **pversion_str, uint32_t *pversion_num);
-
-extern LIBTYPE uint32_t hdhomerun_device_get_tuner_status_ss_color(struct hdhomerun_tuner_status_t *status);
-extern LIBTYPE uint32_t hdhomerun_device_get_tuner_status_snq_color(struct hdhomerun_tuner_status_t *status);
-extern LIBTYPE uint32_t hdhomerun_device_get_tuner_status_seq_color(struct hdhomerun_tuner_status_t *status);
-
-extern LIBTYPE const char *hdhomerun_device_get_model_str(struct hdhomerun_device_t *hd);
-
-/*
- * Set operations.
- *
- * const char *<name> = String to send to device.
- *
- * Returns 1 if the operation was successful.
- * Returns 0 if the operation was rejected.
- * Returns -1 if a communication error occurred.
- */
-extern LIBTYPE int hdhomerun_device_set_tuner_channel(struct hdhomerun_device_t *hd, const char *channel);
-extern LIBTYPE int hdhomerun_device_set_tuner_channelmap(struct hdhomerun_device_t *hd, const char *channelmap);
-extern LIBTYPE int hdhomerun_device_set_tuner_filter(struct hdhomerun_device_t *hd, const char *filter);
-extern LIBTYPE int hdhomerun_device_set_tuner_filter_by_array(struct hdhomerun_device_t *hd, unsigned char filter_array[0x2000]);
-extern LIBTYPE int hdhomerun_device_set_tuner_program(struct hdhomerun_device_t *hd, const char *program);
-extern LIBTYPE int hdhomerun_device_set_tuner_target(struct hdhomerun_device_t *hd, char *target);
-extern LIBTYPE int hdhomerun_device_set_tuner_target_to_local_protocol(struct hdhomerun_device_t *hd, const char *protocol);
-extern LIBTYPE int hdhomerun_device_set_tuner_target_to_local(struct hdhomerun_device_t *hd);
-extern LIBTYPE int hdhomerun_device_set_ir_target(struct hdhomerun_device_t *hd, const char *target);
-extern LIBTYPE int hdhomerun_device_set_lineup_location(struct hdhomerun_device_t *hd, const char *location);
-
-/*
- * Get/set a named control variable on the device.
- *
- * const char *name: The name of var to get/set (c-string). The supported vars is device/firmware dependant.
- * const char *value: The value to set (c-string). The format is device/firmware dependant.
-
- * char **pvalue: If provided, the caller-supplied char pointer will be populated with a pointer to the value
- * string returned by the device, or NULL if the device returned an error string. The string will remain
- * valid until the next call to a control sock function.
- * char **perror: If provided, the caller-supplied char pointer will be populated with a pointer to the error
- * string returned by the device, or NULL if the device returned an value string. The string will remain
- * valid until the next call to a control sock function.
- *
- * Returns 1 if the operation was successful (pvalue set, perror NULL).
- * Returns 0 if the operation was rejected (pvalue NULL, perror set).
- * Returns -1 if a communication error occurs.
- */
-extern LIBTYPE int hdhomerun_device_get_var(struct hdhomerun_device_t *hd, const char *name, char **pvalue, char **perror);
-extern LIBTYPE int hdhomerun_device_set_var(struct hdhomerun_device_t *hd, const char *name, const char *value, char **pvalue, char **perror);
-
-/*
- * Tuner locking.
- *
- * The hdhomerun_device_tuner_lockkey_request function is used to obtain a lock
- * or to verify that the hdhomerun_device object still holds the lock.
- * Returns 1 if the lock request was successful and the lock was obtained.
- * Returns 0 if the lock request was rejected.
- * Returns -1 if a communication error occurs.
- *
- * The hdhomerun_device_tuner_lockkey_release function is used to release a
- * previously held lock. If locking is used then this function must be called
- * before destroying the hdhomerun_device object.
- */
-extern LIBTYPE int hdhomerun_device_tuner_lockkey_request(struct hdhomerun_device_t *hd, char **perror);
-extern LIBTYPE int hdhomerun_device_tuner_lockkey_release(struct hdhomerun_device_t *hd);
-extern LIBTYPE int hdhomerun_device_tuner_lockkey_force(struct hdhomerun_device_t *hd);
-
-/*
- * Intended only for non persistent connections; eg, hdhomerun_config.
- */
-extern LIBTYPE void hdhomerun_device_tuner_lockkey_use_value(struct hdhomerun_device_t *hd, uint32_t lockkey);
-
-/*
- * Wait for tuner lock after channel change.
- *
- * The hdhomerun_device_wait_for_lock function is used to detect/wait for a lock vs no lock indication
- * after a channel change.
- *
- * It will return quickly if a lock is aquired.
- * It will return quickly if there is no signal detected.
- * Worst case it will time out after 1.5 seconds - the case where there is signal but no lock.
- */
-extern LIBTYPE int hdhomerun_device_wait_for_lock(struct hdhomerun_device_t *hd, struct hdhomerun_tuner_status_t *status);
-
-/*
- * Stream a filtered program or the unfiltered stream.
- *
- * The hdhomerun_device_stream_start function initializes the process and tells the device to start streamin data.
- *
- * uint16_t program_number = The program number to filer, or 0 for unfiltered.
- *
- * Returns 1 if the oprtation started successfully.
- * Returns 0 if the operation was rejected.
- * Returns -1 if a communication error occurs.
- *
- * The hdhomerun_device_stream_recv function should be called periodically to receive the stream data.
- * The buffer can losslessly store 1 second of data, however a more typical call rate would be every 64ms.
- *
- * The hdhomerun_device_stream_stop function tells the device to stop streaming data.
- */
-extern LIBTYPE int hdhomerun_device_stream_start(struct hdhomerun_device_t *hd);
-extern LIBTYPE int hdhomerun_device_stream_refresh_target(struct hdhomerun_device_t *hd);
-extern LIBTYPE uint8_t *hdhomerun_device_stream_recv(struct hdhomerun_device_t *hd, size_t max_size, size_t *pactual_size);
-extern LIBTYPE void hdhomerun_device_stream_flush(struct hdhomerun_device_t *hd);
-extern LIBTYPE void hdhomerun_device_stream_stop(struct hdhomerun_device_t *hd);
-
-/*
- * Channel scan API.
- */
-extern LIBTYPE int hdhomerun_device_channelscan_init(struct hdhomerun_device_t *hd, const char *channelmap);
-extern LIBTYPE int hdhomerun_device_channelscan_advance(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result);
-extern LIBTYPE int hdhomerun_device_channelscan_detect(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result);
-extern LIBTYPE uint8_t hdhomerun_device_channelscan_get_progress(struct hdhomerun_device_t *hd);
-
-/*
- * Check that the device is running the recommended firmware.
- *
- * uint32_t features: Reserved for future use. Set to zero.
- *
- * Returns 1 if the firmware meets the minimum requriements for all operations.
- * Returns 0 if th firmware does not meet the minimum requriements for all operations.
- * Returns -1 if an error occurs.
- */
-extern LIBTYPE int hdhomerun_device_firmware_version_check(struct hdhomerun_device_t *hd, uint32_t features);
-
-/*
- * Upload new firmware to the device.
- *
- * FILE *upgrade_file: File pointer to read from. The file must have been opened in binary mode for reading.
- *
- * Returns 1 if the upload succeeded.
- * Returns 0 if the upload was rejected.
- * Returns -1 if an error occurs.
- */
-extern LIBTYPE int hdhomerun_device_upgrade(struct hdhomerun_device_t *hd, FILE *upgrade_file);
-
-/*
- * Low level accessor functions.
- */
-extern LIBTYPE struct hdhomerun_control_sock_t *hdhomerun_device_get_control_sock(struct hdhomerun_device_t *hd);
-extern LIBTYPE struct hdhomerun_video_sock_t *hdhomerun_device_get_video_sock(struct hdhomerun_device_t *hd);
-
-/*
- * Debug print internal stats.
- */
-extern LIBTYPE void hdhomerun_device_debug_print_video_stats(struct hdhomerun_device_t *hd);
-extern LIBTYPE void hdhomerun_device_get_video_stats(struct hdhomerun_device_t *hd, struct hdhomerun_video_stats_t *stats);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_dhcp.c b/lib/libhdhomerun/hdhomerun_dhcp.c
deleted file mode 100644
index 49cb09c200..0000000000
--- a/lib/libhdhomerun/hdhomerun_dhcp.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * hdhomerun_dhcp.c
- *
- * Copyright © 2006-2007 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-#include "hdhomerun_dhcp.h"
-
-struct dhcp_hdr_t {
- uint8_t bootp_message_type;
- uint8_t hardware_type;
- uint8_t hardware_address_length;
- uint8_t hops;
- uint32_t transaction_id;
- uint16_t seconds_elapsed;
- uint16_t bootp_flags;
- uint32_t client_ip;
- uint32_t your_ip;
- uint32_t next_server_ip;
- uint32_t relay_agent_ip;
- uint8_t client_mac[16];
- uint8_t server_host_name[64];
- uint8_t boot_file_name[128];
- uint32_t magic_cookie;
-};
-
-struct hdhomerun_dhcp_t {
- int sock;
- uint32_t local_address;
- pthread_t thread;
- volatile bool_t terminate;
-};
-
-static THREAD_FUNC_PREFIX hdhomerun_dhcp_thread_execute(void *arg);
-
-struct hdhomerun_dhcp_t *hdhomerun_dhcp_create(uint32_t bind_address)
-{
- if (bind_address != 0) {
- if ((bind_address & 0xFFFF0000) != 0xA9FE0000) {
- return NULL;
- }
- }
-
- /* Create socket. */
- int sock = (int)socket(AF_INET, SOCK_DGRAM, 0);
- if (sock == -1) {
- return NULL;
- }
-
- /* Set timeout. */
- setsocktimeout(sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
-
- /* Allow broadcast. */
- int sock_opt = 1;
- setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&sock_opt, sizeof(sock_opt));
-
- /* Allow reuse. */
- sock_opt = 1;
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&sock_opt, sizeof(sock_opt));
-
- /* Bind socket. */
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
- sock_addr.sin_addr.s_addr = htonl(bind_address);
- sock_addr.sin_port = htons(67);
- if (bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
- close(sock);
- return NULL;
- }
-
- /* Allocate object. */
- struct hdhomerun_dhcp_t *dhcp = (struct hdhomerun_dhcp_t *)calloc(1, sizeof(struct hdhomerun_dhcp_t));
- if (!dhcp) {
- close(sock);
- return NULL;
- }
-
- dhcp->sock = sock;
-
- if (bind_address != 0) {
- dhcp->local_address = bind_address;
- } else {
- dhcp->local_address = 0xA9FEFFFF;
- }
-
- /* Spawn thread. */
- if (pthread_create(&dhcp->thread, NULL, &hdhomerun_dhcp_thread_execute, dhcp) != 0) {
- close(sock);
- free(dhcp);
- return NULL;
- }
-
- /* Success. */
- return dhcp;
-}
-
-void hdhomerun_dhcp_destroy(struct hdhomerun_dhcp_t *dhcp)
-{
- dhcp->terminate = TRUE;
- pthread_join(dhcp->thread, NULL);
-
- close(dhcp->sock);
- free(dhcp);
-}
-
-static void hdhomerun_dhcp_send(struct hdhomerun_dhcp_t *dhcp, uint8_t message_type, struct hdhomerun_pkt_t *pkt)
-{
- pkt->pos = pkt->start;
- struct dhcp_hdr_t *hdr = (struct dhcp_hdr_t *)pkt->pos;
- pkt->pos += sizeof(struct dhcp_hdr_t);
- pkt->end = pkt->pos;
-
- uint32_t remote_addr = 0xA9FE0000;
- remote_addr |= (uint32_t)hdr->client_mac[4] << 8;
- remote_addr |= (uint32_t)hdr->client_mac[5] << 0;
- if ((remote_addr == 0xA9FE0000) || (remote_addr == 0xA9FEFFFF)) {
- remote_addr = 0xA9FE8080;
- }
-
- hdr->bootp_message_type = 0x02;
- hdr->your_ip = htonl(remote_addr);
- hdr->next_server_ip = htonl(0x00000000);
-
- hdhomerun_pkt_write_u8(pkt, 53);
- hdhomerun_pkt_write_u8(pkt, 1);
- hdhomerun_pkt_write_u8(pkt, message_type);
-
- hdhomerun_pkt_write_u8(pkt, 54);
- hdhomerun_pkt_write_u8(pkt, 4);
- hdhomerun_pkt_write_u32(pkt, dhcp->local_address);
-
- hdhomerun_pkt_write_u8(pkt, 51);
- hdhomerun_pkt_write_u8(pkt, 4);
- hdhomerun_pkt_write_u32(pkt, 7*24*60*60);
-
- hdhomerun_pkt_write_u8(pkt, 1);
- hdhomerun_pkt_write_u8(pkt, 4);
- hdhomerun_pkt_write_u32(pkt, 0xFFFF0000);
-
- hdhomerun_pkt_write_u8(pkt, 0xFF);
-
- while (pkt->pos < pkt->start + 300) {
- hdhomerun_pkt_write_u8(pkt, 0x00);
- }
-
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
- sock_addr.sin_addr.s_addr = htonl(0xFFFFFFFF);
- sock_addr.sin_port = htons(68);
-
- sendto(dhcp->sock, (char *)pkt->start, (int)(pkt->end - pkt->start), 0, (struct sockaddr *)&sock_addr, sizeof(sock_addr));
-}
-
-static void hdhomerun_dhcp_recv(struct hdhomerun_dhcp_t *dhcp, struct hdhomerun_pkt_t *pkt)
-{
- pkt->pos = pkt->start;
- struct dhcp_hdr_t *hdr = (struct dhcp_hdr_t *)pkt->pos;
- pkt->pos += sizeof(struct dhcp_hdr_t);
- if (pkt->pos > pkt->end) {
- return;
- }
-
- if (ntohl(hdr->magic_cookie) != 0x63825363) {
- return;
- }
-
- static uint8_t vendor[3] = {0x00, 0x18, 0xDD};
- if (memcmp(hdr->client_mac, vendor, 3) != 0) {
- return;
- }
-
- if (pkt->pos + 3 > pkt->end) {
- return;
- }
- if (hdhomerun_pkt_read_u8(pkt) != 53) {
- return;
- }
- if (hdhomerun_pkt_read_u8(pkt) != 1) {
- return;
- }
- uint8_t message_type_val = hdhomerun_pkt_read_u8(pkt);
-
- switch (message_type_val) {
- case 0x01:
- hdhomerun_dhcp_send(dhcp, 0x02, pkt);
- break;
- case 0x03:
- hdhomerun_dhcp_send(dhcp, 0x05, pkt);
- break;
- default:
- return;
- }
-}
-
-static THREAD_FUNC_PREFIX hdhomerun_dhcp_thread_execute(void *arg)
-{
- struct hdhomerun_dhcp_t *dhcp = (struct hdhomerun_dhcp_t *)arg;
- struct hdhomerun_pkt_t pkt_inst;
-
- while (1) {
- if (dhcp->terminate) {
- return NULL;
- }
-
- struct hdhomerun_pkt_t *pkt = &pkt_inst;
- hdhomerun_pkt_reset(pkt);
-
- int rx_length = recv(dhcp->sock, (char *)pkt->end, (int)(pkt->limit - pkt->end), 0);
- if (rx_length <= 0) {
- if (!sock_getlasterror_socktimeout) {
- sleep(1);
- }
- continue;
- }
- pkt->end += rx_length;
-
- hdhomerun_dhcp_recv(dhcp, pkt);
- }
-}
diff --git a/lib/libhdhomerun/hdhomerun_dhcp.h b/lib/libhdhomerun/hdhomerun_dhcp.h
deleted file mode 100644
index 43df9f38f5..0000000000
--- a/lib/libhdhomerun/hdhomerun_dhcp.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * hdhomerun_dhcp.h
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hdhomerun_dhcp_t;
-
-extern LIBTYPE struct hdhomerun_dhcp_t *hdhomerun_dhcp_create(uint32_t bind_address);
-extern LIBTYPE void hdhomerun_dhcp_destroy(struct hdhomerun_dhcp_t *dhcp);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_discover.c b/lib/libhdhomerun/hdhomerun_discover.c
deleted file mode 100644
index 25ee44b553..0000000000
--- a/lib/libhdhomerun/hdhomerun_discover.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * hdhomerun_discover.c
- *
- * Copyright © 2006-2007 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-#if defined(__CYGWIN__) || defined(__WINDOWS__)
-#include <windows.h>
-#include <iphlpapi.h>
-#define USE_IPHLPAPI 1
-#else
-#include <net/if.h>
-#include <sys/ioctl.h>
-#ifndef _SIZEOF_ADDR_IFREQ
-#define _SIZEOF_ADDR_IFREQ(x) sizeof(x)
-#endif
-#endif
-
-#define HDHOMERUN_DISOCVER_MAX_SOCK_COUNT 16
-
-struct hdhomerun_discover_sock_t {
- int sock;
- uint32_t local_ip;
- uint32_t subnet_mask;
-};
-
-struct hdhomerun_discover_t {
- struct hdhomerun_discover_sock_t socks[HDHOMERUN_DISOCVER_MAX_SOCK_COUNT];
- unsigned int sock_count;
- struct hdhomerun_pkt_t tx_pkt;
- struct hdhomerun_pkt_t rx_pkt;
-};
-
-static bool_t hdhomerun_discover_sock_create(struct hdhomerun_discover_t *ds, uint32_t local_ip, uint32_t subnet_mask)
-{
- if (ds->sock_count >= HDHOMERUN_DISOCVER_MAX_SOCK_COUNT) {
- return FALSE;
- }
-
- /* Create socket. */
- int sock = (int)socket(AF_INET, SOCK_DGRAM, 0);
- if (sock == -1) {
- return FALSE;
- }
-
- /* Set timeouts. */
- setsocktimeout(sock, SOL_SOCKET, SO_SNDTIMEO, 1000);
- setsocktimeout(sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
-
- /* Allow broadcast. */
- int sock_opt = 1;
- setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&sock_opt, sizeof(sock_opt));
-
- /* Bind socket. */
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
- sock_addr.sin_addr.s_addr = htonl(local_ip);
- sock_addr.sin_port = htons(0);
- if (bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
- close(sock);
- return FALSE;
- }
-
- /* Write sock entry. */
- struct hdhomerun_discover_sock_t *dss = &ds->socks[ds->sock_count++];
- dss->sock = sock;
- dss->local_ip = local_ip;
- dss->subnet_mask = subnet_mask;
-
- return TRUE;
-}
-
-#if defined(USE_IPHLPAPI)
-static void hdhomerun_discover_sock_detect(struct hdhomerun_discover_t *ds)
-{
- PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
- ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
-
- DWORD Ret = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
- if (Ret != NO_ERROR) {
- free(pAdapterInfo);
- if (Ret != ERROR_BUFFER_OVERFLOW) {
- return;
- }
- pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
- Ret = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
- if (Ret != NO_ERROR) {
- free(pAdapterInfo);
- return;
- }
- }
-
- PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
- while (pAdapter) {
- IP_ADDR_STRING *pIPAddr = &pAdapter->IpAddressList;
- while (pIPAddr) {
- uint32_t local_ip = ntohl(inet_addr(pIPAddr->IpAddress.String));
- uint32_t mask = ntohl(inet_addr(pIPAddr->IpMask.String));
-
- if (local_ip == 0) {
- pIPAddr = pIPAddr->Next;
- continue;
- }
-
- hdhomerun_discover_sock_create(ds, local_ip, mask);
- pIPAddr = pIPAddr->Next;
- }
-
- pAdapter = pAdapter->Next;
- }
-
- free(pAdapterInfo);
-}
-
-#else
-
-static void hdhomerun_discover_sock_detect(struct hdhomerun_discover_t *ds)
-{
- int fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (fd == -1) {
- return;
- }
-
- struct ifconf ifc;
- uint8_t buf[8192];
- ifc.ifc_len = sizeof(buf);
- ifc.ifc_buf = (char *)buf;
-
- memset(buf, 0, sizeof(buf));
-
- if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
- close(fd);
- return;
- }
-
- uint8_t *ptr = (uint8_t *)ifc.ifc_req;
- uint8_t *end = (uint8_t *)&ifc.ifc_buf[ifc.ifc_len];
-
- while (ptr <= end) {
- struct ifreq *ifr = (struct ifreq *)ptr;
- ptr += _SIZEOF_ADDR_IFREQ(*ifr);
-
- if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
- continue;
- }
- struct sockaddr_in *addr_in = (struct sockaddr_in *)&(ifr->ifr_addr);
- uint32_t local_ip = ntohl(addr_in->sin_addr.s_addr);
- if (local_ip == 0) {
- continue;
- }
-
- if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
- continue;
- }
- struct sockaddr_in *mask_in = (struct sockaddr_in *)&(ifr->ifr_addr);
- uint32_t mask = ntohl(mask_in->sin_addr.s_addr);
-
- hdhomerun_discover_sock_create(ds, local_ip, mask);
- }
-}
-#endif
-
-static struct hdhomerun_discover_t *hdhomerun_discover_create(void)
-{
- struct hdhomerun_discover_t *ds = (struct hdhomerun_discover_t *)calloc(1, sizeof(struct hdhomerun_discover_t));
- if (!ds) {
- return NULL;
- }
-
- /* Create a routable socket. */
- if (!hdhomerun_discover_sock_create(ds, 0, 0)) {
- free(ds);
- return NULL;
- }
-
- /* Detect & create local sockets. */
- hdhomerun_discover_sock_detect(ds);
-
- /* Success. */
- return ds;
-}
-
-static void hdhomerun_discover_destroy(struct hdhomerun_discover_t *ds)
-{
- unsigned int i;
- for (i = 0; i < ds->sock_count; i++) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
- close(dss->sock);
- }
-
- free(ds);
-}
-
-static bool_t hdhomerun_discover_send_internal(struct hdhomerun_discover_t *ds, struct hdhomerun_discover_sock_t *dss, uint32_t target_ip, uint32_t device_type, uint32_t device_id)
-{
- struct hdhomerun_pkt_t *tx_pkt = &ds->tx_pkt;
- hdhomerun_pkt_reset(tx_pkt);
-
- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_DEVICE_TYPE);
- hdhomerun_pkt_write_var_length(tx_pkt, 4);
- hdhomerun_pkt_write_u32(tx_pkt, device_type);
- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_DEVICE_ID);
- hdhomerun_pkt_write_var_length(tx_pkt, 4);
- hdhomerun_pkt_write_u32(tx_pkt, device_id);
- hdhomerun_pkt_seal_frame(tx_pkt, HDHOMERUN_TYPE_DISCOVER_REQ);
-
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
- sock_addr.sin_addr.s_addr = htonl(target_ip);
- sock_addr.sin_port = htons(HDHOMERUN_DISCOVER_UDP_PORT);
-
- int length = (int)(tx_pkt->end - tx_pkt->start);
- if (sendto(dss->sock, (char *)tx_pkt->start, length, 0, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != length) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-static bool_t hdhomerun_discover_send_wildcard_ip(struct hdhomerun_discover_t *ds, uint32_t device_type, uint32_t device_id)
-{
- bool_t result = FALSE;
-
- /*
- * Send subnet broadcast using each local ip socket.
- * This will work with multiple separate 169.254.x.x interfaces.
- */
- unsigned int i;
- for (i = 1; i < ds->sock_count; i++) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
- uint32_t target_ip = dss->local_ip | ~dss->subnet_mask;
- result |= hdhomerun_discover_send_internal(ds, dss, target_ip, device_type, device_id);
- }
-
- /*
- * If no local ip sockets then fall back to sending a global broadcast letting the OS choose the interface.
- */
- if (!result) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[0];
- result = hdhomerun_discover_send_internal(ds, dss, 0xFFFFFFFF, device_type, device_id);
- }
-
- return result;
-}
-
-static bool_t hdhomerun_discover_send_target_ip(struct hdhomerun_discover_t *ds, uint32_t target_ip, uint32_t device_type, uint32_t device_id)
-{
- bool_t result = FALSE;
-
- /*
- * Send targeted packet from any local ip that is in the same subnet.
- * This will work with multiple separate 169.254.x.x interfaces.
- */
- unsigned int i;
- for (i = 1; i < ds->sock_count; i++) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
- if ((target_ip & dss->subnet_mask) != (dss->local_ip & dss->subnet_mask)) {
- continue;
- }
-
- result |= hdhomerun_discover_send_internal(ds, dss, target_ip, device_type, device_id);
- }
-
- /*
- * If target IP does not match a local subnet then fall back to letting the OS choose the gateway interface.
- */
- if (!result) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[0];
- result = hdhomerun_discover_send_internal(ds, dss, target_ip, device_type, device_id);
- }
-
- return result;
-}
-
-static bool_t hdhomerun_discover_send(struct hdhomerun_discover_t *ds, uint32_t target_ip, uint32_t device_type, uint32_t device_id)
-{
- if (target_ip != 0) {
- return hdhomerun_discover_send_target_ip(ds, target_ip, device_type, device_id);
- }
-
- return hdhomerun_discover_send_wildcard_ip(ds, device_type, device_id);
-}
-
-static int hdhomerun_discover_recv_internal(struct hdhomerun_discover_t *ds, struct hdhomerun_discover_sock_t *dss, struct hdhomerun_discover_device_t *result)
-{
- struct hdhomerun_pkt_t *rx_pkt = &ds->rx_pkt;
- hdhomerun_pkt_reset(rx_pkt);
-
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- socklen_t sockaddr_size = sizeof(sock_addr);
-
- int rx_length = recvfrom(dss->sock, (char *)rx_pkt->end, (int)(rx_pkt->limit - rx_pkt->end), 0, (struct sockaddr *)&sock_addr, &sockaddr_size);
- if (rx_length <= 0) {
- /* Don't return error - windows machine on VPN can sometimes cause a sock error here but otherwise works. */
- return 0;
- }
- rx_pkt->end += rx_length;
-
- uint16_t type;
- if (hdhomerun_pkt_open_frame(rx_pkt, &type) <= 0) {
- return 0;
- }
- if (type != HDHOMERUN_TYPE_DISCOVER_RPY) {
- return 0;
- }
-
- result->ip_addr = ntohl(sock_addr.sin_addr.s_addr);
- result->device_type = 0;
- result->device_id = 0;
-
- while (1) {
- uint8_t tag;
- size_t len;
- uint8_t *next = hdhomerun_pkt_read_tlv(rx_pkt, &tag, &len);
- if (!next) {
- break;
- }
-
- switch (tag) {
- case HDHOMERUN_TAG_DEVICE_TYPE:
- if (len != 4) {
- break;
- }
- result->device_type = hdhomerun_pkt_read_u32(rx_pkt);
- break;
-
- case HDHOMERUN_TAG_DEVICE_ID:
- if (len != 4) {
- break;
- }
- result->device_id = hdhomerun_pkt_read_u32(rx_pkt);
- break;
-
- default:
- break;
- }
-
- rx_pkt->pos = next;
- }
-
- return 1;
-}
-
-static int hdhomerun_discover_recv(struct hdhomerun_discover_t *ds, struct hdhomerun_discover_device_t *result)
-{
- struct timeval t;
- t.tv_sec = 0;
- t.tv_usec = 250000;
-
- fd_set readfds;
- FD_ZERO(&readfds);
- int max_sock = -1;
-
- unsigned int i;
- for (i = 0; i < ds->sock_count; i++) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
- FD_SET(dss->sock, &readfds);
- if (dss->sock > max_sock) {
- max_sock = dss->sock;
- }
- }
-
- if (select(max_sock+1, &readfds, NULL, NULL, &t) < 0) {
- return -1;
- }
-
- for (i = 0; i < ds->sock_count; i++) {
- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
- if (!FD_ISSET(dss->sock, &readfds)) {
- continue;
- }
-
- if (hdhomerun_discover_recv_internal(ds, dss, result) <= 0) {
- continue;
- }
-
- return 1;
- }
-
- return 0;
-}
-
-static struct hdhomerun_discover_device_t *hdhomerun_discover_find_in_list(struct hdhomerun_discover_device_t result_list[], int count, uint32_t ip_addr)
-{
- int index;
- for (index = 0; index < count; index++) {
- struct hdhomerun_discover_device_t *result = &result_list[index];
- if (result->ip_addr == ip_addr) {
- return result;
- }
- }
-
- return NULL;
-}
-
-static int hdhomerun_discover_find_devices_internal(struct hdhomerun_discover_t *ds, uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count)
-{
- int count = 0;
- int attempt;
- for (attempt = 0; attempt < 4; attempt++) {
- if (!hdhomerun_discover_send(ds, target_ip, device_type, device_id)) {
- return -1;
- }
-
- uint64_t timeout = getcurrenttime() + 250;
- while (getcurrenttime() < timeout) {
- struct hdhomerun_discover_device_t *result = &result_list[count];
-
- int ret = hdhomerun_discover_recv(ds, result);
- if (ret < 0) {
- return -1;
- }
- if (ret == 0) {
- continue;
- }
-
- /* Filter. */
- if (device_type != HDHOMERUN_DEVICE_TYPE_WILDCARD) {
- if (device_type != result->device_type) {
- continue;
- }
- }
- if (device_id != HDHOMERUN_DEVICE_ID_WILDCARD) {
- if (device_id != result->device_id) {
- continue;
- }
- }
-
- /* Ensure not already in list. */
- if (hdhomerun_discover_find_in_list(result_list, count, result->ip_addr)) {
- continue;
- }
-
- /* Add to list. */
- count++;
- if (count >= max_count) {
- return count;
- }
- }
- }
-
- return count;
-}
-
-int hdhomerun_discover_find_devices_custom(uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count)
-{
- struct hdhomerun_discover_t *ds = hdhomerun_discover_create();
- if (!ds) {
- return -1;
- }
-
- int ret = hdhomerun_discover_find_devices_internal(ds, target_ip, device_type, device_id, result_list, max_count);
-
- hdhomerun_discover_destroy(ds);
- return ret;
-}
-
-bool_t hdhomerun_discover_validate_device_id(uint32_t device_id)
-{
- static uint32_t lookup_table[16] = {0xA, 0x5, 0xF, 0x6, 0x7, 0xC, 0x1, 0xB, 0x9, 0x2, 0x8, 0xD, 0x4, 0x3, 0xE, 0x0};
-
- uint32_t checksum = 0;
-
- checksum ^= lookup_table[(device_id >> 28) & 0x0F];
- checksum ^= (device_id >> 24) & 0x0F;
- checksum ^= lookup_table[(device_id >> 20) & 0x0F];
- checksum ^= (device_id >> 16) & 0x0F;
- checksum ^= lookup_table[(device_id >> 12) & 0x0F];
- checksum ^= (device_id >> 8) & 0x0F;
- checksum ^= lookup_table[(device_id >> 4) & 0x0F];
- checksum ^= (device_id >> 0) & 0x0F;
-
- return (checksum == 0);
-}
-
diff --git a/lib/libhdhomerun/hdhomerun_discover.h b/lib/libhdhomerun/hdhomerun_discover.h
deleted file mode 100644
index 85815bee84..0000000000
--- a/lib/libhdhomerun/hdhomerun_discover.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * hdhomerun_discover.h
- *
- * Copyright © 2006-2007 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hdhomerun_discover_device_t {
- uint32_t ip_addr;
- uint32_t device_type;
- uint32_t device_id;
-};
-
-/*
- * Find devices.
- *
- * The device information is stored in caller-supplied array of hdhomerun_discover_device_t vars.
- * Multiple attempts are made to find devices.
- * Execution time is 1 second.
- *
- * Set target_ip to zero to auto-detect IP address.
- *
- * Returns the number of devices found.
- * Retruns -1 on error.
- */
-extern LIBTYPE int hdhomerun_discover_find_devices_custom(uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count);
-
-/*
- * Verify that the device ID given is valid.
- *
- * The device ID contains a self-check sequence that detects common user input errors including
- * single-digit errors and two digit transposition errors.
- *
- * Returns TRUE if valid.
- * Returns FALSE if not valid.
- */
-extern LIBTYPE bool_t hdhomerun_discover_validate_device_id(uint32_t device_id);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_os.h b/lib/libhdhomerun/hdhomerun_os.h
deleted file mode 100644
index 9bb438a90d..0000000000
--- a/lib/libhdhomerun/hdhomerun_os.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * hdhomerun_os.h
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#if defined(_WIN32) || defined(_WIN64)
-#define __WINDOWS__
-#endif
-
-#if defined(__WINDOWS__)
-#include "hdhomerun_os_windows.h"
-#else
-#include "hdhomerun_os_posix.h"
-#endif
-
-#if !defined(TRUE)
-#define TRUE 1
-#endif
-
-#if !defined(FALSE)
-#define FALSE 0
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_os_posix.h b/lib/libhdhomerun/hdhomerun_os_posix.h
deleted file mode 100644
index c68ecce53a..0000000000
--- a/lib/libhdhomerun/hdhomerun_os_posix.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * hdhomerun_os_posix.h
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#define _FILE_OFFSET_BITS 64
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <sys/timeb.h>
-#include <sys/wait.h>
-#if defined(__ANDROID__)
-#include <signal.h>
-#else
-#include <sys/signal.h>
-#endif
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <pthread.h>
-
-typedef int bool_t;
-
-#define LIBTYPE
-#define sock_getlasterror errno
-#define sock_getlasterror_socktimeout (errno == EAGAIN)
-#define console_vprintf vprintf
-#define console_printf printf
-#define THREAD_FUNC_PREFIX void *
-
-static inline int msleep(unsigned int ms)
-{
- usleep(ms * 1000);
- return 0;
-}
-
-static inline uint64_t getcurrenttime(void)
-{
- struct timeval t;
- gettimeofday(&t, NULL);
- return ((uint64_t)t.tv_sec * 1000) + (t.tv_usec / 1000);
-}
-
-static inline int setsocktimeout(int s, int level, int optname, uint64_t timeout)
-{
- struct timeval t;
- t.tv_sec = timeout / 1000;
- t.tv_usec = (timeout % 1000) * 1000;
- return setsockopt(s, level, optname, (char *)&t, sizeof(t));
-}
-
-#define min(a,b) (((a)<(b))?(a):(b))
-#define max(a,b) (((a)>(b))?(a):(b))
-
diff --git a/lib/libhdhomerun/hdhomerun_os_windows.h b/lib/libhdhomerun/hdhomerun_os_windows.h
deleted file mode 100644
index e484d18483..0000000000
--- a/lib/libhdhomerun/hdhomerun_os_windows.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * hdhomerun_os_windows.h
- *
- * Copyright © 2006-2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#define _WINSOCKAPI_
-#include <windows.h>
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <signal.h>
-#include <time.h>
-#include <sys/types.h>
-#include <sys/timeb.h>
-
-#ifdef __MINGW__
-extern
-int WSAAPI getaddrinfo(
- const char *nodename,
- const char *servname,
- const struct addrinfo *hints,
- struct addrinfo **res
-);
-
-extern
-void WSAAPI freeaddrinfo(
- struct addrinfo *ai
-);
-#else
-#include <wspiapi.h>
-#endif
-
-
-#if defined(DLL_EXPORT)
-#define LIBTYPE __declspec( dllexport )
-#elif defined(DLL_IMPORT)
-#define LIBTYPE __declspec( dllimport )
-#else
-#define LIBTYPE
-#endif
-
-typedef int bool_t;
-typedef signed __int8 int8_t;
-typedef signed __int16 int16_t;
-typedef signed __int32 int32_t;
-typedef signed __int64 int64_t;
-typedef unsigned __int8 uint8_t;
-typedef unsigned __int16 uint16_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef HANDLE pthread_t;
-typedef HANDLE pthread_mutex_t;
-
-#define socklen_t int
-#define close closesocket
-#define sock_getlasterror WSAGetLastError()
-#define sock_getlasterror_socktimeout (WSAGetLastError() == WSAETIMEDOUT)
-#ifndef va_copy
-#define va_copy(x, y) x = y
-#endif
-#define atoll _atoi64
-#define strdup _strdup
-#ifndef strcasecmp
-#define strcasecmp _stricmp
-#endif
-#define snprintf _snprintf
-#define fseeko _fseeki64
-#define ftello _ftelli64
-#define THREAD_FUNC_PREFIX DWORD WINAPI
-#define SIGPIPE SIGABRT
-
-static inline int msleep(unsigned int ms)
-{
- Sleep(ms);
- return 0;
-}
-
-static inline int sleep(unsigned int sec)
-{
- Sleep(sec * 1000);
- return 0;
-}
-
-static inline uint64_t getcurrenttime(void)
-{
- struct timeb tb;
- ftime(&tb);
- return ((uint64_t)tb.time * 1000) + tb.millitm;
-}
-
-static inline int setsocktimeout(int s, int level, int optname, uint64_t timeout)
-{
- int t = (int)timeout;
- return setsockopt(s, level, optname, (char *)&t, sizeof(t));
-}
-
-static inline int pthread_create(pthread_t *tid, void *attr, LPTHREAD_START_ROUTINE start, void *arg)
-{
- *tid = CreateThread(NULL, 0, start, arg, 0, NULL);
- if (!*tid) {
- return (int)GetLastError();
- }
- return 0;
-}
-
-static inline int pthread_join(pthread_t tid, void **value_ptr)
-{
- while (1) {
- DWORD ExitCode = 0;
- if (!GetExitCodeThread(tid, &ExitCode)) {
- return (int)GetLastError();
- }
- if (ExitCode != STILL_ACTIVE) {
- return 0;
- }
- }
-}
-
-static inline void pthread_mutex_init(pthread_mutex_t *mutex, void *attr)
-{
- *mutex = CreateMutex(NULL, FALSE, NULL);
-}
-
-static inline void pthread_mutex_lock(pthread_mutex_t *mutex)
-{
- WaitForSingleObject(*mutex, INFINITE);
-}
-
-static inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
-{
- ReleaseMutex(*mutex);
-}
-
-/*
- * The console output format should be set to UTF-8, however in XP and Vista this breaks batch file processing.
- * Attempting to restore on exit fails to restore if the program is terminated by the user.
- * Solution - set the output format each printf.
- */
-static inline void console_vprintf(const char *fmt, va_list ap)
-{
- UINT cp = GetConsoleOutputCP();
- SetConsoleOutputCP(CP_UTF8);
- vprintf(fmt, ap);
- SetConsoleOutputCP(cp);
-}
-
-static inline void console_printf(const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- console_vprintf(fmt, ap);
- va_end(ap);
-}
diff --git a/lib/libhdhomerun/hdhomerun_pkt.c b/lib/libhdhomerun/hdhomerun_pkt.c
deleted file mode 100644
index 91c72390c1..0000000000
--- a/lib/libhdhomerun/hdhomerun_pkt.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * hdhomerun_pkt.c
- *
- * Copyright © 2005-2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-struct hdhomerun_pkt_t *hdhomerun_pkt_create(void)
-{
- struct hdhomerun_pkt_t *pkt = (struct hdhomerun_pkt_t *)calloc(1, sizeof(struct hdhomerun_pkt_t));
- if (!pkt) {
- return NULL;
- }
-
- hdhomerun_pkt_reset(pkt);
-
- return pkt;
-}
-
-void hdhomerun_pkt_destroy(struct hdhomerun_pkt_t *pkt)
-{
- free(pkt);
-}
-
-void hdhomerun_pkt_reset(struct hdhomerun_pkt_t *pkt)
-{
- pkt->limit = pkt->buffer + sizeof(pkt->buffer) - 4;
- pkt->start = pkt->buffer + 1024;
- pkt->end = pkt->start;
- pkt->pos = pkt->start;
-}
-
-static uint32_t hdhomerun_pkt_calc_crc(uint8_t *start, uint8_t *end)
-{
- uint8_t *pos = start;
- uint32_t crc = 0xFFFFFFFF;
- while (pos < end) {
- uint8_t x = (uint8_t)(crc) ^ *pos++;
- crc >>= 8;
- if (x & 0x01) crc ^= 0x77073096;
- if (x & 0x02) crc ^= 0xEE0E612C;
- if (x & 0x04) crc ^= 0x076DC419;
- if (x & 0x08) crc ^= 0x0EDB8832;
- if (x & 0x10) crc ^= 0x1DB71064;
- if (x & 0x20) crc ^= 0x3B6E20C8;
- if (x & 0x40) crc ^= 0x76DC4190;
- if (x & 0x80) crc ^= 0xEDB88320;
- }
- return crc ^ 0xFFFFFFFF;
-}
-
-uint8_t hdhomerun_pkt_read_u8(struct hdhomerun_pkt_t *pkt)
-{
- uint8_t v = *pkt->pos++;
- return v;
-}
-
-uint16_t hdhomerun_pkt_read_u16(struct hdhomerun_pkt_t *pkt)
-{
- uint16_t v;
- v = (uint16_t)*pkt->pos++ << 8;
- v |= (uint16_t)*pkt->pos++ << 0;
- return v;
-}
-
-uint32_t hdhomerun_pkt_read_u32(struct hdhomerun_pkt_t *pkt)
-{
- uint32_t v;
- v = (uint32_t)*pkt->pos++ << 24;
- v |= (uint32_t)*pkt->pos++ << 16;
- v |= (uint32_t)*pkt->pos++ << 8;
- v |= (uint32_t)*pkt->pos++ << 0;
- return v;
-}
-
-size_t hdhomerun_pkt_read_var_length(struct hdhomerun_pkt_t *pkt)
-{
- size_t length;
-
- if (pkt->pos + 1 > pkt->end) {
- return (size_t)-1;
- }
-
- length = (size_t)*pkt->pos++;
- if (length & 0x0080) {
- if (pkt->pos + 1 > pkt->end) {
- return (size_t)-1;
- }
-
- length &= 0x007F;
- length |= (size_t)*pkt->pos++ << 7;
- }
-
- return length;
-}
-
-uint8_t *hdhomerun_pkt_read_tlv(struct hdhomerun_pkt_t *pkt, uint8_t *ptag, size_t *plength)
-{
- if (pkt->pos + 2 > pkt->end) {
- return NULL;
- }
-
- *ptag = hdhomerun_pkt_read_u8(pkt);
- *plength = hdhomerun_pkt_read_var_length(pkt);
-
- if (pkt->pos + *plength > pkt->end) {
- return NULL;
- }
-
- return pkt->pos + *plength;
-}
-
-void hdhomerun_pkt_write_u8(struct hdhomerun_pkt_t *pkt, uint8_t v)
-{
- *pkt->pos++ = v;
-
- if (pkt->pos > pkt->end) {
- pkt->end = pkt->pos;
- }
-}
-
-void hdhomerun_pkt_write_u16(struct hdhomerun_pkt_t *pkt, uint16_t v)
-{
- *pkt->pos++ = (uint8_t)(v >> 8);
- *pkt->pos++ = (uint8_t)(v >> 0);
-
- if (pkt->pos > pkt->end) {
- pkt->end = pkt->pos;
- }
-}
-
-void hdhomerun_pkt_write_u32(struct hdhomerun_pkt_t *pkt, uint32_t v)
-{
- *pkt->pos++ = (uint8_t)(v >> 24);
- *pkt->pos++ = (uint8_t)(v >> 16);
- *pkt->pos++ = (uint8_t)(v >> 8);
- *pkt->pos++ = (uint8_t)(v >> 0);
-
- if (pkt->pos > pkt->end) {
- pkt->end = pkt->pos;
- }
-}
-
-void hdhomerun_pkt_write_var_length(struct hdhomerun_pkt_t *pkt, size_t v)
-{
- if (v <= 127) {
- *pkt->pos++ = (uint8_t)v;
- } else {
- *pkt->pos++ = (uint8_t)(v | 0x80);
- *pkt->pos++ = (uint8_t)(v >> 7);
- }
-
- if (pkt->pos > pkt->end) {
- pkt->end = pkt->pos;
- }
-}
-
-void hdhomerun_pkt_write_mem(struct hdhomerun_pkt_t *pkt, const void *mem, size_t length)
-{
- memcpy(pkt->pos, mem, length);
- pkt->pos += length;
-
- if (pkt->pos > pkt->end) {
- pkt->end = pkt->pos;
- }
-}
-
-int hdhomerun_pkt_open_frame(struct hdhomerun_pkt_t *pkt, uint16_t *ptype)
-{
- pkt->pos = pkt->start;
-
- if (pkt->pos + 4 > pkt->end) {
- return 0;
- }
-
- *ptype = hdhomerun_pkt_read_u16(pkt);
- size_t length = hdhomerun_pkt_read_u16(pkt);
- pkt->pos += length;
-
- if (pkt->pos + 4 > pkt->end) {
- pkt->pos = pkt->start;
- return 0;
- }
-
- uint32_t calc_crc = hdhomerun_pkt_calc_crc(pkt->start, pkt->pos);
-
- uint32_t packet_crc;
- packet_crc = (uint32_t)*pkt->pos++ << 0;
- packet_crc |= (uint32_t)*pkt->pos++ << 8;
- packet_crc |= (uint32_t)*pkt->pos++ << 16;
- packet_crc |= (uint32_t)*pkt->pos++ << 24;
- if (calc_crc != packet_crc) {
- return -1;
- }
-
- pkt->start += 4;
- pkt->end = pkt->start + length;
- pkt->pos = pkt->start;
- return 1;
-}
-
-void hdhomerun_pkt_seal_frame(struct hdhomerun_pkt_t *pkt, uint16_t frame_type)
-{
- size_t length = pkt->end - pkt->start;
-
- pkt->start -= 4;
- pkt->pos = pkt->start;
- hdhomerun_pkt_write_u16(pkt, frame_type);
- hdhomerun_pkt_write_u16(pkt, (uint16_t)length);
-
- uint32_t crc = hdhomerun_pkt_calc_crc(pkt->start, pkt->end);
- *pkt->end++ = (uint8_t)(crc >> 0);
- *pkt->end++ = (uint8_t)(crc >> 8);
- *pkt->end++ = (uint8_t)(crc >> 16);
- *pkt->end++ = (uint8_t)(crc >> 24);
-
- pkt->pos = pkt->start;
-}
diff --git a/lib/libhdhomerun/hdhomerun_pkt.h b/lib/libhdhomerun/hdhomerun_pkt.h
deleted file mode 100644
index 636a784f09..0000000000
--- a/lib/libhdhomerun/hdhomerun_pkt.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * hdhomerun_pkt.h
- *
- * Copyright © 2005-2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The discover protocol (UDP port 65001) and control protocol (TCP port 65001)
- * both use the same packet based format:
- * uint16_t Packet type
- * uint16_t Payload length (bytes)
- * uint8_t[] Payload data (0-n bytes).
- * uint32_t CRC (Ethernet style 32-bit CRC)
- *
- * All variables are big-endian except for the crc which is little-endian.
- *
- * Valid values for the packet type are listed below as defines prefixed
- * with "HDHOMERUN_TYPE_"
- *
- * Discovery:
- *
- * The payload for a discovery request or reply is a simple sequence of
- * tag-length-value data:
- * uint8_t Tag
- * varlen Length
- * uint8_t[] Value (0-n bytes)
- *
- * The length field can be one or two bytes long.
- * For a length <= 127 bytes the length is expressed as a single byte. The
- * most-significant-bit is clear indicating a single-byte length.
- * For a length >= 128 bytes the length is expressed as a sequence of two bytes as follows:
- * The first byte is contains the least-significant 7-bits of the length. The
- * most-significant bit is then set (add 0x80) to indicate that it is a two byte length.
- * The second byte contains the length shifted down 7 bits.
- *
- * A discovery request packet has a packet type of HDHOMERUN_TYPE_DISCOVER_REQ and should
- * contain two tags: HDHOMERUN_TAG_DEVICE_TYPE and HDHOMERUN_TAG_DEVICE_ID.
- * The HDHOMERUN_TAG_DEVICE_TYPE value should be set to HDHOMERUN_DEVICE_TYPE_TUNER.
- * The HDHOMERUN_TAG_DEVICE_ID value should be set to HDHOMERUN_DEVICE_ID_WILDCARD to match
- * all devices, or to the 32-bit device id number to match a single device.
- *
- * The discovery response packet has a packet type of HDHOMERUN_TYPE_DISCOVER_RPY and has the
- * same format as the discovery request packet with the two tags: HDHOMERUN_TAG_DEVICE_TYPE and
- * HDHOMERUN_TAG_DEVICE_ID. In the future additional tags may also be returned - unknown tags
- * should be skipped and not treated as an error.
- *
- * Control get/set:
- *
- * The payload for a control get/set request is a simple sequence of tag-length-value data
- * following the same format as for discover packets.
- *
- * A get request packet has a packet type of HDHOMERUN_TYPE_GETSET_REQ and should contain
- * the tag: HDHOMERUN_TAG_GETSET_NAME. The HDHOMERUN_TAG_GETSET_NAME value should be a sequence
- * of bytes forming a null-terminated string, including the NULL. The TLV length must include
- * the NULL character so the length field should be set to strlen(str) + 1.
- *
- * A set request packet has a packet type of HDHOMERUN_TYPE_GETSET_REQ (same as a get request)
- * and should contain two tags: HDHOMERUN_TAG_GETSET_NAME and HDHOMERUN_TAG_GETSET_VALUE.
- * The HDHOMERUN_TAG_GETSET_NAME value should be a sequence of bytes forming a null-terminated
- * string, including the NULL.
- * The HDHOMERUN_TAG_GETSET_VALUE value should be a sequence of bytes forming a null-terminated
- * string, including the NULL.
- *
- * The get and set reply packets have the packet type HDHOMERUN_TYPE_GETSET_RPY and have the same
- * format as the set request packet with the two tags: HDHOMERUN_TAG_GETSET_NAME and
- * HDHOMERUN_TAG_GETSET_VALUE. A set request is also implicit get request so the updated value is
- * returned.
- *
- * If the device encounters an error handling the get or set request then the get/set reply packet
- * will contain the tag HDHOMERUN_TAG_ERROR_MESSAGE. The format of the value is a sequence of
- * bytes forming a null-terminated string, including the NULL.
- *
- * In the future additional tags may also be returned - unknown tags should be skipped and not
- * treated as an error.
- *
- * Security note: The application should not rely on the NULL character being present. The
- * application should write a NULL character based on the TLV length to protect the application
- * from a potential attack.
- *
- * Firmware Upgrade:
- *
- * A firmware upgrade packet has a packet type of HDHOMERUN_TYPE_UPGRADE_REQ and has a fixed format:
- * uint32_t Position in bytes from start of file.
- * uint8_t[256] Firmware data (256 bytes)
- *
- * The data must be uploaded in 256 byte chunks and must be uploaded in order.
- * The position number is in bytes so will increment by 256 each time.
- *
- * When all data is uploaded it should be signaled complete by sending another packet of type
- * HDHOMERUN_TYPE_UPGRADE_REQ with payload of a single uint32_t with the value 0xFFFFFFFF.
- */
-
-#define HDHOMERUN_DISCOVER_UDP_PORT 65001
-#define HDHOMERUN_CONTROL_TCP_PORT 65001
-
-#define HDHOMERUN_MAX_PACKET_SIZE 1460
-#define HDHOMERUN_MAX_PAYLOAD_SIZE 1452
-
-#define HDHOMERUN_TYPE_DISCOVER_REQ 0x0002
-#define HDHOMERUN_TYPE_DISCOVER_RPY 0x0003
-#define HDHOMERUN_TYPE_GETSET_REQ 0x0004
-#define HDHOMERUN_TYPE_GETSET_RPY 0x0005
-#define HDHOMERUN_TYPE_UPGRADE_REQ 0x0006
-#define HDHOMERUN_TYPE_UPGRADE_RPY 0x0007
-
-#define HDHOMERUN_TAG_DEVICE_TYPE 0x01
-#define HDHOMERUN_TAG_DEVICE_ID 0x02
-#define HDHOMERUN_TAG_GETSET_NAME 0x03
-#define HDHOMERUN_TAG_GETSET_VALUE 0x04
-#define HDHOMERUN_TAG_GETSET_LOCKKEY 0x15
-#define HDHOMERUN_TAG_ERROR_MESSAGE 0x05
-
-#define HDHOMERUN_DEVICE_TYPE_WILDCARD 0xFFFFFFFF
-#define HDHOMERUN_DEVICE_TYPE_TUNER 0x00000001
-#define HDHOMERUN_DEVICE_ID_WILDCARD 0xFFFFFFFF
-
-#define HDHOMERUN_MIN_PEEK_LENGTH 4
-
-struct hdhomerun_pkt_t {
- uint8_t *pos;
- uint8_t *start;
- uint8_t *end;
- uint8_t *limit;
- uint8_t buffer[3074];
-};
-
-extern LIBTYPE struct hdhomerun_pkt_t *hdhomerun_pkt_create(void);
-extern LIBTYPE void hdhomerun_pkt_destroy(struct hdhomerun_pkt_t *pkt);
-extern LIBTYPE void hdhomerun_pkt_reset(struct hdhomerun_pkt_t *pkt);
-
-extern LIBTYPE uint8_t hdhomerun_pkt_read_u8(struct hdhomerun_pkt_t *pkt);
-extern LIBTYPE uint16_t hdhomerun_pkt_read_u16(struct hdhomerun_pkt_t *pkt);
-extern LIBTYPE uint32_t hdhomerun_pkt_read_u32(struct hdhomerun_pkt_t *pkt);
-extern LIBTYPE size_t hdhomerun_pkt_read_var_length(struct hdhomerun_pkt_t *pkt);
-extern LIBTYPE uint8_t *hdhomerun_pkt_read_tlv(struct hdhomerun_pkt_t *pkt, uint8_t *ptag, size_t *plength);
-
-extern LIBTYPE void hdhomerun_pkt_write_u8(struct hdhomerun_pkt_t *pkt, uint8_t v);
-extern LIBTYPE void hdhomerun_pkt_write_u16(struct hdhomerun_pkt_t *pkt, uint16_t v);
-extern LIBTYPE void hdhomerun_pkt_write_u32(struct hdhomerun_pkt_t *pkt, uint32_t v);
-extern LIBTYPE void hdhomerun_pkt_write_var_length(struct hdhomerun_pkt_t *pkt, size_t v);
-extern LIBTYPE void hdhomerun_pkt_write_mem(struct hdhomerun_pkt_t *pkt, const void *mem, size_t length);
-
-extern LIBTYPE bool_t hdhomerun_pkt_open_frame(struct hdhomerun_pkt_t *pkt, uint16_t *ptype);
-extern LIBTYPE void hdhomerun_pkt_seal_frame(struct hdhomerun_pkt_t *pkt, uint16_t frame_type);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/hdhomerun_types.h b/lib/libhdhomerun/hdhomerun_types.h
deleted file mode 100644
index fdc6a25bc1..0000000000
--- a/lib/libhdhomerun/hdhomerun_types.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * hdhomerun_types.h
- *
- * Copyright © 2008 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-struct hdhomerun_device_t;
-
-struct hdhomerun_tuner_status_t {
- char channel[32];
- char lock_str[32];
- bool_t signal_present;
- bool_t lock_supported;
- bool_t lock_unsupported;
- unsigned int signal_strength;
- unsigned int signal_to_noise_quality;
- unsigned int symbol_error_quality;
- uint32_t raw_bits_per_second;
- uint32_t packets_per_second;
-};
-
-struct hdhomerun_channelscan_program_t {
- char program_str[64];
- uint16_t program_number;
- uint16_t virtual_major;
- uint16_t virtual_minor;
- uint16_t type;
- char name[32];
-};
-
-#define HDHOMERUN_CHANNELSCAN_MAX_PROGRAM_COUNT 64
-
-struct hdhomerun_channelscan_result_t {
- char channel_str[64];
- uint32_t channelmap;
- uint32_t frequency;
- struct hdhomerun_tuner_status_t status;
- int program_count;
- struct hdhomerun_channelscan_program_t programs[HDHOMERUN_CHANNELSCAN_MAX_PROGRAM_COUNT];
- uint32_t pat_crc;
-};
-
-struct hdhomerun_plotsample_t {
- int16_t real;
- int16_t imag;
-};
diff --git a/lib/libhdhomerun/hdhomerun_video.c b/lib/libhdhomerun/hdhomerun_video.c
deleted file mode 100644
index c382c1d7dd..0000000000
--- a/lib/libhdhomerun/hdhomerun_video.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * hdhomerun_video.c
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-
-#include "hdhomerun.h"
-
-struct hdhomerun_video_sock_t {
- pthread_mutex_t lock;
- uint8_t *buffer;
- size_t buffer_size;
- volatile size_t head;
- volatile size_t tail;
- size_t advance;
- volatile bool_t terminate;
- pthread_t thread;
- int sock;
- uint32_t rtp_sequence;
- struct hdhomerun_debug_t *dbg;
- volatile uint32_t packet_count;
- volatile uint32_t transport_error_count;
- volatile uint32_t network_error_count;
- volatile uint32_t sequence_error_count;
- volatile uint32_t overflow_error_count;
- volatile uint8_t sequence[0x2000];
-};
-
-static THREAD_FUNC_PREFIX hdhomerun_video_thread_execute(void *arg);
-
-struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, size_t buffer_size, struct hdhomerun_debug_t *dbg)
-{
- /* Create object. */
- struct hdhomerun_video_sock_t *vs = (struct hdhomerun_video_sock_t *)calloc(1, sizeof(struct hdhomerun_video_sock_t));
- if (!vs) {
- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to allocate video object\n");
- return NULL;
- }
-
- vs->dbg = dbg;
- vs->sock = -1;
- pthread_mutex_init(&vs->lock, NULL);
-
- /* Reset sequence tracking. */
- hdhomerun_video_flush(vs);
-
- /* Buffer size. */
- vs->buffer_size = (buffer_size / VIDEO_DATA_PACKET_SIZE) * VIDEO_DATA_PACKET_SIZE;
- if (vs->buffer_size == 0) {
- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: invalid buffer size (%lu bytes)\n", (unsigned long)buffer_size);
- goto error;
- }
- vs->buffer_size += VIDEO_DATA_PACKET_SIZE;
-
- /* Create buffer. */
- vs->buffer = (uint8_t *)malloc(vs->buffer_size);
- if (!vs->buffer) {
- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to allocate buffer (%lu bytes)\n", (unsigned long)vs->buffer_size);
- goto error;
- }
-
- /* Create socket. */
- vs->sock = (int)socket(AF_INET, SOCK_DGRAM, 0);
- if (vs->sock == -1) {
- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to allocate socket\n");
- goto error;
- }
-
- /* Expand socket buffer size. */
- int rx_size = 1024 * 1024;
- setsockopt(vs->sock, SOL_SOCKET, SO_RCVBUF, (char *)&rx_size, sizeof(rx_size));
-
- /* Set timeouts. */
- setsocktimeout(vs->sock, SOL_SOCKET, SO_SNDTIMEO, 1000);
- setsocktimeout(vs->sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
-
- /* Bind socket. */
- struct sockaddr_in sock_addr;
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.sin_family = AF_INET;
- sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- sock_addr.sin_port = htons(listen_port);
- if (bind(vs->sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to bind socket (port %u)\n", listen_port);
- goto error;
- }
-
- /* Start thread. */
- if (pthread_create(&vs->thread, NULL, &hdhomerun_video_thread_execute, vs) != 0) {
- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to start thread\n");
- goto error;
- }
-
- /* Success. */
- return vs;
-
-error:
- if (vs->sock != -1) {
- close(vs->sock);
- }
- if (vs->buffer) {
- free(vs->buffer);
- }
- free(vs);
- return NULL;
-}
-
-void hdhomerun_video_destroy(struct hdhomerun_video_sock_t *vs)
-{
- vs->terminate = TRUE;
- pthread_join(vs->thread, NULL);
-
- close(vs->sock);
- free(vs->buffer);
-
- free(vs);
-}
-
-uint16_t hdhomerun_video_get_local_port(struct hdhomerun_video_sock_t *vs)
-{
- struct sockaddr_in sock_addr;
- socklen_t sockaddr_size = sizeof(sock_addr);
- if (getsockname(vs->sock, (struct sockaddr*)&sock_addr, &sockaddr_size) != 0) {
- hdhomerun_debug_printf(vs->dbg, "hdhomerun_video_get_local_port: getsockname failed (%d)\n", sock_getlasterror);
- return 0;
- }
-
- return ntohs(sock_addr.sin_port);
-}
-
-static void hdhomerun_video_stats_ts_pkt(struct hdhomerun_video_sock_t *vs, uint8_t *ptr)
-{
- uint16_t packet_identifier = ((uint16_t)(ptr[1] & 0x1F) << 8) | (uint16_t)ptr[2];
- if (packet_identifier == 0x1FFF) {
- return;
- }
-
- bool_t transport_error = ptr[1] >> 7;
- if (transport_error) {
- vs->transport_error_count++;
- vs->sequence[packet_identifier] = 0xFF;
- return;
- }
-
- uint8_t continuity_counter = ptr[3] & 0x0F;
- uint8_t previous_sequence = vs->sequence[packet_identifier];
-
- if (continuity_counter == ((previous_sequence + 1) & 0x0F)) {
- vs->sequence[packet_identifier] = continuity_counter;
- return;
- }
- if (previous_sequence == 0xFF) {
- vs->sequence[packet_identifier] = continuity_counter;
- return;
- }
- if (continuity_counter == previous_sequence) {
- return;
- }
-
- vs->sequence_error_count++;
- vs->sequence[packet_identifier] = continuity_counter;
-}
-
-static void hdhomerun_video_parse_rtp(struct hdhomerun_video_sock_t *vs, struct hdhomerun_pkt_t *pkt)
-{
- pkt->pos += 2;
- uint32_t rtp_sequence = hdhomerun_pkt_read_u16(pkt);
- pkt->pos += 8;
-
- if (rtp_sequence != ((vs->rtp_sequence + 1) & 0xFFFF)) {
- if (vs->rtp_sequence != 0xFFFFFFFF) {
- vs->network_error_count++;
-
- /* restart pid sequence check */
- memset((void *)vs->sequence, 0xFF, sizeof(vs->sequence));
- }
- }
-
- vs->rtp_sequence = rtp_sequence;
-}
-
-static THREAD_FUNC_PREFIX hdhomerun_video_thread_execute(void *arg)
-{
- struct hdhomerun_video_sock_t *vs = (struct hdhomerun_video_sock_t *)arg;
- struct hdhomerun_pkt_t pkt_inst;
-
- while (!vs->terminate) {
- struct hdhomerun_pkt_t *pkt = &pkt_inst;
- hdhomerun_pkt_reset(pkt);
-
- /* Receive. */
- int length = recv(vs->sock, (char *)pkt->end, VIDEO_RTP_DATA_PACKET_SIZE, 0);
- pkt->end += length;
-
- if (length == VIDEO_RTP_DATA_PACKET_SIZE) {
- hdhomerun_video_parse_rtp(vs, pkt);
- length = (int)(pkt->end - pkt->pos);
- }
-
- if (length != VIDEO_DATA_PACKET_SIZE) {
- if (length > 0) {
- /* Data received but not valid - ignore. */
- continue;
- }
- if (sock_getlasterror_socktimeout) {
- /* Wait for more data. */
- continue;
- }
- vs->terminate = TRUE;
- return NULL;
- }
-
- pthread_mutex_lock(&vs->lock);
-
- /* Store in ring buffer. */
- size_t head = vs->head;
- uint8_t *ptr = vs->buffer + head;
- memcpy(ptr, pkt->pos, length);
-
- /* Stats. */
- vs->packet_count++;
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 0);
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 1);
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 2);
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 3);
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 4);
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 5);
- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 6);
-
- /* Calculate new head. */
- head += length;
- if (head >= vs->buffer_size) {
- head -= vs->buffer_size;
- }
-
- /* Check for buffer overflow. */
- if (head == vs->tail) {
- vs->overflow_error_count++;
- pthread_mutex_unlock(&vs->lock);
- continue;
- }
-
- /* Atomic update. */
- vs->head = head;
-
- pthread_mutex_unlock(&vs->lock);
- }
-
- return NULL;
-}
-
-uint8_t *hdhomerun_video_recv(struct hdhomerun_video_sock_t *vs, size_t max_size, size_t *pactual_size)
-{
- pthread_mutex_lock(&vs->lock);
-
- size_t head = vs->head;
- size_t tail = vs->tail;
-
- if (vs->advance > 0) {
- tail += vs->advance;
- if (tail >= vs->buffer_size) {
- tail -= vs->buffer_size;
- }
-
- /* Atomic update. */
- vs->tail = tail;
- }
-
- if (head == tail) {
- vs->advance = 0;
- *pactual_size = 0;
- pthread_mutex_unlock(&vs->lock);
- return NULL;
- }
-
- size_t size = (max_size / VIDEO_DATA_PACKET_SIZE) * VIDEO_DATA_PACKET_SIZE;
- if (size == 0) {
- vs->advance = 0;
- *pactual_size = 0;
- pthread_mutex_unlock(&vs->lock);
- return NULL;
- }
-
- size_t avail;
- if (head > tail) {
- avail = head - tail;
- } else {
- avail = vs->buffer_size - tail;
- }
- if (size > avail) {
- size = avail;
- }
- vs->advance = size;
- *pactual_size = size;
- uint8_t *result = vs->buffer + tail;
-
- pthread_mutex_unlock(&vs->lock);
- return result;
-}
-
-void hdhomerun_video_flush(struct hdhomerun_video_sock_t *vs)
-{
- pthread_mutex_lock(&vs->lock);
-
- vs->tail = vs->head;
- vs->advance = 0;
-
- memset((void *)vs->sequence, 0xFF, sizeof(vs->sequence));
-
- vs->rtp_sequence = 0xFFFFFFFF;
-
- vs->packet_count = 0;
- vs->transport_error_count = 0;
- vs->network_error_count = 0;
- vs->sequence_error_count = 0;
- vs->overflow_error_count = 0;
-
- pthread_mutex_unlock(&vs->lock);
-}
-
-void hdhomerun_video_debug_print_stats(struct hdhomerun_video_sock_t *vs)
-{
- struct hdhomerun_video_stats_t stats;
- hdhomerun_video_get_stats(vs, &stats);
-
- hdhomerun_debug_printf(vs->dbg, "video sock: pkt=%ld net=%ld te=%ld miss=%ld drop=%ld\n",
- stats.packet_count, stats.network_error_count,
- stats.transport_error_count, stats.sequence_error_count,
- stats.overflow_error_count
- );
-}
-
-void hdhomerun_video_get_stats(struct hdhomerun_video_sock_t *vs, struct hdhomerun_video_stats_t *stats)
-{
- memset(stats, 0, sizeof(struct hdhomerun_video_stats_t));
-
- pthread_mutex_lock(&vs->lock);
-
- stats->packet_count = vs->packet_count;
- stats->network_error_count = vs->network_error_count;
- stats->transport_error_count = vs->transport_error_count;
- stats->sequence_error_count = vs->sequence_error_count;
- stats->overflow_error_count = vs->overflow_error_count;
-
- pthread_mutex_unlock(&vs->lock);
-}
diff --git a/lib/libhdhomerun/hdhomerun_video.h b/lib/libhdhomerun/hdhomerun_video.h
deleted file mode 100644
index 3dba938636..0000000000
--- a/lib/libhdhomerun/hdhomerun_video.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * hdhomerun_video.h
- *
- * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * As a special exception to the GNU Lesser General Public License,
- * you may link, statically or dynamically, an application with a
- * publicly distributed version of the Library to produce an
- * executable file containing portions of the Library, and
- * distribute that executable file under terms of your choice,
- * without any of the additional requirements listed in clause 4 of
- * the GNU Lesser General Public License.
- *
- * By "a publicly distributed version of the Library", we mean
- * either the unmodified Library as distributed by Silicondust, or a
- * modified version of the Library that is distributed under the
- * conditions defined in the GNU Lesser General Public License.
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct hdhomerun_video_sock_t;
-
-struct hdhomerun_video_stats_t {
- uint32_t packet_count;
- uint32_t network_error_count;
- uint32_t transport_error_count;
- uint32_t sequence_error_count;
- uint32_t overflow_error_count;
-};
-
-#define TS_PACKET_SIZE 188
-#define VIDEO_DATA_PACKET_SIZE (188 * 7)
-#define VIDEO_DATA_BUFFER_SIZE_1S (20000000 / 8)
-
-#define VIDEO_RTP_DATA_PACKET_SIZE ((188 * 7) + 12)
-
-/*
- * Create a video/data socket.
- *
- * uint16_t listen_port: Port number to listen on. Set to 0 to auto-select.
- * size_t buffer_size: Size of receive buffer. For 1 second of buffer use VIDEO_DATA_BUFFER_SIZE_1S.
- * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL.
- *
- * Returns a pointer to the newly created control socket.
- *
- * When no longer needed, the socket should be destroyed by calling hdhomerun_control_destroy.
- */
-extern LIBTYPE struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, size_t buffer_size, struct hdhomerun_debug_t *dbg);
-extern LIBTYPE void hdhomerun_video_destroy(struct hdhomerun_video_sock_t *vs);
-
-/*
- * Get the port the socket is listening on.
- *
- * Returns 16-bit port with native endianness, or 0 on error.
- */
-extern LIBTYPE uint16_t hdhomerun_video_get_local_port(struct hdhomerun_video_sock_t *vs);
-
-/*
- * Read data from buffer.
- *
- * size_t max_size: The maximum amount of data to be returned.
- * size_t *pactual_size: The caller-supplied pactual_size value will be updated to contain the amount
- * of data available to the caller.
- *
- * Returns a pointer to the data, or NULL if no data is available.
- * The data will remain valid until another call to hdhomerun_video_recv.
- *
- * The amount of data returned will always be a multiple of VIDEO_DATA_PACKET_SIZE (1316).
- * Attempting to read a single TS frame (188 bytes) will not return data as it is less than
- * the minimum size.
- *
- * The buffer is implemented as a ring buffer. It is possible for this function to return a small
- * amount of data when more is available due to the wrap-around case.
- */
-extern LIBTYPE uint8_t *hdhomerun_video_recv(struct hdhomerun_video_sock_t *vs, size_t max_size, size_t *pactual_size);
-
-/*
- * Flush the buffer.
- */
-extern LIBTYPE void hdhomerun_video_flush(struct hdhomerun_video_sock_t *vs);
-
-/*
- * Debug print internal stats.
- */
-extern LIBTYPE void hdhomerun_video_debug_print_stats(struct hdhomerun_video_sock_t *vs);
-extern LIBTYPE void hdhomerun_video_get_stats(struct hdhomerun_video_sock_t *vs, struct hdhomerun_video_stats_t *stats);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/libhdhomerun/lgpl.txt b/lib/libhdhomerun/lgpl.txt
deleted file mode 100644
index fc8a5de7ed..0000000000
--- a/lib/libhdhomerun/lgpl.txt
+++ /dev/null
@@ -1,165 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
- 0. Additional Definitions.
-
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
- 1. Exception to Section 3 of the GNU GPL.
-
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
- 2. Conveying Modified Versions.
-
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
-
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
-
- 3. Object Code Incorporating Material from Library Header Files.
-
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
-
- 4. Combined Works.
-
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
-
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
-
- d) Do one of the following:
-
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
-
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
-
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
-
- 5. Combined Libraries.
-
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
-
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
-
- 6. Revised Versions of the GNU Lesser General Public License.
-
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
diff --git a/project/VS2010Express/XBMC for Windows.sln b/project/VS2010Express/XBMC for Windows.sln
index 30e0fdf5e5..0f4a94d634 100644
--- a/project/VS2010Express/XBMC for Windows.sln
+++ b/project/VS2010Express/XBMC for Windows.sln
@@ -42,8 +42,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "squish", "..\..\tools\depen
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cpluff", "..\..\lib\cpluff\libcpluff\win32\cpluff.vcxproj", "{88968763-3D6B-48A8-B495-CC8C187FAC02}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhdhomerun_dll", "..\..\lib\libhdhomerun\hdhomerun\hdhomerun.vcxproj", "{1E2FB608-3DD2-4021-A598-90008FA6DE85}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libXBMC_addon", "..\..\lib\addons\library.xbmc.addon\project\VS2010Express\libXBMC_addon.vcxproj", "{2DCEA60B-4EBC-4DB7-9FBD-297C1EFD95D7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libKODI_guilib", "..\..\lib\addons\library.kodi.guilib\project\VS2010Express\libKODI_guilib.vcxproj", "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"
diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj
index 7c7a09862d..7166ea628b 100644
--- a/project/VS2010Express/XBMC.vcxproj
+++ b/project/VS2010Express/XBMC.vcxproj
@@ -332,8 +332,6 @@
<ClCompile Include="..\..\xbmc\filesystem\FileReaderFile.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\FTPDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\FTPParse.cpp" />
- <ClCompile Include="..\..\xbmc\filesystem\HDHomeRunDirectory.cpp" />
- <ClCompile Include="..\..\xbmc\filesystem\HDHomeRunFile.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\HTTPDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\HTTPFile.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\IDirectory.cpp" />
@@ -1117,8 +1115,6 @@
<ClInclude Include="..\..\xbmc\filesystem\FileReaderFile.h" />
<ClInclude Include="..\..\xbmc\filesystem\FTPDirectory.h" />
<ClInclude Include="..\..\xbmc\filesystem\FTPParse.h" />
- <ClInclude Include="..\..\xbmc\filesystem\HDHomeRunDirectory.h" />
- <ClInclude Include="..\..\xbmc\filesystem\HDHomeRunFile.h" />
<ClInclude Include="..\..\xbmc\filesystem\HTTPDirectory.h" />
<ClInclude Include="..\..\xbmc\filesystem\IDirectory.h" />
<ClInclude Include="..\..\xbmc\filesystem\IFile.h" />
diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters
index 411d6dce18..8f33c7e7bf 100644
--- a/project/VS2010Express/XBMC.vcxproj.filters
+++ b/project/VS2010Express/XBMC.vcxproj.filters
@@ -1972,12 +1972,6 @@
<ClCompile Include="..\..\xbmc\filesystem\FTPParse.cpp">
<Filter>filesystem</Filter>
</ClCompile>
- <ClCompile Include="..\..\xbmc\filesystem\HDHomeRunDirectory.cpp">
- <Filter>filesystem</Filter>
- </ClCompile>
- <ClCompile Include="..\..\xbmc\filesystem\HDHomeRunFile.cpp">
- <Filter>filesystem</Filter>
- </ClCompile>
<ClCompile Include="..\..\xbmc\filesystem\HTTPDirectory.cpp">
<Filter>filesystem</Filter>
</ClCompile>
@@ -4894,12 +4888,6 @@
<ClInclude Include="..\..\xbmc\filesystem\FTPParse.h">
<Filter>filesystem</Filter>
</ClInclude>
- <ClInclude Include="..\..\xbmc\filesystem\HDHomeRunDirectory.h">
- <Filter>filesystem</Filter>
- </ClInclude>
- <ClInclude Include="..\..\xbmc\filesystem\HDHomeRunFile.h">
- <Filter>filesystem</Filter>
- </ClInclude>
<ClInclude Include="..\..\xbmc\filesystem\HTTPDirectory.h">
<Filter>filesystem</Filter>
</ClInclude>
diff --git a/system/playercorefactory.xml b/system/playercorefactory.xml
index cff5d8be46..df0e42f1f3 100644
--- a/system/playercorefactory.xml
+++ b/system/playercorefactory.xml
@@ -11,7 +11,7 @@
</players>
<rules name="system rules">
- <rule name="hdhomerun/mms/udp" protocols="hdhomerun|mms|mmsh|udp" player="DVDPlayer" />
+ <rule name="mms/udp" protocols="mms|mmsh|udp" player="DVDPlayer" />
<rule name="lastfm/shout" protocols="lastfm|shout" player="PAPlayer" />
<rule name="rtmp" protocols="rtmp" player="videodefaultplayer" />
diff --git a/xbmc/DllPaths_generated.h.in b/xbmc/DllPaths_generated.h.in
index c92a8bd1ec..262d485669 100644
--- a/xbmc/DllPaths_generated.h.in
+++ b/xbmc/DllPaths_generated.h.in
@@ -28,7 +28,6 @@
#define DLL_PATH_CPLUFF "special://xbmcbin/system/libcpluff-@ARCH@.so"
#define DLL_PATH_IMAGELIB "special://xbmcbin/system/ImageLib-@ARCH@.so"
#define DLL_PATH_LIBEXIF "special://xbmcbin/system/libexif-@ARCH@.so"
-#define DLL_PATH_LIBHDHOMERUN "special://xbmcbin/system/hdhomerun-@ARCH@.so"
#define DLL_PATH_MEDIAINFO "special://xbmcbin/system/mediainfo-@ARCH@.so"
#define DLL_PATH_LIBRTMP "@RTMP_SONAME@"
diff --git a/xbmc/DllPaths_generated_android.h.in b/xbmc/DllPaths_generated_android.h.in
index 4369a7093c..ffe9f61016 100644
--- a/xbmc/DllPaths_generated_android.h.in
+++ b/xbmc/DllPaths_generated_android.h.in
@@ -30,7 +30,6 @@
#define DLL_PATH_CPLUFF "libcpluff-@ARCH@.so"
#define DLL_PATH_IMAGELIB "libImageLib-@ARCH@.so"
#define DLL_PATH_LIBEXIF "libexif-@ARCH@.so"
-#define DLL_PATH_LIBHDHOMERUN "libhdhomerun-@ARCH@.so"
#define DLL_PATH_MEDIAINFO "libmediainfo-@ARCH@.so"
#define DLL_PATH_LIBRTMP "@RTMP_SONAME@"
diff --git a/xbmc/DllPaths_win32.h b/xbmc/DllPaths_win32.h
index c5026ac2a1..aa4d199731 100644
--- a/xbmc/DllPaths_win32.h
+++ b/xbmc/DllPaths_win32.h
@@ -25,7 +25,6 @@
#define DLL_PATH_CPLUFF "special://xbmcbin/system/cpluff.dll"
#define DLL_PATH_IMAGELIB "special://xbmcbin/system/ImageLib.dll"
#define DLL_PATH_LIBEXIF "special://xbmcbin/system/libexif.dll"
-#define DLL_PATH_LIBHDHOMERUN "special://xbmcbin/system/hdhomerun.dll"
#define DLL_PATH_LIBCURL "special://xbmcbin/system/libcurl.dll"
#define DLL_PATH_LIBNFS "special://xbmcbin/system/libnfs.dll"
#define DLL_PATH_LIBPLIST "special://xbmcbin/system/airplay/libplist.dll"
diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp
index c9027d0f4c..d9ce925386 100644
--- a/xbmc/FileItem.cpp
+++ b/xbmc/FileItem.cpp
@@ -693,7 +693,7 @@ bool CFileItem::IsVideo() const
if (IsPVRRecording())
return true;
- if (IsHDHomeRun() || URIUtils::IsDVD(m_strPath) || IsSlingbox())
+ if (URIUtils::IsDVD(m_strPath) || IsSlingbox())
return true;
std::string extension;
@@ -1051,11 +1051,6 @@ bool CFileItem::IsURL() const
return URIUtils::IsURL(m_strPath);
}
-bool CFileItem::IsHDHomeRun() const
-{
- return URIUtils::IsHDHomeRun(m_strPath);
-}
-
bool CFileItem::IsSlingbox() const
{
return URIUtils::IsSlingbox(m_strPath);
diff --git a/xbmc/FileItem.h b/xbmc/FileItem.h
index 6824017b5a..97f7ace4fe 100644
--- a/xbmc/FileItem.h
+++ b/xbmc/FileItem.h
@@ -220,7 +220,6 @@ public:
bool IsParentFolder() const;
bool IsFileFolder(EFileFolderType types = EFILEFOLDER_MASK_ALL) const;
bool IsRemovable() const;
- bool IsHDHomeRun() const;
bool IsSlingbox() const;
bool IsPVR() const;
bool IsLiveTV() const;
diff --git a/xbmc/URL.cpp b/xbmc/URL.cpp
index 9eec70bb7e..6026f56c20 100644
--- a/xbmc/URL.cpp
+++ b/xbmc/URL.cpp
@@ -183,7 +183,6 @@ void CURL::Parse(const std::string& strURL1)
|| IsProtocolEqual(strProtocol2, "https")
|| IsProtocolEqual(strProtocol2, "plugin")
|| IsProtocolEqual(strProtocol2, "addons")
- || IsProtocolEqual(strProtocol2, "hdhomerun")
|| IsProtocolEqual(strProtocol2, "rtsp"))
sep = "?;#|";
else if(IsProtocolEqual(strProtocol2, "ftp")
diff --git a/xbmc/Util.cpp b/xbmc/Util.cpp
index 5a22917bfe..bc34de46a6 100644
--- a/xbmc/Util.cpp
+++ b/xbmc/Util.cpp
@@ -167,10 +167,6 @@ std::string CUtil::GetTitleFromPath(const CURL& url, bool bIsFolder /* = false *
strFilename = url.GetHostName();
}
}
- // HDHomerun Devices
- else if (url.IsProtocol("hdhomerun") && strFilename.empty())
- strFilename = "HDHomerun Devices";
-
// Slingbox Devices
else if (url.IsProtocol("sling"))
strFilename = "Slingbox";
@@ -432,10 +428,6 @@ bool CUtil::IsLiveTV(const std::string& strFile)
if (StringUtils::StartsWithNoCase(strFile, "pvr://channels"))
return true;
- if(URIUtils::IsHDHomeRun(strFile)
- || StringUtils::StartsWithNoCase(strFile, "sap:"))
- return true;
-
return false;
}
@@ -1716,7 +1708,6 @@ void CUtil::ScanForExternalSubtitles(const std::string& strMovie, std::vector<st
CFileItem item(strMovie, false);
if ( item.IsInternetStream()
- || item.IsHDHomeRun()
|| item.IsSlingbox()
|| item.IsPlayList()
|| item.IsLiveTV()
diff --git a/xbmc/dialogs/GUIDialogMediaSource.cpp b/xbmc/dialogs/GUIDialogMediaSource.cpp
index 45237cc3c7..53acb3c272 100644
--- a/xbmc/dialogs/GUIDialogMediaSource.cpp
+++ b/xbmc/dialogs/GUIDialogMediaSource.cpp
@@ -283,10 +283,6 @@ void CGUIDialogMediaSource::OnPathBrowse(int item)
share1.strName = g_localizeStrings.Get(20012);
extraShares.push_back(share1);
- share1.strPath = "hdhomerun://";
- share1.strName = StringUtils::Format(strDevices.c_str(), "HDHomerun"); //"HDHomerun Devices"
- extraShares.push_back(share1);
-
share1.strPath = "sap://";
share1.strName = StringUtils::Format(strStreams.c_str(), "SAP"); //"SAP Streams"
extraShares.push_back(share1);
diff --git a/xbmc/filesystem/DirectoryFactory.cpp b/xbmc/filesystem/DirectoryFactory.cpp
index 052ac09670..f271e2bc36 100644
--- a/xbmc/filesystem/DirectoryFactory.cpp
+++ b/xbmc/filesystem/DirectoryFactory.cpp
@@ -80,7 +80,6 @@
#ifdef HAS_FILESYSTEM_RAR
#include "RarDirectory.h"
#endif
-#include "HDHomeRunDirectory.h"
#include "SlingboxDirectory.h"
#include "FileItem.h"
#include "URL.h"
@@ -189,7 +188,6 @@ IDirectory* CDirectoryFactory::Create(const CURL& url)
#ifdef HAS_UPNP
if (url.IsProtocol("upnp")) return new CUPnPDirectory();
#endif
- if (url.IsProtocol("hdhomerun")) return new CHomeRunDirectory();
if (url.IsProtocol("sling")) return new CSlingboxDirectory();
if (url.IsProtocol("rss")) return new CRSSDirectory();
#ifdef HAS_FILESYSTEM_SAP
diff --git a/xbmc/filesystem/DllHDHomeRun.h b/xbmc/filesystem/DllHDHomeRun.h
deleted file mode 100644
index 150b00fae3..0000000000
--- a/xbmc/filesystem/DllHDHomeRun.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#pragma once
-/*
- * Copyright (C) 2005-2013 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "DynamicDll.h"
-#include "lib/libhdhomerun/hdhomerun.h"
-
-class DllHdHomeRunInterface
-{
-public:
- virtual ~DllHdHomeRunInterface() {}
- virtual int discover_find_devices_custom(uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count)=0;
- virtual struct hdhomerun_device_t* device_create_from_str(const char *device_str, struct hdhomerun_debug_t *dbg)=0;
- virtual void device_destroy(struct hdhomerun_device_t *hd)=0;
- virtual int device_stream_start(struct hdhomerun_device_t *hd)=0;
- virtual uint8_t* device_stream_recv(struct hdhomerun_device_t *hd, size_t max_size, size_t* pactual_size)=0;
- virtual void device_stream_stop(struct hdhomerun_device_t *hd)=0;
- virtual int device_set_tuner_channel(struct hdhomerun_device_t *hd, const char *channel)=0;
- virtual int device_set_tuner_program(struct hdhomerun_device_t *hd, const char *program)=0;
- virtual int device_set_tuner_from_str(struct hdhomerun_device_t *hd, const char *tuner_str)=0;
- virtual void device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner)=0;
- virtual int device_get_tuner_status(struct hdhomerun_device_t *hd, char **pstatus_str, struct hdhomerun_tuner_status_t *status)=0;
-};
-
-class DllHdHomeRun : public DllDynamic, public DllHdHomeRunInterface
-{
- DECLARE_DLL_WRAPPER(DllHdHomeRun, DLL_PATH_LIBHDHOMERUN)
- DEFINE_METHOD5(int, discover_find_devices_custom, (uint32_t p1, uint32_t p2, uint32_t p3, struct hdhomerun_discover_device_t p4[], int p5))
- DEFINE_METHOD2(struct hdhomerun_device_t*, device_create_from_str, (const char* p1, struct hdhomerun_debug_t *p2))
- DEFINE_METHOD1(void, device_destroy, (struct hdhomerun_device_t* p1))
- DEFINE_METHOD1(int, device_stream_start, (struct hdhomerun_device_t* p1))
- DEFINE_METHOD3(uint8_t*, device_stream_recv, (struct hdhomerun_device_t* p1, size_t p2, size_t* p3))
- DEFINE_METHOD1(void, device_stream_stop, (struct hdhomerun_device_t* p1))
- DEFINE_METHOD2(int, device_set_tuner_channel, (struct hdhomerun_device_t *p1, const char *p2))
- DEFINE_METHOD2(int, device_set_tuner_program, (struct hdhomerun_device_t *p1, const char *p2))
- DEFINE_METHOD2(int, device_set_tuner_from_str, (struct hdhomerun_device_t *p1, const char *p2))
- DEFINE_METHOD2(void, device_set_tuner, (struct hdhomerun_device_t *p1, unsigned int p2))
- DEFINE_METHOD3(int, device_get_tuner_status, (struct hdhomerun_device_t *p1, char **p2, struct hdhomerun_tuner_status_t *p3));
- BEGIN_METHOD_RESOLVE()
- RESOLVE_METHOD_RENAME(hdhomerun_discover_find_devices_custom, discover_find_devices_custom)
- RESOLVE_METHOD_RENAME(hdhomerun_device_create_from_str, device_create_from_str)
- RESOLVE_METHOD_RENAME(hdhomerun_device_destroy, device_destroy)
- RESOLVE_METHOD_RENAME(hdhomerun_device_stream_start, device_stream_start)
- RESOLVE_METHOD_RENAME(hdhomerun_device_stream_recv, device_stream_recv)
- RESOLVE_METHOD_RENAME(hdhomerun_device_stream_stop, device_stream_stop)
- RESOLVE_METHOD_RENAME(hdhomerun_device_set_tuner_channel, device_set_tuner_channel)
- RESOLVE_METHOD_RENAME(hdhomerun_device_set_tuner_program, device_set_tuner_program)
- RESOLVE_METHOD_RENAME(hdhomerun_device_set_tuner_from_str, device_set_tuner_from_str)
- RESOLVE_METHOD_RENAME(hdhomerun_device_set_tuner, device_set_tuner)
- RESOLVE_METHOD_RENAME(hdhomerun_device_get_tuner_status, device_get_tuner_status)
- END_METHOD_RESOLVE()
-};
-
diff --git a/xbmc/filesystem/FileFactory.cpp b/xbmc/filesystem/FileFactory.cpp
index c34bd13d65..644eb90c7f 100644
--- a/xbmc/filesystem/FileFactory.cpp
+++ b/xbmc/filesystem/FileFactory.cpp
@@ -80,7 +80,6 @@
#include "SpecialProtocolFile.h"
#include "MultiPathFile.h"
#include "UDFFile.h"
-#include "HDHomeRunFile.h"
#include "SlingboxFile.h"
#include "ImageFile.h"
#include "ResourceFile.h"
@@ -156,7 +155,6 @@ IFile* CFileFactory::CreateLoader(const CURL& url)
else if (url.IsProtocol("sftp") || url.IsProtocol("ssh")) return new CSFTPFile();
#endif
else if (url.IsProtocol("shout")) return new CShoutcastFile();
- else if (url.IsProtocol("hdhomerun")) return new CHomeRunFile();
else if (url.IsProtocol("sling")) return new CSlingboxFile();
#ifdef HAS_FILESYSTEM_SMB
#ifdef TARGET_WINDOWS
diff --git a/xbmc/filesystem/HDHomeRunDirectory.cpp b/xbmc/filesystem/HDHomeRunDirectory.cpp
deleted file mode 100644
index b52a44f58f..0000000000
--- a/xbmc/filesystem/HDHomeRunDirectory.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2011-2013 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "HDHomeRunDirectory.h"
-#include "URL.h"
-#include "FileItem.h"
-#include "utils/URIUtils.h"
-#include "utils/StringUtils.h"
-#include "DllHDHomeRun.h"
-
-using namespace XFILE;
-using namespace std;
-
-// -------------------------------------------
-// ---------------- Directory ----------------
-// -------------------------------------------
-
-CHomeRunDirectory::CHomeRunDirectory()
-{
- m_pdll = new DllHdHomeRun;
- m_pdll->Load();
-}
-
-CHomeRunDirectory::~CHomeRunDirectory()
-{
- m_pdll->Unload();
- delete m_pdll;
-}
-
-bool CHomeRunDirectory::GetDirectory(const CURL& url, CFileItemList &items)
-{
- if(!m_pdll->IsLoaded())
- return false;
-
- if(url.GetHostName().empty())
- {
- // no hostname, list all available devices
- int target_ip = 0;
- struct hdhomerun_discover_device_t result_list[64];
- int count = m_pdll->discover_find_devices_custom(target_ip, HDHOMERUN_DEVICE_TYPE_TUNER, HDHOMERUN_DEVICE_ID_WILDCARD, result_list, 64);
- if (count < 0)
- return false;
-
- for(int i=0;i<count;i++)
- {
- CFileItemPtr item;
- unsigned int ip_addr = result_list[i].ip_addr;
-
- std::string device = StringUtils::Format("%x", result_list[i].device_id);
- std::string ip = StringUtils::Format("%u.%u.%u.%u",
- (unsigned int)(ip_addr >> 24) & 0xFF, (unsigned int)(ip_addr >> 16) & 0xFF,
- (unsigned int)(ip_addr >> 8) & 0xFF, (unsigned int)(ip_addr >> 0) & 0xFF);
-
- item.reset(new CFileItem("hdhomerun://" + device + "/tuner0/", true));
- item->SetLabel(device + "-0 On " + ip);
- item->SetLabelPreformated(true);
- items.Add(item);
-
- item.reset(new CFileItem("hdhomerun://" + device + "/tuner1/", true));
- item->SetLabel(device + "-1 On " + ip);
- item->SetLabelPreformated(true);
- items.Add(item);
- }
- return true;
- }
- else
- {
- hdhomerun_device_t* device = m_pdll->device_create_from_str(url.GetHostName().c_str(), NULL);
- if(!device)
- return false;
-
- m_pdll->device_set_tuner_from_str(device, url.GetFileName().c_str());
-
- hdhomerun_tuner_status_t status;
- if(!m_pdll->device_get_tuner_status(device, NULL, &status))
- {
- m_pdll->device_destroy(device);
- return true;
- }
-
- std::string label;
- if(status.signal_present)
- label = StringUtils::Format("Current Stream: N/A");
- else
- label = StringUtils::Format("Current Stream: Channel %s, SNR %d", status.channel, status.signal_to_noise_quality);
-
- std::string path = "hdhomerun://" + url.GetHostName() + "/" + url.GetFileName();
- URIUtils::RemoveSlashAtEnd(path);
- CFileItemPtr item(new CFileItem(path, false));
- item->SetLabel(label);
- item->SetLabelPreformated(true);
- items.Add(item);
-
- m_pdll->device_destroy(device);
- return true;
- }
-
- return false;
-}
diff --git a/xbmc/filesystem/HDHomeRunDirectory.h b/xbmc/filesystem/HDHomeRunDirectory.h
deleted file mode 100644
index 55a80bbbe9..0000000000
--- a/xbmc/filesystem/HDHomeRunDirectory.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#pragma once
-/*
- * Copyright (C) 2011-2013 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
- #include "IDirectory.h"
-
-class DllHdHomeRun;
-
-namespace XFILE
-{
- class CHomeRunDirectory : public IDirectory
- {
- public:
- CHomeRunDirectory(void);
- virtual ~CHomeRunDirectory(void);
- virtual bool AllowAll() const { return true; }
- virtual bool GetDirectory(const CURL& url, CFileItemList &items);
- private:
- DllHdHomeRun* m_pdll;
- };
-}
diff --git a/xbmc/filesystem/HDHomeRunFile.cpp b/xbmc/filesystem/HDHomeRunFile.cpp
deleted file mode 100644
index 746aaa6a78..0000000000
--- a/xbmc/filesystem/HDHomeRunFile.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2011-2013 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "threads/SystemClock.h"
-#include "system.h"
-#include "URL.h"
-#include "FileItem.h"
-#include "HDHomeRunFile.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/URIUtils.h"
-#include "DllHDHomeRun.h"
-
-using namespace XFILE;
-using namespace std;
-
-// -------------------------------------------
-// ------------------ File -------------------
-// -------------------------------------------
-CHomeRunFile::CHomeRunFile()
-{
- m_device = NULL;
- m_pdll = new DllHdHomeRun;
- m_pdll->Load();
-}
-
-CHomeRunFile::~CHomeRunFile()
-{
- Close();
- delete m_pdll;
-}
-
-bool CHomeRunFile::Exists(const CURL& url)
-{
- std::string path(url.GetFileName());
-
- /*
- * HDHomeRun URLs are of the form hdhomerun://1014F6D1/tuner0?channel=qam:108&program=10
- * The filename starts with "tuner" and has no extension. This check will cover off requests
- * for *.tbn, *.jpg, *.jpeg, *.edl etc. that do not exist.
- */
- return StringUtils::StartsWith(path, "tuner") &&
- !URIUtils::HasExtension(path);
-}
-
-int64_t CHomeRunFile::Seek(int64_t iFilePosition, int iWhence)
-{
- return -1;
-}
-
-int CHomeRunFile::Stat(const CURL& url, struct __stat64* buffer)
-{
- memset(buffer, 0, sizeof(struct __stat64));
- return 0;
-}
-
-int64_t CHomeRunFile::GetPosition()
-{
- return 0;
-}
-
-int64_t CHomeRunFile::GetLength()
-{
- return 0;
-}
-
-bool CHomeRunFile::Open(const CURL &url)
-{
- if(!m_pdll->IsLoaded())
- return false;
-
- m_device = m_pdll->device_create_from_str(url.GetHostName().c_str(), NULL);
- if(!m_device)
- return false;
-
- m_pdll->device_set_tuner_from_str(m_device, url.GetFileName().c_str());
-
- if(url.HasOption("channel"))
- m_pdll->device_set_tuner_channel(m_device, url.GetOption("channel").c_str());
-
- if(url.HasOption("program"))
- m_pdll->device_set_tuner_program(m_device, url.GetOption("program").c_str());
-
- // start streaming from selected device and tuner
- if( m_pdll->device_stream_start(m_device) <= 0 )
- return false;
-
- return true;
-}
-
-ssize_t CHomeRunFile::Read(void* lpBuf, size_t uiBufSize)
-{
- if (uiBufSize > SSIZE_MAX)
- uiBufSize = SSIZE_MAX;
-
- size_t datasize;
-
- if(uiBufSize < VIDEO_DATA_PACKET_SIZE)
- CLog::Log(LOGWARNING, "CHomeRunFile::Read - buffer size too small, will most likely fail");
-
- // for now, let it it time out after 5 seconds,
- // neither of the players can be forced to
- // continue even if read return 0 as can happen
- // on live streams.
- XbmcThreads::EndTime timestamp(5000);
- while(1)
- {
- datasize = (size_t) uiBufSize;
- uint8_t* ptr = m_pdll->device_stream_recv(m_device, datasize, &datasize);
- if(ptr)
- {
- memcpy(lpBuf, ptr, datasize);
- return datasize;
- }
-
- if(timestamp.IsTimePast())
- return 0;
-
- Sleep(64);
- }
- return datasize;
-}
-
-void CHomeRunFile::Close()
-{
- if(m_device)
- {
- m_pdll->device_stream_stop(m_device);
- m_pdll->device_destroy(m_device);
- m_device = NULL;
- }
-}
-
-int CHomeRunFile::GetChunkSize()
-{
- return VIDEO_DATA_PACKET_SIZE;
-}
diff --git a/xbmc/filesystem/HDHomeRunFile.h b/xbmc/filesystem/HDHomeRunFile.h
deleted file mode 100644
index 0c1be66891..0000000000
--- a/xbmc/filesystem/HDHomeRunFile.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#pragma once
-/*
- * Copyright (C) 2011-2013 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "IFile.h"
-
-struct hdhomerun_device_t;
-class DllHdHomeRun;
-
-namespace XFILE
-{
- class CHomeRunFile : public IFile
- {
- public:
- CHomeRunFile();
- ~CHomeRunFile();
-
- virtual bool Exists(const CURL& url);
- virtual int64_t Seek(int64_t iFilePosition, int iWhence);
- virtual int Stat(const CURL& url, struct __stat64* buffer);
- virtual int64_t GetPosition();
- virtual int64_t GetLength();
-
- virtual bool Open(const CURL& url);
- virtual void Close();
- virtual ssize_t Read(void* lpBuf, size_t uiBufSize);
- virtual int GetChunkSize();
- private:
- struct hdhomerun_device_t* m_device;
- DllHdHomeRun* m_pdll;
- };
-}
diff --git a/xbmc/filesystem/Makefile.in b/xbmc/filesystem/Makefile.in
index 541b53b5be..4e689aa693 100644
--- a/xbmc/filesystem/Makefile.in
+++ b/xbmc/filesystem/Makefile.in
@@ -22,8 +22,6 @@ SRCS += FileFactory.cpp
SRCS += FileReaderFile.cpp
SRCS += FTPDirectory.cpp
SRCS += FTPParse.cpp
-SRCS += HDHomeRunDirectory.cpp
-SRCS += HDHomeRunFile.cpp
SRCS += HTTPDirectory.cpp
SRCS += HTTPFile.cpp
SRCS += IDirectory.cpp
diff --git a/xbmc/utils/URIUtils.cpp b/xbmc/utils/URIUtils.cpp
index c6d8511a10..15c1a9aeb2 100644
--- a/xbmc/utils/URIUtils.cpp
+++ b/xbmc/utils/URIUtils.cpp
@@ -954,11 +954,6 @@ bool URIUtils::IsUPnP(const std::string& strFile)
return IsProtocol(strFile, "upnp");
}
-bool URIUtils::IsHDHomeRun(const std::string& strFile)
-{
- return IsProtocol(strFile, "hdhomerun");
-}
-
bool URIUtils::IsSlingbox(const std::string& strFile)
{
return IsProtocol(strFile, "sling");
@@ -969,8 +964,7 @@ bool URIUtils::IsLiveTV(const std::string& strFile)
std::string strFileWithoutSlash(strFile);
RemoveSlashAtEnd(strFileWithoutSlash);
- if (IsHDHomeRun(strFile)
- || IsSlingbox(strFile)
+ if (IsSlingbox(strFile)
|| IsProtocol(strFile, "sap")
||(StringUtils::EndsWithNoCase(strFileWithoutSlash, ".pvr") && !PathStarts(strFileWithoutSlash, "pvr://recordings")))
return true;
diff --git a/xbmc/utils/URIUtils.h b/xbmc/utils/URIUtils.h
index 90e7b442ab..78a3d70ff4 100644
--- a/xbmc/utils/URIUtils.h
+++ b/xbmc/utils/URIUtils.h
@@ -130,7 +130,6 @@ public:
static bool IsUDP(const std::string& strFile);
static bool IsTCP(const std::string& strFile);
static bool IsHD(const std::string& strFileName);
- static bool IsHDHomeRun(const std::string& strFile);
static bool IsSlingbox(const std::string& strFile);
static bool IsInArchive(const std::string& strFile);
static bool IsInRAR(const std::string& strFile);
diff --git a/xbmc/utils/test/TestURIUtils.cpp b/xbmc/utils/test/TestURIUtils.cpp
index 6cda9c9614..9b3db8704b 100644
--- a/xbmc/utils/test/TestURIUtils.cpp
+++ b/xbmc/utils/test/TestURIUtils.cpp
@@ -281,11 +281,6 @@ TEST_F(TestURIUtils, IsHD)
EXPECT_TRUE(URIUtils::IsHD("rar://path/to/file"));
}
-TEST_F(TestURIUtils, IsHDHomeRun)
-{
- EXPECT_TRUE(URIUtils::IsHDHomeRun("hdhomerun://path/to/file"));
-}
-
TEST_F(TestURIUtils, IsSlingbox)
{
EXPECT_TRUE(URIUtils::IsSlingbox("sling://path/to/file"));
@@ -322,7 +317,6 @@ TEST_F(TestURIUtils, IsISO9660)
TEST_F(TestURIUtils, IsLiveTV)
{
- EXPECT_TRUE(URIUtils::IsLiveTV("hdhomerun://path/to/file"));
EXPECT_TRUE(URIUtils::IsLiveTV("sling://path/to/file"));
EXPECT_TRUE(URIUtils::IsLiveTV("sap://path/to/file"));
}