Browse Source

added dfatmo - uploaded2-3-hevc-vdr-PPA

master
mango 2 years ago
parent
commit
dd98573725
64 changed files with 12256 additions and 0 deletions
  1. +163
    -0
      d/dfatmo-0.5.0~git20170718/.cproject
  2. +1
    -0
      d/dfatmo-0.5.0~git20170718/.pc/.quilt_patches
  3. +1
    -0
      d/dfatmo-0.5.0~git20170718/.pc/.quilt_series
  4. +1
    -0
      d/dfatmo-0.5.0~git20170718/.pc/.version
  5. +2
    -0
      d/dfatmo-0.5.0~git20170718/.pc/applied-patches
  6. +780
    -0
      d/dfatmo-0.5.0~git20170718/.pc/fix-static-declarations/df10choutputdriver.c
  7. +1081
    -0
      d/dfatmo-0.5.0~git20170718/.pc/vdr_plugin_version.patch/vdrplug_dfatmo.cpp
  8. +83
    -0
      d/dfatmo-0.5.0~git20170718/.project
  9. +7
    -0
      d/dfatmo-0.5.0~git20170718/.pydevproject
  10. +66
    -0
      d/dfatmo-0.5.0~git20170718/.settings/org.eclipse.cdt.codan.core.prefs
  11. +169
    -0
      d/dfatmo-0.5.0~git20170718/.settings/org.eclipse.cdt.core.prefs
  12. +4
    -0
      d/dfatmo-0.5.0~git20170718/.settings/org.eclipse.cdt.ui.prefs
  13. +340
    -0
      d/dfatmo-0.5.0~git20170718/COPYING
  14. +69
    -0
      d/dfatmo-0.5.0~git20170718/HISTORY
  15. +174
    -0
      d/dfatmo-0.5.0~git20170718/Makefile
  16. +601
    -0
      d/dfatmo-0.5.0~git20170718/README
  17. +20
    -0
      d/dfatmo-0.5.0~git20170718/addon.xml
  18. +642
    -0
      d/dfatmo-0.5.0~git20170718/atmodriver.c
  19. +1203
    -0
      d/dfatmo-0.5.0~git20170718/atmodriver.h
  20. +238
    -0
      d/dfatmo-0.5.0~git20170718/debian/changelog
  21. +1
    -0
      d/dfatmo-0.5.0~git20170718/debian/compat
  22. +32
    -0
      d/dfatmo-0.5.0~git20170718/debian/control
  23. +15
    -0
      d/dfatmo-0.5.0~git20170718/debian/control-dfatmo-only
  24. +23
    -0
      d/dfatmo-0.5.0~git20170718/debian/copyright
  25. +11
    -0
      d/dfatmo-0.5.0~git20170718/debian/patches/fix-static-declarations
  26. +2
    -0
      d/dfatmo-0.5.0~git20170718/debian/patches/series
  27. +13
    -0
      d/dfatmo-0.5.0~git20170718/debian/patches/vdr_plugin_version.patch
  28. +15
    -0
      d/dfatmo-0.5.0~git20170718/debian/postinst
  29. +58
    -0
      d/dfatmo-0.5.0~git20170718/debian/rules
  30. +1
    -0
      d/dfatmo-0.5.0~git20170718/debian/source/format
  31. +1
    -0
      d/dfatmo-0.5.0~git20170718/debian/source/options
  32. +116
    -0
      d/dfatmo-0.5.0~git20170718/df10ch_usb_proto.h
  33. +780
    -0
      d/dfatmo-0.5.0~git20170718/df10choutputdriver.c
  34. +101
    -0
      d/dfatmo-0.5.0~git20170718/df10chskeleton.c
  35. +122
    -0
      d/dfatmo-0.5.0~git20170718/dfatmo.h
  36. +607
    -0
      d/dfatmo-0.5.0~git20170718/dfatmo.py
  37. +174
    -0
      d/dfatmo-0.5.0~git20170718/fileoutputdriver.c
  38. BIN
      d/dfatmo-0.5.0~git20170718/icon.png
  39. +148
    -0
      d/dfatmo-0.5.0~git20170718/mydriver.py
  40. +68
    -0
      d/dfatmo-0.5.0~git20170718/patches/xine-ui-dfatmo-switch.patch
  41. +104
    -0
      d/dfatmo-0.5.0~git20170718/patches/xineliboutput-dfatmo-switch.patch
  42. +149
    -0
      d/dfatmo-0.5.0~git20170718/project/atmodriver/atmodriver.vcxproj
  43. +30
    -0
      d/dfatmo-0.5.0~git20170718/project/atmodriver/atmodriver.vcxproj.filters
  44. +137
    -0
      d/dfatmo-0.5.0~git20170718/project/df10chdriver/df10chdriver.vcxproj
  45. +30
    -0
      d/dfatmo-0.5.0~git20170718/project/df10chdriver/df10chdriver.vcxproj.filters
  46. +47
    -0
      d/dfatmo-0.5.0~git20170718/project/dfatmo.sln
  47. +128
    -0
      d/dfatmo-0.5.0~git20170718/project/filedriver/filedriver.vcxproj
  48. +27
    -0
      d/dfatmo-0.5.0~git20170718/project/filedriver/filedriver.vcxproj.filters
  49. +133
    -0
      d/dfatmo-0.5.0~git20170718/project/serialdriver/serialdriver.vcxproj
  50. +27
    -0
      d/dfatmo-0.5.0~git20170718/project/serialdriver/serialdriver.vcxproj.filters
  51. +19
    -0
      d/dfatmo-0.5.0~git20170718/script.capturetest/addon.xml
  52. +65
    -0
      d/dfatmo-0.5.0~git20170718/script.capturetest/capturetest.py
  53. +826
    -0
      d/dfatmo-0.5.0~git20170718/serialoutputdriver.c
  54. +28
    -0
      d/dfatmo-0.5.0~git20170718/service.py
  55. +51
    -0
      d/dfatmo-0.5.0~git20170718/settings.xml
  56. +44
    -0
      d/dfatmo-0.5.0~git20170718/softhddevice_service.h
  57. +85
    -0
      d/dfatmo-0.5.0~git20170718/testatmodriver.py
  58. +139
    -0
      d/dfatmo-0.5.0~git20170718/vdr2plug.mk
  59. +115
    -0
      d/dfatmo-0.5.0~git20170718/vdrplug.mk
  60. +1081
    -0
      d/dfatmo-0.5.0~git20170718/vdrplug_dfatmo.cpp
  61. BIN
      d/dfatmo-0.5.0~git20170718/windows/dfatmo-xbmc-addon-win.zip
  62. BIN
      d/dfatmo-0.5.0~git20170718/windows/dfatmo-xbmc-frodo-addon-win.zip
  63. +1058
    -0
      d/dfatmo-0.5.0~git20170718/xineplug_post_dfatmo.c
  64. BIN
      d/dfatmo_0.5.0~git20170718.orig.tar.xz

+ 163
- 0
d/dfatmo-0.5.0~git20170718/.cproject View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>

<cproject>
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.522923725">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.522923725" moduleId="org.eclipse.cdt.core.settings" name="Linux GCC">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="atmo" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.522923725" name="Linux GCC" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.522923725.1299807297" name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1765852131" name="cdt.managedbuild.toolchain.gnu.base" resourceTypeBasedDiscovery="true" superClass="cdt.managedbuild.toolchain.gnu.base">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1949347644" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
<builder arguments="DFATMOINSTDIR=${HOME}/dfatmo" command="make" id="cdt.managedbuild.target.gnu.builder.base.1108692234" incrementalBuildTarget="install" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1982832721" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.2064905689" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1226506188" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
<option id="gnu.c.compiler.option.include.paths.27487681" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="/usr/include/vdr"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.758137729" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.314775202" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base">
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.2084718394" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1209638415" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.base.891915511" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1190003687" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="atmo.null.2145325042" name="atmo"/>
</storageModule>
<storageModule moduleId="refreshScope" versionNumber="1">
<resource resourceType="PROJECT" workspacePath="/dfatmo"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.522923725;cdt.managedbuild.toolchain.gnu.base.522923725.1299807297;cdt.managedbuild.tool.gnu.c.compiler.base.1226506188;cdt.managedbuild.tool.gnu.c.compiler.input.758137729">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
<buildTargets>
<target name="vdrplug" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments>-f vdrplug.mk DVBDIR=/usr VDRDIR=/usr/include/vdr LIBDIR=${HOME}/.vdr/lib LOCALEDIR=${HOME}/.vdr/locale DFATMOINSTDIR=${HOME}/dfatmo</buildArguments>
<buildTarget>install</buildTarget>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
<target name="vdrplug-clean" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments>-f vdrplug.mk DVBDIR=/usr VDRDIR=/usr/include/vdr LIBDIR=${HOME}/.vdr/lib LOCALEDIR=${HOME}/.vdr/locale DFATMOINSTDIR=${HOME}/dfatmo</buildArguments>
<buildTarget>clean</buildTarget>
<stopOnError>true</stopOnError>
<useDefaultCommand>false</useDefaultCommand>
<runAllBuilders>false</runAllBuilders>
</target>
</buildTargets>
</storageModule>
</cproject>

+ 1
- 0
d/dfatmo-0.5.0~git20170718/.pc/.quilt_patches View File

@@ -0,0 +1 @@
debian/patches

+ 1
- 0
d/dfatmo-0.5.0~git20170718/.pc/.quilt_series View File

@@ -0,0 +1 @@
series

+ 1
- 0
d/dfatmo-0.5.0~git20170718/.pc/.version View File

@@ -0,0 +1 @@
2

+ 2
- 0
d/dfatmo-0.5.0~git20170718/.pc/applied-patches View File

@@ -0,0 +1,2 @@
fix-static-declarations
vdr_plugin_version.patch

+ 780
- 0
d/dfatmo-0.5.0~git20170718/.pc/fix-static-declarations/df10choutputdriver.c View File

@@ -0,0 +1,780 @@
/*
* Copyright (C) 2011 Andreas Auras <yak54@inkennet.de>
*
* This file is part of DFAtmo the driver for 'Atmolight' controllers for XBMC and xinelib based video players.
*
* DFAtmo 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 of the License, or
* (at your option) any later version.
*
* DFAtmo 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* This is the DFAtmo native output driver for my own designed DF10CH "next generation" 10ch RGB Controller.
*
*/

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <errno.h>
#include <libusb.h>

#ifdef WIN32
#include <windows.h>
#define snprintf _snprintf
#else
#include <unistd.h>
#include <sys/time.h>
#endif

#ifndef LIBUSB_CALL
#define LIBUSB_CALL
#endif

#include "df10ch_usb_proto.h"
#include "dfatmo.h"

#define DF10CH_USB_CFG_VENDOR_ID 0x16c0
#define DF10CH_USB_CFG_PRODUCT_ID 0x05dc
#define DF10CH_USB_CFG_VENDOR_NAME "yak54@gmx.net"
#define DF10CH_USB_CFG_PRODUCT "DF10CH"
#define DF10CH_USB_CFG_SERIAL "AP"
#define DF10CH_USB_DEFAULT_TIMEOUT 100

#define DF10CH_MAX_CHANNELS 30
#define DF10CH_SIZE_CONFIG (18 + DF10CH_MAX_CHANNELS * 6)
#define DF10CH_CONFIG_VALID_ID 0xA0A1

enum { DF10CH_AREA_TOP, DF10CH_AREA_BOTTOM, DF10CH_AREA_LEFT, DF10CH_AREA_RIGHT, DF10CH_AREA_CENTER, DF10CH_AREA_TOP_LEFT, DF10CH_AREA_TOP_RIGHT, DF10CH_AREA_BOTTOM_LEFT, DF10CH_AREA_BOTTOM_RIGHT };

typedef struct df10ch_gamma_tab_s {
struct df10ch_gamma_tab_s *next;
uint8_t gamma;
uint16_t white_cal;
uint16_t tab[256];
} df10ch_gamma_tab_t;

typedef struct {
int req_channel; // Channel number in request
int area; // Source area
int area_num; // Source area number
int color; // Source color
df10ch_gamma_tab_t *gamma_tab; // Corresponding gamma table
} df10ch_channel_config_t;

typedef struct df10ch_output_driver_s df10ch_output_driver_t;

typedef struct df10ch_ctrl_s {
struct df10ch_ctrl_s *next;
df10ch_output_driver_t *driver;
libusb_device_handle *dev;
int idx_serial_number; // USB string index of serial number
uint16_t config_version; // Version number of configuration data
uint16_t pwm_res; // PWM resolution
int num_req_channels; // Number of channels in request
df10ch_channel_config_t *channel_config; // List of channel configurations
char id[32]; // ID of Controller
struct libusb_transfer *transfer; // Prepared set brightness request for asynchrony submitting
uint8_t *transfer_data; // Data of set brightness request
int pending_submit; // Is true if a asynchrony transfer is pending
int transfer_error;
} df10ch_ctrl_t;

struct df10ch_output_driver_s {
output_driver_t output_driver;
libusb_context *ctx;
atmo_parameters_t param; // Global channel layout
df10ch_ctrl_t *ctrls; // List of found controllers
df10ch_gamma_tab_t *gamma_tabs; // List of calculated gamma tables
uint16_t config_version; // (Maximum) Version number of configuration data
int max_transmit_latency;
int avg_transmit_latency;
int transfer_err_cnt; // Number of transfer errors
};

#ifndef HAVE_LIBUSB_STRERROR
static const char *libusb_strerror(int rc) {
switch (rc) {
case LIBUSB_SUCCESS:
return ("Success (no error)");
case LIBUSB_ERROR_IO:
return ("Input/output error");
case LIBUSB_ERROR_INVALID_PARAM:
return ("Invalid parameter");
case LIBUSB_ERROR_ACCESS:
return ("Access denied (insufficient permissions)");
case LIBUSB_ERROR_NO_DEVICE:
return ("No such device (it may have been disconnected)");
case LIBUSB_ERROR_NOT_FOUND:
return ("Entity not found");
case LIBUSB_ERROR_BUSY:
return ("Resource busy");
case LIBUSB_ERROR_TIMEOUT:
return ("Operation timed out");
case LIBUSB_ERROR_OVERFLOW:
return ("Overflow");
case LIBUSB_ERROR_PIPE:
return ("Pipe error");
case LIBUSB_ERROR_INTERRUPTED:
return ("System call interrupted (perhaps due to signal)");
case LIBUSB_ERROR_NO_MEM:
return ("Insufficient memory");
case LIBUSB_ERROR_NOT_SUPPORTED:
return ("Operation not supported or unimplemented on this platform");
case LIBUSB_ERROR_OTHER:
return ("Other error");
}
return ("?");
}
#endif

static const char * df10ch_usb_transfer_errmsg(int s) {
switch (s) {
case LIBUSB_TRANSFER_COMPLETED:
return ("Transfer completed without error");
case LIBUSB_TRANSFER_ERROR:
return ("Transfer failed");
case LIBUSB_TRANSFER_TIMED_OUT:
return ("Transfer timed out");
case LIBUSB_TRANSFER_CANCELLED:
return ("Transfer was cancelled");
case LIBUSB_TRANSFER_STALL:
return ("Control request stalled");
case LIBUSB_TRANSFER_NO_DEVICE:
return ("Device was disconnected");
case LIBUSB_TRANSFER_OVERFLOW:
return ("Device sent more data than requested");
}
return ("?");
}


static void df10ch_comm_errmsg(int stat, char *rc) {
if (stat == 0)
strcpy(rc, "OK");
else
*rc = 0;
if (stat & (1<<COMM_ERR_OVERRUN))
strcat(rc, " OVERRUN");
if (stat & (1<<COMM_ERR_FRAME))
strcat(rc, " FRAME");
if (stat & (1<<COMM_ERR_TIMEOUT))
strcat(rc, " TIMEOUT");
if (stat & (1<<COMM_ERR_START))
strcat(rc, " START");
if (stat & (1<<COMM_ERR_OVERFLOW))
strcat(rc, " OVERFLOW");
if (stat & (1<<COMM_ERR_CRC))
strcat(rc, " CRC");
if (stat & (1<<COMM_ERR_DUPLICATE))
strcat(rc, " DUPLICATE");
if (stat & (1<<COMM_ERR_DEBUG))
strcat(rc, " DEBUG");
}


static int df10ch_control_in_transfer(df10ch_ctrl_t *ctrl, uint8_t req, uint16_t val, uint16_t index, unsigned int timeout, uint8_t *buf, uint16_t buflen) {
// Use a return buffer always so that the controller is able to send a USB reply status
// This is special for VUSB at controller side
unsigned char rcbuf[1];
int len = buflen;
int n = 0, retrys = 0;

if (!len) {
buf = rcbuf;
len = 1;
}

// Because VUSB at controller sends ACK reply before CRC check of received data we have to retry sending request our self if data is corrupted
while (retrys < 3) {
n = libusb_control_transfer(ctrl->dev, LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, req, val, index, buf, len, timeout);
if (n != LIBUSB_ERROR_INTERRUPTED)
{
if (n < 0)
++ctrl->driver->transfer_err_cnt;
if (n >= 0 || n != LIBUSB_ERROR_PIPE)
break;
++retrys;
DFATMO_LOG(DFLOG_ERROR, "%s: sending USB control transfer message %d failed (pipe error): retry %d", ctrl->id, req, retrys);
}
}

if (n < 0) {
DFATMO_LOG(DFLOG_ERROR, "%s: sending USB control transfer message %d failed: %s", ctrl->id, req, libusb_strerror(n));
return -1;
}

if (n != buflen) {
DFATMO_LOG(DFLOG_ERROR, "%s: sending USB control transfer message %d failed: read %d bytes but expected %d bytes", ctrl->id, req, n, buflen);
return -1;
}

return 0;
}


static void df10ch_dispose(df10ch_output_driver_t *this) {
df10ch_ctrl_t *ctrl = this->ctrls;
df10ch_gamma_tab_t *gt = this->gamma_tabs;

while (ctrl) {
df10ch_ctrl_t *next;

libusb_free_transfer(ctrl->transfer);
libusb_release_interface(ctrl->dev, 0);
libusb_close(ctrl->dev);

next = ctrl->next;
free(ctrl->transfer_data);
free(ctrl->channel_config);
free(ctrl);
ctrl = next;
}

if (this->ctx)
libusb_exit(this->ctx);

while (gt) {
df10ch_gamma_tab_t *next = gt->next;
free(gt);
gt = next;
}

this->ctrls = NULL;
this->ctx = NULL;
this->gamma_tabs = NULL;
}


static int df10ch_wait_for_replys(df10ch_output_driver_t *this) {
df10ch_ctrl_t *ctrl = this->ctrls;
struct timeval timeout;

// wait for end of all pending transfers
timeout.tv_sec = 0;
timeout.tv_usec = (DF10CH_USB_DEFAULT_TIMEOUT + 50) * 1000;
while (ctrl) {
if (ctrl->pending_submit) {
int rc = libusb_handle_events_timeout(this->ctx, &timeout);
if (rc && rc != LIBUSB_ERROR_INTERRUPTED) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: handling USB events failed: %s", ctrl->id, libusb_strerror(rc));
return -1;
}
}
else
ctrl = ctrl->next;
}

ctrl = this->ctrls;
while (ctrl) {
if (ctrl->transfer_error) {
char reply_errmsg[128], request_errmsg[128];
uint8_t data[1];
if (df10ch_control_in_transfer(ctrl, REQ_GET_REPLY_ERR_STATUS, 0, 0, DF10CH_USB_DEFAULT_TIMEOUT, data, 1))
strcpy(reply_errmsg, "N/A");
else
df10ch_comm_errmsg(data[0], reply_errmsg);
if (df10ch_control_in_transfer(ctrl, PWM_REQ_GET_REQUEST_ERR_STATUS, 0, 0, DF10CH_USB_DEFAULT_TIMEOUT, data, 1))
strcpy(request_errmsg, "N/A");
else
df10ch_comm_errmsg(data[0], request_errmsg);
DFATMO_LOG(DFLOG_ERROR, "%s: comm error USB: %s, PWM: %s", ctrl->id, reply_errmsg, request_errmsg);
}
ctrl = ctrl->next;
}

return 0;
}


static void LIBUSB_CALL df10ch_reply_cb(struct libusb_transfer *transfer) {
df10ch_ctrl_t *ctrl = (df10ch_ctrl_t *) transfer->user_data;
ctrl->pending_submit = 0;
if (transfer->status != LIBUSB_TRANSFER_COMPLETED && transfer->status != LIBUSB_TRANSFER_CANCELLED) {
++ctrl->driver->transfer_err_cnt;
ctrl->transfer_error = 1;
DFATMO_LOG(DFLOG_ERROR, "%s: submitting USB control transfer message failed: %s\n", ctrl->id, df10ch_usb_transfer_errmsg(transfer->status));
}
}


static int df10ch_driver_open(output_driver_t *this_gen, atmo_parameters_t *param) {
df10ch_output_driver_t *this = (df10ch_output_driver_t *) this_gen;
libusb_device **list = NULL;
size_t cnt;
int rc;
size_t i;
df10ch_ctrl_t *ctrl;

this->config_version = 0;
this->max_transmit_latency = 0;
this->avg_transmit_latency = 0;
this->transfer_err_cnt = 0;

if (libusb_init(&this->ctx) < 0) {
strcpy(this->output_driver.errmsg, "can't initialize USB library");
return -1;
}

cnt = libusb_get_device_list(this->ctx, &list);
if (cnt < 0) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "getting list of USB devices failed: %s", libusb_strerror(cnt));
df10ch_dispose(this);
return -1;
}

// Note: Because controller uses obdev's free USB product/vendor ID's we have to do special lookup for finding
// the controllers. See file "USB-IDs-for-free.txt" of VUSB distribution.
for (i = 0; i < cnt; i++) {
libusb_device *d = list[i];
struct libusb_device_descriptor desc;

int busnum = libusb_get_bus_number(d);
int devnum = libusb_get_device_address(d);

rc = libusb_get_device_descriptor(d, &desc);
if (rc < 0) {
DFATMO_LOG(DFLOG_ERROR, "USB[%d,%d]: getting USB device descriptor failed: %s", busnum, devnum, libusb_strerror(rc));
}
else if (desc.idVendor == DF10CH_USB_CFG_VENDOR_ID && desc.idProduct == DF10CH_USB_CFG_PRODUCT_ID) {
libusb_device_handle *hdl = NULL;
rc = libusb_open(d, &hdl);
if (rc < 0) {
DFATMO_LOG(DFLOG_ERROR, "USB[%d,%d]: open of USB device failed: %s", busnum, devnum, libusb_strerror(rc));
}
else {
unsigned char buf[256];
rc = libusb_get_string_descriptor_ascii(hdl, desc.iManufacturer, buf, sizeof(buf));
if (rc < 0) {
DFATMO_LOG(DFLOG_ERROR, "USB[%d,%d]: getting USB manufacturer string failed: %s", busnum, devnum, libusb_strerror(rc));
}
else if (rc == sizeof(DF10CH_USB_CFG_VENDOR_NAME) - 1 && !memcmp(buf, DF10CH_USB_CFG_VENDOR_NAME, rc)) {
rc = libusb_get_string_descriptor_ascii(hdl, desc.iProduct, buf, sizeof(buf));
if (rc < 0) {
DFATMO_LOG(DFLOG_ERROR, "USB[%d,%d]: getting USB product string failed: %s", busnum, devnum, libusb_strerror(rc));
}
else if (rc == sizeof(DF10CH_USB_CFG_PRODUCT) - 1 && !memcmp(buf, DF10CH_USB_CFG_PRODUCT, rc)) {
char id[32];
snprintf(id, sizeof(id), "DF10CH[%d,%d]", busnum, devnum);
rc = libusb_set_configuration(hdl, 1);
if (rc < 0) {
DFATMO_LOG(DFLOG_ERROR, "%s: setting USB configuration failed: %s", id, libusb_strerror(rc));
}
else {
rc = libusb_claim_interface(hdl, 0);
if (rc < 0) {
DFATMO_LOG(DFLOG_ERROR, "%s: claiming USB interface failed: %s", id, libusb_strerror(rc));
}
else {
df10ch_ctrl_t *ctrl = (df10ch_ctrl_t *) calloc(1, sizeof(df10ch_ctrl_t));
ctrl->next = this->ctrls;
this->ctrls = ctrl;
ctrl->driver = this;
ctrl->dev = hdl;
ctrl->idx_serial_number = desc.iSerialNumber;
strcpy(ctrl->id, id);
DFATMO_LOG(DFLOG_INFO, "%s: device opened", id);
continue;
}
}
}
}
libusb_close(hdl);
}
}
}

libusb_free_device_list(list, 1);

if (!this->ctrls) {
strcpy(this->output_driver.errmsg, "USB: no DF10CH devices found!");
df10ch_dispose(this);
return -1;
}

// Ignore channel configuration defined by plugin parameters
param->top = 0;
param->bottom = 0;
param->left = 0;
param->right = 0;
param->center = 0;
param->top_left = 0;
param->top_right = 0;
param->bottom_left = 0;
param->bottom_right = 0;

// Read controller configuration
ctrl = this->ctrls;
while (ctrl) {
uint8_t data[256];
uint8_t eedata[DF10CH_SIZE_CONFIG];
int cfg_valid_id;
int n;
int nch;
df10ch_channel_config_t *ccfg;
int eei;

// Check that USB controller is running application firmware and not bootloader
rc = libusb_get_string_descriptor_ascii(ctrl->dev, ctrl->idx_serial_number, data, sizeof(data) - 1);
if (rc < 0) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: getting USB serial number string failed: %s", ctrl->id, libusb_strerror(rc));
df10ch_dispose(this);
return -1;
}
if (rc != sizeof(DF10CH_USB_CFG_SERIAL) - 1 || memcmp(data, DF10CH_USB_CFG_SERIAL, rc)) {
data[rc] = 0;
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: application firmware of USB controller is not running! Current mode is: %s", ctrl->id, data);
df10ch_dispose(this);
return -1;
}

// check that PWM controller is running application firmware and not bootloader
if (df10ch_control_in_transfer(ctrl, PWM_REQ_GET_VERSION, 0, 0, DF10CH_USB_DEFAULT_TIMEOUT, data, 2)) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: reading PWM controller version fails!", ctrl->id);
df10ch_dispose(this);
return -1;
}
if (data[0] != PWM_VERS_APPL) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: application firmware of PWM controller is not running! Current mode is: %d", ctrl->id, data[0]);
df10ch_dispose(this);
return -1;
}

// read eeprom configuration data
if (df10ch_control_in_transfer(ctrl, REQ_READ_EE_DATA, 0, 1, DF10CH_USB_DEFAULT_TIMEOUT, eedata, sizeof(eedata))) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: reading eeprom config data fails!", ctrl->id);
df10ch_dispose(this);
return -1;
}

// check that configuration data is valid
cfg_valid_id = eedata[0] + (eedata[1] << 8);
if (cfg_valid_id != DF10CH_CONFIG_VALID_ID) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: controller is not configured! Please run setup program first", ctrl->id);
df10ch_dispose(this);
return -1;
}

ctrl->config_version = eedata[2] + (eedata[3] << 8);
if (ctrl->config_version > this->config_version)
this->config_version = ctrl->config_version;

// Determine channel layout
n = eedata[4 + DF10CH_AREA_TOP];
if (n > param->top)
param->top = n;
n = eedata[4 + DF10CH_AREA_BOTTOM];
if (n > param->bottom)
param->bottom = n;
n = eedata[4 + DF10CH_AREA_LEFT];
if (n > param->left)
param->left = n;
n = eedata[4 + DF10CH_AREA_RIGHT];
if (n > param->right)
param->right = n;
n = eedata[4 + DF10CH_AREA_CENTER];
if (n > param->center)
param->center = n;
n = eedata[4 + DF10CH_AREA_TOP_LEFT];
if (n > param->top_left)
param->top_left = n;
n = eedata[4 + DF10CH_AREA_TOP_RIGHT];
if (n > param->top_right)
param->top_right = n;
n = eedata[4 + DF10CH_AREA_BOTTOM_LEFT];
if (n > param->bottom_left)
param->bottom_left = n;
n = eedata[4 + DF10CH_AREA_BOTTOM_RIGHT];
if (n > param->bottom_right)
param->bottom_right = n;

ctrl->num_req_channels = eedata[13];
if (ctrl->num_req_channels > DF10CH_MAX_CHANNELS)
ctrl->num_req_channels = DF10CH_MAX_CHANNELS;

if (ctrl->config_version > 1) {
int eei = 14 + ctrl->num_req_channels * 6;
param->overscan = eedata[eei];
param->analyze_size = eedata[eei + 1];
param->edge_weighting = eedata[eei + 2];
if (ctrl->config_version > 2)
param->weight_limit = eedata[eei + 3];
}

// Read PWM resolution
if (df10ch_control_in_transfer(ctrl, PWM_REQ_GET_MAX_PWM, 0, 0, DF10CH_USB_DEFAULT_TIMEOUT, data, 2)) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: reading PWM resolution data fails!", ctrl->id);
df10ch_dispose(this);
return -1;
}
ctrl->pwm_res = data[0] + (data[1] << 8);

// Build channel configuration list
nch = ctrl->num_req_channels;
ccfg = (df10ch_channel_config_t *) calloc(nch, sizeof(df10ch_channel_config_t));
ctrl->channel_config = ccfg;
eei = 14;
while (nch) {
uint8_t gamma;
uint16_t white_cal;
df10ch_gamma_tab_t *gt;

ccfg->req_channel = eedata[eei];
ccfg->area = eedata[eei + 1] >> 2;
ccfg->color = eedata[eei + 1] & 0x03;
ccfg->area_num = eedata[eei + 2];
gamma = eedata[eei + 3];
if (gamma < 10)
gamma = 10;
white_cal = eedata[eei + 4] + (eedata[eei + 5] << 8);

// Lookup gamma table for gamma and white calibration value
gt = this->gamma_tabs;
while (gt && gamma != gt->gamma && white_cal != gt->white_cal)
gt = gt->next;
if (!gt) {
// Calculate new gamma table
gt = (df10ch_gamma_tab_t *) calloc(1, sizeof(df10ch_gamma_tab_t));
gt->next = this->gamma_tabs;
this->gamma_tabs = gt;
gt->gamma = gamma;
gt->white_cal = white_cal;
{
const double dgamma = gamma / 10.0;
const double dwhite_cal = white_cal;
int v;
for (v = 0; v < 256; ++v) {
gt->tab[v] = (uint16_t) (pow(((double)v / 255.0), dgamma) * dwhite_cal + 0.5);
if (gt->tab[v] > ctrl->pwm_res)
gt->tab[v] = ctrl->pwm_res;
}
}
}
ccfg->gamma_tab = gt;

++ccfg;
eei += 6;
--nch;
}

// Prepare USB request for sending brightness values
ctrl->transfer_data = calloc(1, (LIBUSB_CONTROL_SETUP_SIZE + ctrl->num_req_channels * 2));
libusb_fill_control_setup(ctrl->transfer_data, LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, PWM_REQ_SET_BRIGHTNESS, 0, 0, ctrl->num_req_channels * 2);
ctrl->transfer = libusb_alloc_transfer(0);
libusb_fill_control_transfer(ctrl->transfer, ctrl->dev, ctrl->transfer_data, df10ch_reply_cb, ctrl, DF10CH_USB_DEFAULT_TIMEOUT);
ctrl->pending_submit = 0;

ctrl = ctrl->next;
}

this->param = *param;
return 0;
}


static int df10ch_driver_configure(output_driver_t *this_gen, atmo_parameters_t *param) {
df10ch_output_driver_t *this = (df10ch_output_driver_t *) this_gen;

// Ignore channel configuration defined by plugin parameters
param->top = this->param.top;
param->bottom = this->param.bottom;
param->left = this->param.left;
param->right = this->param.right;
param->center = this->param.center;
param->top_left = this->param.top_left;
param->top_right = this->param.top_right;
param->bottom_left = this->param.bottom_left;
param->bottom_right = this->param.bottom_right;

if (this->config_version > 1) {
param->overscan = this->param.overscan;
param->analyze_size = this->param.analyze_size;
param->edge_weighting = this->param.edge_weighting;
if (this->config_version > 2)
param->weight_limit = this->param.weight_limit;
}

this->param = *param;
return 0;
}


static int df10ch_driver_close(output_driver_t *this_gen) {
df10ch_output_driver_t *this = (df10ch_output_driver_t *) this_gen;
df10ch_ctrl_t *ctrl = this->ctrls;

// Cancel all pending requests
while (ctrl) {
if (ctrl->pending_submit)
libusb_cancel_transfer(ctrl->transfer);
ctrl = ctrl->next;
}

df10ch_wait_for_replys(this);
df10ch_dispose(this);

DFATMO_LOG(DFLOG_INFO, "average transmit latency: %d [us]", this->avg_transmit_latency);

if (this->transfer_err_cnt) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%d transfer errors happen", this->transfer_err_cnt);
return -1;
}
return 0;
}

static void df10ch_driver_dispose(output_driver_t *this_gen) {
free(this_gen);
}


static int df10ch_driver_output_colors(output_driver_t *this_gen, rgb_color_t *colors, rgb_color_t *last_colors) {
df10ch_output_driver_t *this = (df10ch_output_driver_t *) this_gen;
rgb_color_t *area_map[9];
rgb_color_t *c = colors;
df10ch_ctrl_t *ctrl = this->ctrls;

#ifdef WIN32
FILETIME act_time, start_time;
if (IS_LOG_LEVEL(DFLOG_INFO))
GetSystemTimeAsFileTime (&start_time);
#else
struct timeval act_time, start_time, latency_time;
if (IS_LOG_LEVEL(DFLOG_INFO))
gettimeofday(&start_time, NULL);
#endif

// Build area mapping table
area_map[DF10CH_AREA_TOP] = c;
c += this->param.top;
area_map[DF10CH_AREA_BOTTOM] = c;
c += this->param.bottom;
area_map[DF10CH_AREA_LEFT] = c;
c += this->param.left;
area_map[DF10CH_AREA_RIGHT] = c;
c += this->param.right;
area_map[DF10CH_AREA_CENTER] = c;
c += this->param.center;
area_map[DF10CH_AREA_TOP_LEFT] = c;
c += this->param.top_left;
area_map[DF10CH_AREA_TOP_RIGHT] = c;
c += this->param.top_right;
area_map[DF10CH_AREA_BOTTOM_LEFT] = c;
c += this->param.bottom_left;
area_map[DF10CH_AREA_BOTTOM_RIGHT] = c;

// Generate transfer messages and send it to controllers
while (ctrl) {
// Generate payload data (brightness values)
int do_submit = 0;
uint8_t *payload = ctrl->transfer_data + LIBUSB_CONTROL_SETUP_SIZE;
df10ch_channel_config_t *cfg = ctrl->channel_config;
int nch = ctrl->num_req_channels;

while (nch) {
rgb_color_t *lc;
int v = 0;
uint16_t bv;

c = area_map[cfg->area] + cfg->area_num;
lc = last_colors ? last_colors + (c - colors): NULL;
switch (cfg->color) {
case 0: // Red
v = c->r;
if (!lc || v != lc->r)
do_submit = 1;
break;
case 1: // Green
v = c->g;
if (!lc || v != lc->g)
do_submit = 1;
break;
case 2: // Blue
v = c->b;
if (!lc || v != lc->b)
do_submit = 1;
}

// gamma and white calibration correction
bv = cfg->gamma_tab->tab[v];
payload[cfg->req_channel * 2] = (uint8_t)bv;
payload[cfg->req_channel * 2 + 1] = (uint8_t)(bv >> 8);

++cfg;
--nch;
}

// initiate asynchron data transfer to controller
if (do_submit) {
int rc;
ctrl->transfer_error = 0;
rc = libusb_submit_transfer(ctrl->transfer);
if (rc) {
snprintf(this->output_driver.errmsg, sizeof(this->output_driver.errmsg), "%s: submitting USB transfer message failed: %s", ctrl->id, libusb_strerror(rc));
return -1;
}
ctrl->pending_submit = 1;
}

ctrl = ctrl->next;
}

// wait for end of all pending transfers
if (df10ch_wait_for_replys(this))
return -1;

if (IS_LOG_LEVEL(DFLOG_INFO)) {
int latency;
#ifdef WIN32
GetSystemTimeAsFileTime (&act_time);
latency = (act_time.dwLowDateTime - start_time.dwLowDateTime) / 10;
#else
gettimeofday(&act_time, NULL);
timersub(&act_time, &start_time, &latency_time);
latency = latency_time.tv_usec;
#endif
this->avg_transmit_latency = (this->avg_transmit_latency + latency) / 2;
if (latency > this->max_transmit_latency) {
this->max_transmit_latency = latency;
DFATMO_LOG(DFLOG_INFO, "max/avg transmit latency: %d/%d [us]", this->max_transmit_latency, this->avg_transmit_latency);
}
}

return 0;
}


dfatmo_log_level_t dfatmo_log_level;
dfatmo_log_t dfatmo_log;

output_driver_t* dfatmo_new_output_driver(dfatmo_log_level_t log_level, dfatmo_log_t log_fn) {
df10ch_output_driver_t *d;

if (dfatmo_log_level == NULL) {
dfatmo_log_level = log_level;
dfatmo_log = log_fn;
}

d = (df10ch_output_driver_t *) calloc(1, sizeof(df10ch_output_driver_t));
if (d == NULL)
return NULL;

d->output_driver.version = DFATMO_OUTPUT_DRIVER_VERSION;
d->output_driver.open = df10ch_driver_open;
d->output_driver.configure = df10ch_driver_configure;
d->output_driver.close = df10ch_driver_close;
d->output_driver.dispose = df10ch_driver_dispose;
d->output_driver.output_colors = df10ch_driver_output_colors;

return &d->output_driver;
}

+ 1081
- 0
d/dfatmo-0.5.0~git20170718/.pc/vdr_plugin_version.patch/vdrplug_dfatmo.cpp
File diff suppressed because it is too large
View File


+ 83
- 0
d/dfatmo-0.5.0~git20170718/.project View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>dfatmo</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value>DFATMOINSTDIR=${HOME}/dfatmo</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>install</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>false</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>

+ 7
- 0
d/dfatmo-0.5.0~git20170718/.pydevproject View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?>

<pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
</pydev_project>

+ 66
- 0
d/dfatmo-0.5.0~git20170718/.settings/org.eclipse.cdt.codan.core.prefs View File

@@ -0,0 +1,66 @@
#Mon Apr 23 13:33:03 CEST 2012
eclipse.preferences.version=1
org.eclipse.cdt.codan.checkers.errnoreturn=Warning
org.eclipse.cdt.codan.checkers.errnoreturn.params={implicit\=>false}
org.eclipse.cdt.codan.checkers.errreturnvalue=Error
org.eclipse.cdt.codan.checkers.errreturnvalue.params={}
org.eclipse.cdt.codan.checkers.noreturn=Error
org.eclipse.cdt.codan.checkers.noreturn.params={implicit\=>false}
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={}
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={}
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={no_break_comment\=>"no break",last_case_param\=>true,empty_case_param\=>false}
org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={unknown\=>false,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error
org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={}
org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error
org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={}
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={}
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={macro\=>true,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={paramNot\=>false}
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={else\=>false,afterelse\=>false}
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={}
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={}
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={exceptions\=>("@(\#)","$Id")}
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}

+ 169
- 0
d/dfatmo-0.5.0~git20170718/.settings/org.eclipse.cdt.core.prefs View File

@@ -0,0 +1,169 @@
#Mon Apr 23 13:33:03 CEST 2012
eclipse.preferences.version=1
environment/project/cdt.managedbuild.toolchain.gnu.base.522923725=
environment/project/cdt.managedbuild.toolchain.gnu.base.522923725/PKG_CONFIG_PATH/delimiter=;
environment/project/cdt.managedbuild.toolchain.gnu.base.522923725/PKG_CONFIG_PATH/operation=append
environment/project/cdt.managedbuild.toolchain.gnu.base.522923725/PKG_CONFIG_PATH/value=/home/andy/build/lib/pkgconfig
environment/project/cdt.managedbuild.toolchain.gnu.base.522923725/append=true
environment/project/cdt.managedbuild.toolchain.gnu.base.522923725/appendContributed=true
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.cdt.core.formatter.alignment_for_compact_if=0
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_member_access=0
org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1
org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.cdt.core.formatter.compact_else_if=true
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.cdt.core.formatter.indentation.size=8
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.join_wrapped_lines=true
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=80
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=space
org.eclipse.cdt.core.formatter.tabulation.size=2
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false

+ 4
- 0
d/dfatmo-0.5.0~git20170718/.settings/org.eclipse.cdt.ui.prefs View File

@@ -0,0 +1,4 @@
#Tue Sep 13 10:36:40 CEST 2011
eclipse.preferences.version=1
formatter_profile=_df
formatter_settings_version=1

+ 340
- 0
d/dfatmo-0.5.0~git20170718/COPYING View File

@@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.

GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions
of the 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 Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

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 of the License, 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA


Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.

<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

+ 69
- 0
d/dfatmo-0.5.0~git20170718/HISTORY View File

@@ -0,0 +1,69 @@
--- Version 0.4.0
Changed behavior of parameter uniform_brightness and calculation of uniform brightness
to be more compatible to "classic" VDR Atmolight plugin.
VDR plugin: Do send black color output only once when suspended.

--- Version 0.3.5
Send color output data at least every 500ms to trigger atmo controller idle watchdog
Added support for xbmc v13

--- Version 0.3.4
Added support for vdr 2.x

--- Version 0.3.3
Fixed script error when stopping service while video is running in XBMC addon

--- Version 0.3.2
Added support for XBMC V13 git revision past Feb. 10 2013
Note: Within XBMC V12.0 Frodo stable the DFAtmo support is brocken!!!
Added untested Makefile 'vdr2plug.mk' to build plugin for recent vdr versions
Added SVDRP command to vdr plugin to enable/disable plugin

--- Version 0.3.1
Added new parameter "weight_limit"
Fixed dynamic linking issue for recent gcc/linux versions
Support for config version 3 of DF10CH

--- Version 0.3.0
Optimize performance of image analysis algorithm:
1. By introducing a new weight table so that only calculation for pixel
with relevant weight (currently > 5%) is done.
2. Do not calculate windowed histograms if windowing size is 0.
Fixed calculation of weight table for border sections.
Fixed analysis error for saturation window size 0.
Serial output driver:
Extend maximum output package length to 1023 bytes to support SEDU B0 mode.
Enhanced protocol descriptor syntax:
For constant values a repeat count or fill up count could be
specified to define a arbitrary number of bytes with the same
constant value.
A couple of RGB groups within the same area with monotone
increasing or decreasing sections could be defined with the
new shortcut operators '+n' and '-n'.
README:
Added performance hints.
Added enhanced protocol descriptor syntax.
Added SEDU protocol example.

--- Version 0.2.1
VDR plugin: Added suspend mode handling
VDR plugin: Fixed incorrect change of setup parameters when changeing temporary parameters

--- Version 0.2

Added support for VDR with new DFAtmo VDR plugin.
Added parameter for configuration of output rate.
Ensure first packet send to controller turn lights off.
Correction to mean filter to prevent flickering.
Added some more description for the filter parameters.
Increase maximum size of a data package in serial output driver to 512 bytes.
Increase maximum size of driver parameter to 2048 bytes.
Added more speed values to linux version of serial output driver.
Added ampersand as a additional driver parameter option separator to satisfy xinelib plugin parameter parsing.
Added support for amblone and karatelight controller.
Open Addon settings dialog if no settings file exists.

--- Version 0.1

First version of DFAtmo.


+ 174
- 0
d/dfatmo-0.5.0~git20170718/Makefile View File

@@ -0,0 +1,174 @@
# ---
# Copyright (C) 2011 Andreas Auras <yak54@inkennet.de>
#
# This file is part of DFAtmo the driver for 'Atmolight' controllers for XBMC and xinelib based video players.
#
# DFAtmo 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 of the License, or
# (at your option) any later version.
#
# DFAtmo 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
#
# This is the Makefile for the DFAtmo Project.
#
# ---

INSTALL ?= install

DFATMOINSTDIR ?= /usr/local
DFATMOLIBDIR ?= $(DFATMOINSTDIR)/lib/dfatmo
DFATMOINCLDIR ?= $(DFATMOINSTDIR)/include

OUTPUTDRIVERPATH ?= $(DFATMOLIBDIR)/drivers

XINEDESTDIR ?=
VDRDESTDIR ?=
XBMCDESTDIR ?= $(HOME)/.xbmc/addons/script.dfatmo

XBMCADDON = dfatmo-xbmc-addon.zip
XBMCADDONWIN = windows/dfatmo-xbmc-addon-win.zip
XBMCADDONFILES = dfatmo.py service.py addon.xml settings.xml mydriver.py icon.png

OUTPUTDRIVERS = dfatmo-file.so dfatmo-serial.so

XINEPOSTATMO = xineplug_post_dfatmo.so

STD_BUILD_TARGETS = dfatmo
STD_INSTALL_TARGETS = dfatmoinstall

CFLAGS_DFATMO = -O3 -pipe -Wall -fPIC -g
LDFLAGS_SO = -shared -fvisibility=hidden

ifneq (NO, $(shell pkg-config --exists libusb-1.0 || echo NO))
HAVE_LIBUSB=1
OUTPUTDRIVERS += dfatmo-df10ch.so
CFLAGS_USB ?= $(shell pkg-config --cflags libusb-1.0)
LIBS_USB ?= $(shell pkg-config --libs libusb-1.0)
ifneq (NO, $(shell pkg-config --exists 'libusb-1.0 >= 1.0.17 libusb-1.0 < 1.0.18' || echo NO))
CFLAGS_USB += -DHAVE_LIBUSB_STRERROR=1
endif
endif

ifneq (NO, $(shell bash -c "type -p python-config || echo NO"))
HAVE_PYTHON=1
ATMODRIVER = atmodriver.so $(XBMCADDON)
CFLAGS_PYTHON ?= $(shell python-config --cflags)
LDFLAGS_PYTHON ?= $(shell python-config --ldflags)
endif

ifneq (NO, $(shell pkg-config --atleast-version=1.1.90 libxine || echo NO))
HAVE_XINELIB = 1
STD_BUILD_TARGETS += xineplugin
STD_INSTALL_TARGETS += xineinstall
XINEPLUGINDIR ?= $(shell pkg-config --variable=plugindir libxine)
CFLAGS_XINE ?= $(shell pkg-config --cflags libxine )
LIBS_XINE ?= $(shell pkg-config --libs libxine)
endif

ifneq (NO, $(shell pkg-config --exists vdr || echo NO))
HAVE_VDR=1
STD_BUILD_TARGETS += vdrplugin
STD_INSTALL_TARGETS += vdrinstall
endif

.PHONY: all xineplugin xbmcaddon xbmcaddonwin dfatmo vdrplugin install xineinstall xbmcinstall dfatmoinstall vdrinstall clean

all: $(STD_BUILD_TARGETS)

xineplugin: $(XINEPOSTATMO)

xbmcaddon: $(XBMCADDON)

xbmcaddonwin: $(XBMCADDONWIN)

dfatmo: $(ATMODRIVER) $(OUTPUTDRIVERS)

vdrplugin::
$(MAKE) -f vdr2plug.mk all OUTPUTDRIVERPATH=$(OUTPUTDRIVERPATH)

install: $(STD_INSTALL_TARGETS)

xineinstall: xineplugin
$(INSTALL) -D -m 0644 $(XINEPOSTATMO) $(XINEDESTDIR)$(XINEPLUGINDIR)/post/$(XINEPOSTATMO)

xbmcinstall:
$(INSTALL) -m 0755 -d $(XBMCDESTDIR)
$(INSTALL) -m 0644 -t $(XBMCDESTDIR) addon.xml dfatmo.py service.py icon.png
$(INSTALL) -m 0644 HISTORY $(XBMCDESTDIR)/changelog.txt
$(INSTALL) -m 0644 COPYING $(XBMCDESTDIR)/LICENSE.txt
$(INSTALL) -m 0644 README $(XBMCDESTDIR)/readme.txt
$(INSTALL) -m 0755 -d $(XBMCDESTDIR)/resources
$(INSTALL) -m 0644 -t $(XBMCDESTDIR)/resources settings.xml
$(INSTALL) -m 0755 -d $(XBMCDESTDIR)/resources/lib/drivers
$(INSTALL) -m 0644 -t $(XBMCDESTDIR)/resources/lib/drivers mydriver.py

winxbmcinstall: xbmcinstall
$(INSTALL) -m 0755 -d $(XBMCDESTDIR)/resources/lib.nt
$(INSTALL) -m 0644 -t $(XBMCDESTDIR)/resources/lib.nt project/release/atmodriver.pyd
$(INSTALL) -m 0755 -d $(XBMCDESTDIR)/resources/lib.nt/drivers
$(INSTALL) -m 0644 -t $(XBMCDESTDIR)/resources/lib.nt/drivers project/release/dfatmo-file.dll project/release/dfatmo-serial.dll project/release/dfatmo-df10ch.dll

dfatmoinstall: dfatmo
$(INSTALL) -D -m 0644 dfatmo.h $(DFATMOINCLDIR)/dfatmo.h
$(INSTALL) -m 0755 -d $(DFATMOLIBDIR)/drivers
$(INSTALL) -m 0644 -t $(DFATMOLIBDIR)/drivers $(OUTPUTDRIVERS)
ifdef ATMODRIVER
$(INSTALL) -m 0644 -t $(DFATMOLIBDIR) $(ATMODRIVER)
endif

vdrinstall::
$(MAKE) -f vdr2plug.mk install OUTPUTDRIVERPATH=$(OUTPUTDRIVERPATH) DESTDIR=$(VDRDESTDIR)

clean:
ifdef HAVE_VDR
-$(MAKE) -f vdr2plug.mk clean
endif
-rm -f *.so* *.o $(XBMCADDON)
-rm -rf ./build

$(XBMCADDON): $(XBMCADDONFILES)
-rm -f $@
-rm -rf ./build
$(MAKE) xbmcinstall XBMCDESTDIR=./build/script.dfatmo
(cd ./build && zip -r ../$@ script.dfatmo)

$(XBMCADDONWIN): $(XBMCADDONFILES) README project/release/atmodriver.pyd project/release/dfatmo-file.dll project/release/dfatmo-serial.dll project/release/dfatmo-df10ch.dll
-rm -f $@
-rm -rf ./build
$(MAKE) winxbmcinstall XBMCDESTDIR=./build/script.dfatmo
(cd ./build && zip -r ../$@ script.dfatmo)

xineplug_post_dfatmo.o: xineplug_post_dfatmo.c atmodriver.h dfatmo.h
$(CC) $(CFLAGS) $(CFLAGS_XINE) $(CFLAGS_DFATMO) -DOUTPUT_DRIVER_PATH='"$(OUTPUTDRIVERPATH)"' -c -o $@ $<

xineplug_post_dfatmo.so: xineplug_post_dfatmo.o
$(CC) $(CFLAGS) $(LDFLAGS) $(CFLAGS_XINE) $(CFLAGS_DFATMO) $(LDFLAGS_SO) -o $@ $< $(LIBS_XINE) -lm -ldl

atmodriver.o: atmodriver.c atmodriver.h dfatmo.h
$(CC) $(CFLAGS_PYTHON) $(CFLAGS_DFATMO) -DOUTPUT_DRIVER_PATH='"$(OUTPUTDRIVERPATH)"' -c -o $@ $<

atmodriver.so: atmodriver.o
$(CC) $(CFLAGS_PYTHON) $(LDFLAGS_PYTHON) $(CFLAGS_DFATMO) $(LDFLAGS_SO) -lm -ldl -o $@ $<

dfatmo-df10ch.o: df10choutputdriver.c dfatmo.h df10ch_usb_proto.h
$(CC) $(CFLAGS) $(CFLAGS_USB) $(CFLAGS_DFATMO) -c -o $@ $<

dfatmo-df10ch.so: dfatmo-df10ch.o
$(CC) $(CFLAGS) $(LDFLAGS) $(CFLAGS_USB) $(CFLAGS_DFATMO) $(LDFLAGS_SO) -o $@ $< $(LIBS_USB) -lm

dfatmo-file.o: fileoutputdriver.c dfatmo.h
$(CC) $(CFLAGS) $(CFLAGS_DFATMO) -c -o $@ $<

dfatmo-serial.o: serialoutputdriver.c dfatmo.h
$(CC) $(CFLAGS) $(CFLAGS_DFATMO) -c -o $@ $<

%.so: %.o
$(CC) $(CFLAGS) $(LDFLAGS) $(CFLAGS_DFATMO) $(LDFLAGS_SO) -o $@ $<

+ 601
- 0
d/dfatmo-0.5.0~git20170718/README View File

@@ -0,0 +1,601 @@
This is the README file of DFAtmo the driver for Atmolight controllers for
VDR, XBMC and xinelib based video players.

Written by: Andreas Auras (yak54@inkennet.de)

See the file COPYING for license information.

Project repository: git://github.com/durchflieger/DFAtmo.git


Description:
------------

"DFAtmo" allows you to drive a colored back lighting for TVs similar to the
"Ambilight" of Philips televisions. The displayed color depends on the
actual shown video content.
Back lighting your TV is best done with light-emitting diodes (LEDs) that are
arranged as RGB light sources on stripes that could be mounted at the back
of your TV.
To drive these LED's a dedicated hardware is necessary that is called the
"Atmolight" controller. Beside some commercial products that you can simply buy
there exists several projects to build these hardware by yourself.

DFAtmo continuously analyzes the video picture and generates output data
for these Atmolight controllers. DFAtmo supports VDR, XBMC and xinelib based
media players where it is installed as a plugin or addon. XBMC is supported
on Linux and Windows platforms.

To drive different Atmolight controller hardware DFAtmo uses it's own plugin
mechanism for output drivers. These output drivers are implemented as shared
libraries and are loaded dynamically at runtime.
Furthermore the python script based DFAtmo XBMC addon supports another plugin
mechanism for output drivers which are implemented as python scripts.
Currently there are output drivers implemented for controllers where the
communication is based on a serial port like the "classic" Atmolight
controller and for my own designed DF10CH "next generation" controller where
communication is done to over a proprietary USB protocol.

For debugging proposes there exists another output driver that is able to write
the color data to a file in a human readable layout.
And as an example for a script based output driver this file based output
driver is also implemented in python.

Because of the modular plugin mechanism new output driver could be implemented
easily to support more hardware or even other targets.

For more detailed informations about "Atmolight" visit the VDR-Wiki:
http://www.vdr-wiki.de/wiki/index.php/Atmo-Light
http://www.vdr-wiki.de/wiki/index.php/DF10CH
http://www.vdr-wiki.de/wiki/index.php/Atmo-plugin


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Within XBMC V12.0 Frodo stable the DFAtmo support is brocken!!!
DFAtmo runs fine with stable XBMC V11.0 Eden, V12.1 Frodo
and with a recent git version after Feb. 10 2013.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Components of DFAtmo:
---------------------

DFAtmo contains the following components:

1) Output drivers
2) Native Python "atmodriver" module
3) DFAtmo XBMC addon
4) DFAtmo xinelib plugin
5) DFAtmo VDR plugin

These components have dependencies among each other. The XBMC addon
needs 2) which in turn needs 1). The VDR and xinelib plugin needs 1).
The output drivers are shared by 3) 4) and 5)


Building the components:
------------------------

The build process step by step:
There exists a common build target for the "atmodriver" module and the
output drivers.

For building the "atmodriver" module a python development environment is
required. The challenge here is that the version of the python environment
must be the same version your XBMC is compiled against.
For ubuntu this is currently the ordinary platform packet "python-dev".
For XBMC on Windows you currently have to download the XBMC source and
build dependencies and use the python libs from the build dependencies.

The output driver for the DF10CH controller depends on libusb-1.0 which
could be downloaded for Linux from:
http://www.libusb.org/wiki/libusb-1.0

For ubuntu you can use package "libusb-1.0-0-dev".

For windows you need a very recent version with windows support from here:
http://www.libusb.org/wiki/windows_backend

Before compiling the components you should decide at which place they should
be installed. This is controlled by the DFATMOINSTDIR make variable and the
default for Linux is "/usr/local". Please note that the XBMC addon currently
searches the components under "/usr" and "/usr/local". So you should use
one of these locations.

Compiling and installing the two components for Linux:
make dfatmo
make dfatmoinstall
For Windows the build process currently is not Makefile based.
There exists a Visual C++ 2010 project solution file in directory
"project" to build the components from within Visual Studio C++.
The XBMC source tree should be on the same directory level as
the DFAtmo source tree and should be called "xbmc" at top.
The same is it for libusb-1.0 and the top should be "libusb".

For Windows the generated "atmodriver.pyd" should be installed within the DFAtmo
XBMC addon script directory under "resources/lib.nt" and the output driver
dll's under "resources/lib.nt/drivers". This currently has to be done manually.

Building the DFAtmo XBMC addon as a installable zip file 'dfatmo-xbmc-addon.zip' for Linux:
make xbmcaddon

Direct installation to $HOME/.xbmc/addons for Linux with:
make xbmcinstall
For Windows there exists a Makefile target to build a installable zip file
"dfatmo-xbmc-addon-win.zip" which contains the addon and also the "atmodriver"
and output driver components. It could be executed from a cygwin environment:
make xbmcaddonwin

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
In the git repository you will find already a recent version of
"dfatmo-xbmc-addon-win.zip" ready for installation.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


For building the DFAtmo xinelib plugin you need a recent xine-lib-1.2
release from here:
http://hg.debian.org/hg/xine-lib/xine-lib-1.2

For ubuntu you can use package "libxine2-dev".

Compiling and installation of the plugin:
make xineplugin
make xineinstall


For building the DFAtmo VDR plugin you need a recent VDR release >= 1.7

Compiling and installation of the VDR plugin for VDR 2.x versions with
pkg-config support:
make vdrplugin
make vdrinstall
Compiling and installation of the VDR plugin for older VDR versions without
pkg-config support:
make -f vdrplug.mk all
make -f vdrplug.mk install