mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Corrections (#1662)
* Address "SyntaxWarning: invalid escape sequence" * Correcttypo for CEC Blue button * Fix enablement when already open * Icons path corrected * Correct path and simplify command * Have enum class generalised * Address compile warnings * Update tinkerforce led_strip * Address compiler waring * Fix Install/Uninstall desktop- and icon file handling * Address "fatal: detected dubious ownership in repository" * platform fix * Test "fatal: detected dubious ownership in repository" * Update "fatal: detected dubious ownership in repository" * Update to Protobuf 25.1 * Update cmds with sudo * Update SEDU default baud rates * Replace deprecated Py_NoSiteFlag * Correct default config --------- Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
parent
6b8c0dbcce
commit
0fce43840c
1
.github/scripts/build.sh
vendored
1
.github/scripts/build.sh
vendored
@ -34,7 +34,6 @@ elif [[ $RUNNER_OS == "Windows" ]]; then
|
|||||||
elif [[ "$RUNNER_OS" == 'Linux' ]]; then
|
elif [[ "$RUNNER_OS" == 'Linux' ]]; then
|
||||||
echo "Docker arguments used: DOCKER_IMAGE=${DOCKER_IMAGE}, DOCKER_TAG=${DOCKER_TAG}, TARGET_ARCH=${TARGET_ARCH}"
|
echo "Docker arguments used: DOCKER_IMAGE=${DOCKER_IMAGE}, DOCKER_TAG=${DOCKER_TAG}, TARGET_ARCH=${TARGET_ARCH}"
|
||||||
# verification bypass of external dependencies
|
# verification bypass of external dependencies
|
||||||
git config --global --add safe.directory "${GITHUB_WORKSPACE}/dependencies/external/*"
|
|
||||||
# set GitHub Container Registry url
|
# set GitHub Container Registry url
|
||||||
REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}"
|
REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}"
|
||||||
# take ownership of deploy dir
|
# take ownership of deploy dir
|
||||||
|
25
.github/workflows/qt5_6.yml
vendored
25
.github/workflows/qt5_6.yml
vendored
@ -41,25 +41,16 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [
|
os: [
|
||||||
{ distribution: debian, codename: buster, description: Debian Buster (x86_64), architecture: [ amd64, linux/amd64 ] },
|
{ distribution: debian, codename: buster, description: Debian Buster (x86_64), architecture: [ amd64, linux/amd64 ], platform: x11 },
|
||||||
{ distribution: debian, codename: bullseye, description: Debian Bullseye (x86_64), architecture: [ amd64, linux/amd64 ] },
|
{ distribution: debian, codename: bullseye, description: Debian Bullseye (x86_64), architecture: [ amd64, linux/amd64 ], platform: x11 },
|
||||||
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 1/ZERO), architecture: [ armv6, linux/arm/v5 ] },
|
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 1 & Zero), architecture: [ armv6, linux/arm/v5 ], platform: rpi },
|
||||||
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 2/3/4), architecture: [ armv7, linux/arm/v7 ] },
|
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 2), architecture: [ armv7, linux/arm/v7 ], platform: rpi },
|
||||||
{ distribution: debian, codename: bullseye, description: Debian Bullseye (Raspberry Pi 2/3/4), architecture: [ armv7, linux/arm/v7 ] },
|
{ distribution: debian, codename: bullseye, description: Debian Bullseye (Raspberry Pi 2), architecture: [ armv7, linux/arm/v7 ], platform: rpi },
|
||||||
{ distribution: debian, codename: buster, description: Debian Buster (Generic AARCH64), architecture: [ arm64, linux/arm64 ] },
|
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi Zero 2 & 3/4), architecture: [ arm64, linux/arm64 ], platform: rpi },
|
||||||
{ distribution: debian, codename: bullseye, description: Debian Bullseye (Generic AARCH64), architecture: [ arm64, linux/arm64 ] }
|
{ distribution: debian, codename: bullseye, description: Debian Bullseye (Raspberry Pi Zero 2 & 3/4), architecture: [ arm64, linux/arm64 ], platform: rpi }
|
||||||
]
|
]
|
||||||
isQt5:
|
isQt5:
|
||||||
- ${{ inputs.qt_version == '5' }}
|
- ${{ inputs.qt_version == '5' }}
|
||||||
include:
|
|
||||||
- os.architecture[0]: amd64
|
|
||||||
platform: x11
|
|
||||||
- os.architecture[0]: armv6
|
|
||||||
platform: rpi
|
|
||||||
- os.architecture[0]: armv7
|
|
||||||
platform: rpi
|
|
||||||
- os.architecture[0]: arm64
|
|
||||||
platform: amlogic
|
|
||||||
exclude:
|
exclude:
|
||||||
- isQt5: true
|
- isQt5: true
|
||||||
os: { distribution: debian, codename: bullseye }
|
os: { distribution: debian, codename: bullseye }
|
||||||
@ -88,7 +79,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DOCKER_IMAGE: ${{ matrix.os.distribution }}
|
DOCKER_IMAGE: ${{ matrix.os.distribution }}
|
||||||
DOCKER_TAG: ${{ matrix.os.codename }}${{ inputs.qt_version == '6' && '-qt6' || '' }}
|
DOCKER_TAG: ${{ matrix.os.codename }}${{ inputs.qt_version == '6' && '-qt6' || '' }}
|
||||||
PLATFORM: ${{ matrix.platform }}
|
PLATFORM: ${{ matrix.os.platform }}
|
||||||
TARGET_ARCH: ${{ matrix.os.architecture[1] }}
|
TARGET_ARCH: ${{ matrix.os.architecture[1] }}
|
||||||
|
|
||||||
- name: 📦 Upload
|
- name: 📦 Upload
|
||||||
|
@ -76,7 +76,7 @@ Note: The wizard will configure an APIv2 capable bridge always with Entertainmen
|
|||||||
### Technical
|
### Technical
|
||||||
|
|
||||||
- Changed default build from Stretch to Buster
|
- Changed default build from Stretch to Buster
|
||||||
- Support Qt 6.7, Update to Protobuf 23.4.0, Update mbedTLS to v3.4.0, Update flatbuffers to v23.5.26
|
- Support Qt 6.7, Update to Protobuf 25.1, Update mbedTLS to v3.4.0, Update flatbuffers to v23.5.26
|
||||||
- Use C++17 standard as default
|
- Use C++17 standard as default
|
||||||
- Added Pull Request (PR) installation script, allowing users to test development builds savely on Linux
|
- Added Pull Request (PR) installation script, allowing users to test development builds savely on Linux
|
||||||
- Fixed missing include limits in QJsonSchemaChecker - Thanks @Portisch
|
- Fixed missing include limits in QJsonSchemaChecker - Thanks @Portisch
|
||||||
@ -111,6 +111,7 @@ To allow segment streaming, enable "Realtime - Use main segment only" in WLED's
|
|||||||
- REST API - Increased default timeout to address "Operation cancelled" errors
|
- REST API - Increased default timeout to address "Operation cancelled" errors
|
||||||
- LED Devices: Allow to differentiate between recoverable/unrecoverable errors
|
- LED Devices: Allow to differentiate between recoverable/unrecoverable errors
|
||||||
- Renamed LED area assignment naming to provide clarity on the processing algorithms
|
- Renamed LED area assignment naming to provide clarity on the processing algorithms
|
||||||
|
- Updated SEDU default baud rates
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
@ -249,13 +249,13 @@ log "---> DEPLOY_PATH = ${DEPLOY_PATH}"
|
|||||||
|
|
||||||
# cleanup deploy folder, create folder for ownership
|
# cleanup deploy folder, create folder for ownership
|
||||||
sudo rm -fr "${DEPLOY_PATH}" >/dev/null 2>&1
|
sudo rm -fr "${DEPLOY_PATH}" >/dev/null 2>&1
|
||||||
mkdir -p "${DEPLOY_PATH}" >/dev/null 2>&1
|
sudo mkdir -p "${DEPLOY_PATH}" >/dev/null 2>&1
|
||||||
|
|
||||||
#Remove previous build area, if no incremental build
|
#Remove previous build area, if no incremental build
|
||||||
if [ ${BUILD_INCREMENTAL} != true ]; then
|
if [ ${BUILD_INCREMENTAL} != true ]; then
|
||||||
sudo rm -fr "${BUILD_PATH}" >/dev/null 2>&1
|
sudo rm -fr "${BUILD_PATH}" >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
mkdir -p "${BUILD_PATH}" >/dev/null 2>&1
|
sudo mkdir -p "${BUILD_PATH}" >/dev/null 2>&1
|
||||||
|
|
||||||
echo "---> Compiling Hyperion from source code at ${CODE_PATH}"
|
echo "---> Compiling Hyperion from source code at ${CODE_PATH}"
|
||||||
|
|
||||||
@ -291,7 +291,7 @@ if [ ${DOCKERRC} == 0 ]; then
|
|||||||
|
|
||||||
if [ ${BUILD_PACKAGES} == "true" ]; then
|
if [ ${BUILD_PACKAGES} == "true" ]; then
|
||||||
echo "---> Copying packages to host folder: ${DEPLOY_PATH}" &&
|
echo "---> Copying packages to host folder: ${DEPLOY_PATH}" &&
|
||||||
cp -v ${BUILD_PATH}/Hyperion-* ${DEPLOY_PATH} 2>/dev/null
|
sudo cp -v ${BUILD_PATH}/Hyperion-* ${DEPLOY_PATH} 2>/dev/null
|
||||||
echo "---> Find deployment packages in: ${DEPLOY_PATH}"
|
echo "---> Find deployment packages in: ${DEPLOY_PATH}"
|
||||||
sudo chown -fR $(stat -c "%U:%G" ${BASE_PATH}) ${DEPLOY_PATH}
|
sudo chown -fR $(stat -c "%U:%G" ${BASE_PATH}) ${DEPLOY_PATH}
|
||||||
fi
|
fi
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
execute_process( COMMAND git config --global --add safe.directory ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ERROR_QUIET )
|
execute_process( COMMAND git config --global --add safe.directory "*" ERROR_QUIET )
|
||||||
execute_process( COMMAND git log -1 --format=%cn-%t/%h-%ct WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE BUILD_ID ERROR_QUIET )
|
execute_process( COMMAND git log -1 --format=%cn-%t/%h-%ct WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE BUILD_ID ERROR_QUIET )
|
||||||
execute_process( COMMAND sh -c "git branch | grep '^*' | sed 's;^*;;g' " WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE VERSION_ID ERROR_QUIET )
|
execute_process( COMMAND sh -c "git branch | grep '^*' | sed 's;^*;;g' " WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE VERSION_ID ERROR_QUIET )
|
||||||
execute_process( COMMAND sh -c "git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_REMOTE_PATH ERROR_QUIET )
|
execute_process( COMMAND sh -c "git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_REMOTE_PATH ERROR_QUIET )
|
||||||
|
@ -8,4 +8,3 @@ TryExec=hyperiond
|
|||||||
Exec=hyperiond
|
Exec=hyperiond
|
||||||
Type=Application
|
Type=Application
|
||||||
StartupNotify=false
|
StartupNotify=false
|
||||||
Categories=Application;
|
|
||||||
|
@ -105,26 +105,28 @@ ln -fs $BINSP/scripts/updateHyperionUser.sh $BINTP/updateHyperionUser 2>/dev/nul
|
|||||||
if [ "$IS_UPGRADE" = false ]; then
|
if [ "$IS_UPGRADE" = false ]; then
|
||||||
if [ ! -z "${DISPLAY}" ] || [ ! -z "${WAYLAND_DISPLAY}" ] || [ ! -z "${XDG_CURRENT_DESKTOP}" ]; then
|
if [ ! -z "${DISPLAY}" ] || [ ! -z "${WAYLAND_DISPLAY}" ] || [ ! -z "${XDG_CURRENT_DESKTOP}" ]; then
|
||||||
echo "---> Install Hyperion desktop icons"
|
echo "---> Install Hyperion desktop icons"
|
||||||
cp -R /usr/share/hyperion/icons /usr/share/icons/hicolor 2>/dev/null
|
cp -R /usr/share/hyperion/icons/* /usr/share/icons/hicolor/ 2>/dev/null
|
||||||
cp /usr/share/hyperion/desktop/hyperion.metainfo.xml /usr/share/metainfo 2>/dev/null
|
cp /usr/share/hyperion/desktop/hyperion.metainfo.xml /usr/share/metainfo 2>/dev/null
|
||||||
|
|
||||||
if hash desktop-file-install 2>/dev/null; then
|
if [ -x "$(command -v desktop-file-install )" ]; then
|
||||||
desktop-file-install /usr/share/hyperion/desktop/hyperion.desktop 2>/dev/null
|
desktop-file-install /usr/share/hyperion/desktop/hyperion.desktop 2>/dev/null
|
||||||
else
|
else
|
||||||
# On some systems this directory doesn't exist by default
|
# On some systems this directory doesn't exist by default
|
||||||
mkdir -p /usr/share/applications
|
mkdir -p /usr/share/applications
|
||||||
cp /usr/share/hyperion/desktop/hyperion.desktop /usr/share/applications
|
cp /usr/share/hyperion/desktop/hyperion.desktop /usr/share/applications
|
||||||
# Update application icons
|
fi
|
||||||
if hash update-desktop-database 2>/dev/null; then
|
|
||||||
update-desktop-database -q /usr/share/applications
|
# update desktop-database (if exists)
|
||||||
update-desktop-database -q /usr/share/icons/
|
if [ -x "$(command -v update-desktop-database)" ]; then
|
||||||
fi
|
update-desktop-database -q /usr/share/applications
|
||||||
|
update-desktop-database -q /usr/share/icons/hicolor
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# cleanup desktop icons
|
# cleanup desktop and icons
|
||||||
rm -r /usr/share/hyperion/desktop 2>/dev/null
|
rm -r /usr/share/hyperion/desktop 2>/dev/null
|
||||||
|
rm -r /usr/share/hyperion/icons 2>/dev/null
|
||||||
|
|
||||||
#Check, if dtparam=spi=on is in place
|
#Check, if dtparam=spi=on is in place
|
||||||
if [ $CPU_RPI -eq 1 ]; then
|
if [ $CPU_RPI -eq 1 ]; then
|
||||||
|
@ -59,29 +59,18 @@ fi
|
|||||||
# In case we don't use a service kill all instances
|
# In case we don't use a service kill all instances
|
||||||
killall hyperiond 2> /dev/null
|
killall hyperiond 2> /dev/null
|
||||||
|
|
||||||
|
echo "---> Remove Hyperion desktop icons"
|
||||||
# remove desktop/appstream file
|
# remove desktop/appstream file
|
||||||
rm -v /usr/share/applications/hyperion* 2> /dev/null
|
rm -v /usr/share/applications/hyperion* 2> /dev/null
|
||||||
rm -v /usr/share/metainfo/hyperion* 2> /dev/null
|
rm -v /usr/share/metainfo/hyperion* 2> /dev/null
|
||||||
|
|
||||||
# update desktop-database (if exists)
|
|
||||||
if [ -x /usr/bin/update-desktop-database ]; then
|
|
||||||
update-desktop-database -q /usr/share/applications
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove Hyperion icons
|
# remove Hyperion icons
|
||||||
for i in 16x16 22x22 24x24 32x32 36x36 48x48 64x64 72x72 96x96 128x128 192x192 256x256 512x512; do
|
rm -v /usr/share/icons/hicolor/*/apps/hyperion.png 2> /dev/null
|
||||||
rm -v usr/share/icons/hicolor/$i/apps/hyperion.png 2> /dev/null
|
|
||||||
done
|
|
||||||
|
|
||||||
# update icon-cache
|
# update desktop-database (if exists)
|
||||||
if [ -e /usr/share/icons/hicolor/icon-theme.cache ] ; then
|
if [ -x "$(command -v update-desktop-database)" ]; then
|
||||||
# touch it, just in case we cannot find the binary...
|
update-desktop-database -q /usr/share/applications
|
||||||
touch --no-create /usr/share/icons/hicolor
|
update-desktop-database -q /usr/share/icons/hicolor/
|
||||||
if hash gtk-update-icon-cache 2>/dev/null; then
|
|
||||||
gtk-update-icon-cache /usr/share/icons/hicolor
|
|
||||||
fi
|
|
||||||
# ignore errors
|
|
||||||
true
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -97,7 +97,6 @@
|
|||||||
"blueSignalThreshold": 0,
|
"blueSignalThreshold": 0,
|
||||||
"signalDetection": false,
|
"signalDetection": false,
|
||||||
"noSignalCounterThreshold": 200,
|
"noSignalCounterThreshold": 200,
|
||||||
"cecDetection": false,
|
|
||||||
"sDVOffsetMin": 0.1,
|
"sDVOffsetMin": 0.1,
|
||||||
"sDVOffsetMax": 0.9,
|
"sDVOffsetMax": 0.9,
|
||||||
"sDHOffsetMin": 0.4,
|
"sDHOffsetMin": 0.4,
|
||||||
|
501
dependencies/build/tinkerforge/bricklet_led_strip.c
vendored
501
dependencies/build/tinkerforge/bricklet_led_strip.c
vendored
@ -1,11 +1,11 @@
|
|||||||
/* ***********************************************************
|
/* ***********************************************************
|
||||||
* This file was automatically generated on 2013-12-19. *
|
* This file was automatically generated on 2023-11-30. *
|
||||||
* *
|
* *
|
||||||
* Bindings Version 2.0.13 *
|
* C/C++ Bindings Version 2.1.33 *
|
||||||
* *
|
* *
|
||||||
* If you have a bugfix for this file and want to commit it, *
|
* If you have a bugfix for this file and want to commit it, *
|
||||||
* please fix the bug in the generator. You can find a link *
|
* please fix the bug in the generator. You can find a link *
|
||||||
* to the generator git on tinkerforge.com *
|
* to the generators git repository on tinkerforge.com *
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
|
|
||||||
@ -15,9 +15,13 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef void (*FrameRenderedCallbackFunction)(uint16_t, void *);
|
|
||||||
|
typedef void (*FrameRendered_CallbackFunction)(uint16_t length, void *user_data);
|
||||||
|
|
||||||
#if defined _MSC_VER || defined __BORLANDC__
|
#if defined _MSC_VER || defined __BORLANDC__
|
||||||
#pragma pack(push)
|
#pragma pack(push)
|
||||||
@ -26,7 +30,7 @@ typedef void (*FrameRenderedCallbackFunction)(uint16_t, void *);
|
|||||||
#elif defined __GNUC__
|
#elif defined __GNUC__
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// workaround struct packing bug in GCC 4.7 on Windows
|
// workaround struct packing bug in GCC 4.7 on Windows
|
||||||
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
|
||||||
#define ATTRIBUTE_PACKED __attribute__((gcc_struct, packed))
|
#define ATTRIBUTE_PACKED __attribute__((gcc_struct, packed))
|
||||||
#else
|
#else
|
||||||
#define ATTRIBUTE_PACKED __attribute__((packed))
|
#define ATTRIBUTE_PACKED __attribute__((packed))
|
||||||
@ -42,66 +46,135 @@ typedef struct {
|
|||||||
uint8_t r[16];
|
uint8_t r[16];
|
||||||
uint8_t g[16];
|
uint8_t g[16];
|
||||||
uint8_t b[16];
|
uint8_t b[16];
|
||||||
} ATTRIBUTE_PACKED SetRGBValues_;
|
} ATTRIBUTE_PACKED SetRGBValues_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint16_t index;
|
uint16_t index;
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
} ATTRIBUTE_PACKED GetRGBValues_;
|
} ATTRIBUTE_PACKED GetRGBValues_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint8_t r[16];
|
uint8_t r[16];
|
||||||
uint8_t g[16];
|
uint8_t g[16];
|
||||||
uint8_t b[16];
|
uint8_t b[16];
|
||||||
} ATTRIBUTE_PACKED GetRGBValuesResponse_;
|
} ATTRIBUTE_PACKED GetRGBValues_Response;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint16_t duration;
|
uint16_t duration;
|
||||||
} ATTRIBUTE_PACKED SetFrameDuration_;
|
} ATTRIBUTE_PACKED SetFrameDuration_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
} ATTRIBUTE_PACKED GetFrameDuration_;
|
} ATTRIBUTE_PACKED GetFrameDuration_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint16_t duration;
|
uint16_t duration;
|
||||||
} ATTRIBUTE_PACKED GetFrameDurationResponse_;
|
} ATTRIBUTE_PACKED GetFrameDuration_Response;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
} ATTRIBUTE_PACKED GetSupplyVoltage_;
|
} ATTRIBUTE_PACKED GetSupplyVoltage_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint16_t voltage;
|
uint16_t voltage;
|
||||||
} ATTRIBUTE_PACKED GetSupplyVoltageResponse_;
|
} ATTRIBUTE_PACKED GetSupplyVoltage_Response;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint16_t length;
|
uint16_t length;
|
||||||
} ATTRIBUTE_PACKED FrameRenderedCallback_;
|
} ATTRIBUTE_PACKED FrameRendered_Callback;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint32_t frequency;
|
uint32_t frequency;
|
||||||
} ATTRIBUTE_PACKED SetClockFrequency_;
|
} ATTRIBUTE_PACKED SetClockFrequency_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
} ATTRIBUTE_PACKED GetClockFrequency_;
|
} ATTRIBUTE_PACKED GetClockFrequency_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
uint32_t frequency;
|
uint32_t frequency;
|
||||||
} ATTRIBUTE_PACKED GetClockFrequencyResponse_;
|
} ATTRIBUTE_PACKED GetClockFrequency_Response;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
} ATTRIBUTE_PACKED GetIdentity_;
|
uint16_t chip;
|
||||||
|
} ATTRIBUTE_PACKED SetChipType_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
} ATTRIBUTE_PACKED GetChipType_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint16_t chip;
|
||||||
|
} ATTRIBUTE_PACKED GetChipType_Response;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint16_t index;
|
||||||
|
uint8_t length;
|
||||||
|
uint8_t r[12];
|
||||||
|
uint8_t g[12];
|
||||||
|
uint8_t b[12];
|
||||||
|
uint8_t w[12];
|
||||||
|
} ATTRIBUTE_PACKED SetRGBWValues_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint16_t index;
|
||||||
|
uint8_t length;
|
||||||
|
} ATTRIBUTE_PACKED GetRGBWValues_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint8_t r[12];
|
||||||
|
uint8_t g[12];
|
||||||
|
uint8_t b[12];
|
||||||
|
uint8_t w[12];
|
||||||
|
} ATTRIBUTE_PACKED GetRGBWValues_Response;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint8_t mapping;
|
||||||
|
} ATTRIBUTE_PACKED SetChannelMapping_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
} ATTRIBUTE_PACKED GetChannelMapping_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint8_t mapping;
|
||||||
|
} ATTRIBUTE_PACKED GetChannelMapping_Response;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
} ATTRIBUTE_PACKED EnableFrameRenderedCallback_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
} ATTRIBUTE_PACKED DisableFrameRenderedCallback_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
} ATTRIBUTE_PACKED IsFrameRenderedCallbackEnabled_Request;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
uint8_t enabled;
|
||||||
|
} ATTRIBUTE_PACKED IsFrameRenderedCallbackEnabled_Response;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PacketHeader header;
|
||||||
|
} ATTRIBUTE_PACKED GetIdentity_Request;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
@ -111,7 +184,7 @@ typedef struct {
|
|||||||
uint8_t hardware_version[3];
|
uint8_t hardware_version[3];
|
||||||
uint8_t firmware_version[3];
|
uint8_t firmware_version[3];
|
||||||
uint16_t device_identifier;
|
uint16_t device_identifier;
|
||||||
} ATTRIBUTE_PACKED GetIdentityResponse_;
|
} ATTRIBUTE_PACKED GetIdentity_Response;
|
||||||
|
|
||||||
#if defined _MSC_VER || defined __BORLANDC__
|
#if defined _MSC_VER || defined __BORLANDC__
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
@ -119,10 +192,18 @@ typedef struct {
|
|||||||
#undef ATTRIBUTE_PACKED
|
#undef ATTRIBUTE_PACKED
|
||||||
|
|
||||||
static void led_strip_callback_wrapper_frame_rendered(DevicePrivate *device_p, Packet *packet) {
|
static void led_strip_callback_wrapper_frame_rendered(DevicePrivate *device_p, Packet *packet) {
|
||||||
FrameRenderedCallbackFunction callback_function;
|
FrameRendered_CallbackFunction callback_function;
|
||||||
void *user_data = device_p->registered_callback_user_data[LED_STRIP_CALLBACK_FRAME_RENDERED];
|
void *user_data;
|
||||||
FrameRenderedCallback_ *callback = (FrameRenderedCallback_ *)packet;
|
FrameRendered_Callback *callback;
|
||||||
*(void **)(&callback_function) = device_p->registered_callbacks[LED_STRIP_CALLBACK_FRAME_RENDERED];
|
|
||||||
|
if (packet->header.length != sizeof(FrameRendered_Callback)) {
|
||||||
|
return; // silently ignoring callback with wrong length
|
||||||
|
}
|
||||||
|
|
||||||
|
callback_function = (FrameRendered_CallbackFunction)device_p->registered_callbacks[DEVICE_NUM_FUNCTION_IDS + LED_STRIP_CALLBACK_FRAME_RENDERED];
|
||||||
|
user_data = device_p->registered_callback_user_data[DEVICE_NUM_FUNCTION_IDS + LED_STRIP_CALLBACK_FRAME_RENDERED];
|
||||||
|
callback = (FrameRendered_Callback *)packet;
|
||||||
|
(void)callback; // avoid unused variable warning
|
||||||
|
|
||||||
if (callback_function == NULL) {
|
if (callback_function == NULL) {
|
||||||
return;
|
return;
|
||||||
@ -134,9 +215,10 @@ static void led_strip_callback_wrapper_frame_rendered(DevicePrivate *device_p, P
|
|||||||
}
|
}
|
||||||
|
|
||||||
void led_strip_create(LEDStrip *led_strip, const char *uid, IPConnection *ipcon) {
|
void led_strip_create(LEDStrip *led_strip, const char *uid, IPConnection *ipcon) {
|
||||||
|
IPConnectionPrivate *ipcon_p = ipcon->p;
|
||||||
DevicePrivate *device_p;
|
DevicePrivate *device_p;
|
||||||
|
|
||||||
device_create(led_strip, uid, ipcon->p, 2, 0, 1);
|
device_create(led_strip, uid, ipcon_p, 2, 0, 3, LED_STRIP_DEVICE_IDENTIFIER);
|
||||||
|
|
||||||
device_p = led_strip->p;
|
device_p = led_strip->p;
|
||||||
|
|
||||||
@ -145,16 +227,26 @@ void led_strip_create(LEDStrip *led_strip, const char *uid, IPConnection *ipcon)
|
|||||||
device_p->response_expected[LED_STRIP_FUNCTION_SET_FRAME_DURATION] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
device_p->response_expected[LED_STRIP_FUNCTION_SET_FRAME_DURATION] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
||||||
device_p->response_expected[LED_STRIP_FUNCTION_GET_FRAME_DURATION] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_FRAME_DURATION] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
device_p->response_expected[LED_STRIP_FUNCTION_GET_SUPPLY_VOLTAGE] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_SUPPLY_VOLTAGE] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
device_p->response_expected[LED_STRIP_CALLBACK_FRAME_RENDERED] = DEVICE_RESPONSE_EXPECTED_ALWAYS_FALSE;
|
|
||||||
device_p->response_expected[LED_STRIP_FUNCTION_SET_CLOCK_FREQUENCY] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
device_p->response_expected[LED_STRIP_FUNCTION_SET_CLOCK_FREQUENCY] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
||||||
device_p->response_expected[LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_SET_CHIP_TYPE] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_CHIP_TYPE] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_SET_RGBW_VALUES] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_RGBW_VALUES] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_SET_CHANNEL_MAPPING] = DEVICE_RESPONSE_EXPECTED_FALSE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_CHANNEL_MAPPING] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_ENABLE_FRAME_RENDERED_CALLBACK] = DEVICE_RESPONSE_EXPECTED_TRUE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_DISABLE_FRAME_RENDERED_CALLBACK] = DEVICE_RESPONSE_EXPECTED_TRUE;
|
||||||
|
device_p->response_expected[LED_STRIP_FUNCTION_IS_FRAME_RENDERED_CALLBACK_ENABLED] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
device_p->response_expected[LED_STRIP_FUNCTION_GET_IDENTITY] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
device_p->response_expected[LED_STRIP_FUNCTION_GET_IDENTITY] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
|
||||||
|
|
||||||
device_p->callback_wrappers[LED_STRIP_CALLBACK_FRAME_RENDERED] = led_strip_callback_wrapper_frame_rendered;
|
device_p->callback_wrappers[LED_STRIP_CALLBACK_FRAME_RENDERED] = led_strip_callback_wrapper_frame_rendered;
|
||||||
|
|
||||||
|
ipcon_add_device(ipcon_p, device_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_strip_destroy(LEDStrip *led_strip) {
|
void led_strip_destroy(LEDStrip *led_strip) {
|
||||||
device_destroy(led_strip);
|
device_release(led_strip->p);
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bool *ret_response_expected) {
|
int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bool *ret_response_expected) {
|
||||||
@ -169,8 +261,8 @@ int led_strip_set_response_expected_all(LEDStrip *led_strip, bool response_expec
|
|||||||
return device_set_response_expected_all(led_strip->p, response_expected);
|
return device_set_response_expected_all(led_strip->p, response_expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
void led_strip_register_callback(LEDStrip *led_strip, uint8_t id, void *callback, void *user_data) {
|
void led_strip_register_callback(LEDStrip *led_strip, int16_t callback_id, void (*function)(void), void *user_data) {
|
||||||
device_register_callback(led_strip->p, id, callback, user_data);
|
device_register_callback(led_strip->p, callback_id, function, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]) {
|
int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]) {
|
||||||
@ -179,9 +271,15 @@ int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]) {
|
|||||||
|
|
||||||
int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[16], uint8_t g[16], uint8_t b[16]) {
|
int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[16], uint8_t g[16], uint8_t b[16]) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
SetRGBValues_ request;
|
SetRGBValues_Request request;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_RGB_VALUES, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_RGB_VALUES, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -194,18 +292,23 @@ int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
|
|||||||
memcpy(request.g, g, 16 * sizeof(uint8_t));
|
memcpy(request.g, g, 16 * sizeof(uint8_t));
|
||||||
memcpy(request.b, b, 16 * sizeof(uint8_t));
|
memcpy(request.b, b, 16 * sizeof(uint8_t));
|
||||||
|
|
||||||
ret = device_send_request(device_p, (Packet *)&request, NULL);
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[16], uint8_t ret_g[16], uint8_t ret_b[16]) {
|
int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[16], uint8_t ret_g[16], uint8_t ret_b[16]) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
GetRGBValues_ request;
|
GetRGBValues_Request request;
|
||||||
GetRGBValuesResponse_ response;
|
GetRGBValues_Response response;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_RGB_VALUES, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_RGB_VALUES, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -215,25 +318,30 @@ int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
|
|||||||
request.index = leconvert_uint16_to(index);
|
request.index = leconvert_uint16_to(index);
|
||||||
request.length = length;
|
request.length = length;
|
||||||
|
|
||||||
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(ret_r, response.r, 16 * sizeof(uint8_t));
|
memcpy(ret_r, response.r, 16 * sizeof(uint8_t));
|
||||||
memcpy(ret_g, response.g, 16 * sizeof(uint8_t));
|
memcpy(ret_g, response.g, 16 * sizeof(uint8_t));
|
||||||
memcpy(ret_b, response.b, 16 * sizeof(uint8_t));
|
memcpy(ret_b, response.b, 16 * sizeof(uint8_t));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration) {
|
int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
SetFrameDuration_ request;
|
SetFrameDuration_Request request;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_FRAME_DURATION, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_FRAME_DURATION, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -242,67 +350,80 @@ int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration) {
|
|||||||
|
|
||||||
request.duration = leconvert_uint16_to(duration);
|
request.duration = leconvert_uint16_to(duration);
|
||||||
|
|
||||||
ret = device_send_request(device_p, (Packet *)&request, NULL);
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_frame_duration(LEDStrip *led_strip, uint16_t *ret_duration) {
|
int led_strip_get_frame_duration(LEDStrip *led_strip, uint16_t *ret_duration) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
GetFrameDuration_ request;
|
GetFrameDuration_Request request;
|
||||||
GetFrameDurationResponse_ response;
|
GetFrameDuration_Response response;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_FRAME_DURATION, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_FRAME_DURATION, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ret_duration = leconvert_uint16_from(response.duration);
|
*ret_duration = leconvert_uint16_from(response.duration);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_supply_voltage(LEDStrip *led_strip, uint16_t *ret_voltage) {
|
int led_strip_get_supply_voltage(LEDStrip *led_strip, uint16_t *ret_voltage) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
GetSupplyVoltage_ request;
|
GetSupplyVoltage_Request request;
|
||||||
GetSupplyVoltageResponse_ response;
|
GetSupplyVoltage_Response response;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_SUPPLY_VOLTAGE, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_SUPPLY_VOLTAGE, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ret_voltage = leconvert_uint16_from(response.voltage);
|
*ret_voltage = leconvert_uint16_from(response.voltage);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency) {
|
int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
SetClockFrequency_ request;
|
SetClockFrequency_Request request;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CLOCK_FREQUENCY, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CLOCK_FREQUENCY, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -311,41 +432,287 @@ int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency) {
|
|||||||
|
|
||||||
request.frequency = leconvert_uint32_to(frequency);
|
request.frequency = leconvert_uint32_to(frequency);
|
||||||
|
|
||||||
ret = device_send_request(device_p, (Packet *)&request, NULL);
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_clock_frequency(LEDStrip *led_strip, uint32_t *ret_frequency) {
|
int led_strip_get_clock_frequency(LEDStrip *led_strip, uint32_t *ret_frequency) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
GetClockFrequency_ request;
|
GetClockFrequency_Request request;
|
||||||
GetClockFrequencyResponse_ response;
|
GetClockFrequency_Response response;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ret_frequency = leconvert_uint32_from(response.frequency);
|
*ret_frequency = leconvert_uint32_from(response.frequency);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_set_chip_type(LEDStrip *led_strip, uint16_t chip) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
SetChipType_Request request;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CHIP_TYPE, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.chip = leconvert_uint16_to(chip);
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_get_chip_type(LEDStrip *led_strip, uint16_t *ret_chip) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
GetChipType_Request request;
|
||||||
|
GetChipType_Response response;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CHIP_TYPE, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ret_chip = leconvert_uint16_from(response.chip);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_set_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[12], uint8_t g[12], uint8_t b[12], uint8_t w[12]) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
SetRGBWValues_Request request;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_RGBW_VALUES, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.index = leconvert_uint16_to(index);
|
||||||
|
request.length = length;
|
||||||
|
memcpy(request.r, r, 12 * sizeof(uint8_t));
|
||||||
|
memcpy(request.g, g, 12 * sizeof(uint8_t));
|
||||||
|
memcpy(request.b, b, 12 * sizeof(uint8_t));
|
||||||
|
memcpy(request.w, w, 12 * sizeof(uint8_t));
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_get_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[12], uint8_t ret_g[12], uint8_t ret_b[12], uint8_t ret_w[12]) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
GetRGBWValues_Request request;
|
||||||
|
GetRGBWValues_Response response;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_RGBW_VALUES, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.index = leconvert_uint16_to(index);
|
||||||
|
request.length = length;
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(ret_r, response.r, 12 * sizeof(uint8_t));
|
||||||
|
memcpy(ret_g, response.g, 12 * sizeof(uint8_t));
|
||||||
|
memcpy(ret_b, response.b, 12 * sizeof(uint8_t));
|
||||||
|
memcpy(ret_w, response.w, 12 * sizeof(uint8_t));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_set_channel_mapping(LEDStrip *led_strip, uint8_t mapping) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
SetChannelMapping_Request request;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CHANNEL_MAPPING, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.mapping = mapping;
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_get_channel_mapping(LEDStrip *led_strip, uint8_t *ret_mapping) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
GetChannelMapping_Request request;
|
||||||
|
GetChannelMapping_Response response;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CHANNEL_MAPPING, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ret_mapping = response.mapping;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_enable_frame_rendered_callback(LEDStrip *led_strip) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
EnableFrameRenderedCallback_Request request;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_ENABLE_FRAME_RENDERED_CALLBACK, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_disable_frame_rendered_callback(LEDStrip *led_strip) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
DisableFrameRenderedCallback_Request request;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_DISABLE_FRAME_RENDERED_CALLBACK, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int led_strip_is_frame_rendered_callback_enabled(LEDStrip *led_strip, bool *ret_enabled) {
|
||||||
|
DevicePrivate *device_p = led_strip->p;
|
||||||
|
IsFrameRenderedCallbackEnabled_Request request;
|
||||||
|
IsFrameRenderedCallbackEnabled_Response response;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = device_check_validity(device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_IS_FRAME_RENDERED_CALLBACK_ENABLED, device_p->ipcon_p, device_p);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ret_enabled = response.enabled != 0;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier) {
|
int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier) {
|
||||||
DevicePrivate *device_p = led_strip->p;
|
DevicePrivate *device_p = led_strip->p;
|
||||||
GetIdentity_ request;
|
GetIdentity_Request request;
|
||||||
GetIdentityResponse_ response;
|
GetIdentity_Response response;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_IDENTITY, device_p->ipcon_p, device_p);
|
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_IDENTITY, device_p->ipcon_p, device_p);
|
||||||
@ -354,20 +721,22 @@ int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connec
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
|
||||||
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
strncpy(ret_uid, response.uid, 8);
|
|
||||||
strncpy(ret_connected_uid, response.connected_uid, 8);
|
memcpy(ret_uid, response.uid, 8);
|
||||||
|
memcpy(ret_connected_uid, response.connected_uid, 8);
|
||||||
*ret_position = response.position;
|
*ret_position = response.position;
|
||||||
memcpy(ret_hardware_version, response.hardware_version, 3 * sizeof(uint8_t));
|
memcpy(ret_hardware_version, response.hardware_version, 3 * sizeof(uint8_t));
|
||||||
memcpy(ret_firmware_version, response.firmware_version, 3 * sizeof(uint8_t));
|
memcpy(ret_firmware_version, response.firmware_version, 3 * sizeof(uint8_t));
|
||||||
*ret_device_identifier = leconvert_uint16_from(response.device_identifier);
|
*ret_device_identifier = leconvert_uint16_from(response.device_identifier);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
1500
dependencies/build/tinkerforge/ip_connection.c
vendored
1500
dependencies/build/tinkerforge/ip_connection.c
vendored
File diff suppressed because it is too large
Load Diff
2
dependencies/external/protobuf
vendored
2
dependencies/external/protobuf
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 2c5fa078d8e86e5f4bd34e6f4c9ea9e8d7d4d44a
|
Subproject commit 7f94235e552599141950d7a4a3eaf93bc87d1b22
|
@ -1,11 +1,11 @@
|
|||||||
/* ***********************************************************
|
/* ***********************************************************
|
||||||
* This file was automatically generated on 2013-12-19. *
|
* This file was automatically generated on 2023-11-30. *
|
||||||
* *
|
* *
|
||||||
* Bindings Version 2.0.13 *
|
* C/C++ Bindings Version 2.1.33 *
|
||||||
* *
|
* *
|
||||||
* If you have a bugfix for this file and want to commit it, *
|
* If you have a bugfix for this file and want to commit it, *
|
||||||
* please fix the bug in the generator. You can find a link *
|
* please fix the bug in the generator. You can find a link *
|
||||||
* to the generator git on tinkerforge.com *
|
* to the generators git repository on tinkerforge.com *
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
#ifndef BRICKLET_LED_STRIP_H
|
#ifndef BRICKLET_LED_STRIP_H
|
||||||
@ -13,14 +13,18 @@
|
|||||||
|
|
||||||
#include "ip_connection.h"
|
#include "ip_connection.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \defgroup BrickletLEDStrip LEDStrip Bricklet
|
* \defgroup BrickletLEDStrip LED Strip Bricklet
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Device to control up to 320 RGB LEDs
|
* Controls up to 320 RGB LEDs
|
||||||
*/
|
*/
|
||||||
typedef Device LEDStrip;
|
typedef Device LEDStrip;
|
||||||
|
|
||||||
@ -59,6 +63,51 @@ typedef Device LEDStrip;
|
|||||||
*/
|
*/
|
||||||
#define LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY 8
|
#define LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY 8
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_SET_CHIP_TYPE 9
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_GET_CHIP_TYPE 10
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_SET_RGBW_VALUES 11
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_GET_RGBW_VALUES 12
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_SET_CHANNEL_MAPPING 13
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_GET_CHANNEL_MAPPING 14
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_ENABLE_FRAME_RENDERED_CALLBACK 15
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_DISABLE_FRAME_RENDERED_CALLBACK 16
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_FUNCTION_IS_FRAME_RENDERED_CALLBACK_ENABLED 17
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*/
|
*/
|
||||||
@ -68,21 +117,197 @@ typedef Device LEDStrip;
|
|||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Signature: \code void callback(uint16_t length, void *user_data) \endcode
|
* Signature: \code void callback(uint16_t length, void *user_data) \endcode
|
||||||
*
|
*
|
||||||
* This callback is triggered directly after a new frame is rendered.
|
* This callback is triggered directly after a new frame is rendered. The
|
||||||
*
|
* parameter is the number of RGB or RGBW LEDs in that frame.
|
||||||
|
*
|
||||||
* You should send the data for the next frame directly after this callback
|
* You should send the data for the next frame directly after this callback
|
||||||
* was triggered.
|
* was triggered.
|
||||||
*
|
*
|
||||||
* For an explanation of the general approach see {@link led_strip_set_rgb_values}.
|
* For an explanation of the general approach see {@link led_strip_set_rgb_values}.
|
||||||
*/
|
*/
|
||||||
#define LED_STRIP_CALLBACK_FRAME_RENDERED 6
|
#define LED_STRIP_CALLBACK_FRAME_RENDERED 6
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHIP_TYPE_WS2801 2801
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHIP_TYPE_WS2811 2811
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHIP_TYPE_WS2812 2812
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHIP_TYPE_LPD8806 8806
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHIP_TYPE_APA102 102
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RGB 6
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RBG 9
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BRG 33
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BGR 36
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GRB 18
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GBR 24
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RGBW 27
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RGWB 30
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RBGW 39
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RBWG 45
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RWGB 54
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_RWBG 57
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GRWB 78
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GRBW 75
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GBWR 108
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GBRW 99
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GWBR 120
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_GWRB 114
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BRGW 135
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BRWG 141
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BGRW 147
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BGWR 156
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BWRG 177
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_BWGR 180
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_WRBG 201
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_WRGB 198
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_WGBR 216
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_WGRB 210
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_WBGR 228
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_CHANNEL_MAPPING_WBRG 225
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* This constant is used to identify a LEDStrip Bricklet.
|
* This constant is used to identify a LED Strip Bricklet.
|
||||||
*
|
*
|
||||||
* The {@link led_strip_get_identity} function and the
|
* The {@link led_strip_get_identity} function and the
|
||||||
* {@link IPCON_CALLBACK_ENUMERATE} callback of the IP Connection have a
|
* {@link IPCON_CALLBACK_ENUMERATE} callback of the IP Connection have a
|
||||||
@ -90,6 +315,13 @@ typedef Device LEDStrip;
|
|||||||
*/
|
*/
|
||||||
#define LED_STRIP_DEVICE_IDENTIFIER 231
|
#define LED_STRIP_DEVICE_IDENTIFIER 231
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* This constant represents the display name of a LED Strip Bricklet.
|
||||||
|
*/
|
||||||
|
#define LED_STRIP_DEVICE_DISPLAY_NAME "LED Strip Bricklet"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
@ -122,7 +354,7 @@ void led_strip_destroy(LEDStrip *led_strip);
|
|||||||
* Enabling the response expected flag for a setter function allows to
|
* Enabling the response expected flag for a setter function allows to
|
||||||
* detect timeouts and other error conditions calls of this setter as well.
|
* detect timeouts and other error conditions calls of this setter as well.
|
||||||
* The device will then send a response for this purpose. If this flag is
|
* The device will then send a response for this purpose. If this flag is
|
||||||
* disabled for a setter function then no response is send and errors are
|
* disabled for a setter function then no response is sent and errors are
|
||||||
* silently ignored, because they cannot be detected.
|
* silently ignored, because they cannot be detected.
|
||||||
*/
|
*/
|
||||||
int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bool *ret_response_expected);
|
int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bool *ret_response_expected);
|
||||||
@ -133,13 +365,12 @@ int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bo
|
|||||||
* Changes the response expected flag of the function specified by the
|
* Changes the response expected flag of the function specified by the
|
||||||
* \c function_id parameter. This flag can only be changed for setter
|
* \c function_id parameter. This flag can only be changed for setter
|
||||||
* (default value: *false*) and callback configuration functions
|
* (default value: *false*) and callback configuration functions
|
||||||
* (default value: *true*). For getter functions it is always enabled and
|
* (default value: *true*). For getter functions it is always enabled.
|
||||||
* callbacks it is always disabled.
|
|
||||||
*
|
*
|
||||||
* Enabling the response expected flag for a setter function allows to detect
|
* Enabling the response expected flag for a setter function allows to detect
|
||||||
* timeouts and other error conditions calls of this setter as well. The device
|
* timeouts and other error conditions calls of this setter as well. The device
|
||||||
* will then send a response for this purpose. If this flag is disabled for a
|
* will then send a response for this purpose. If this flag is disabled for a
|
||||||
* setter function then no response is send and errors are silently ignored,
|
* setter function then no response is sent and errors are silently ignored,
|
||||||
* because they cannot be detected.
|
* because they cannot be detected.
|
||||||
*/
|
*/
|
||||||
int led_strip_set_response_expected(LEDStrip *led_strip, uint8_t function_id, bool response_expected);
|
int led_strip_set_response_expected(LEDStrip *led_strip, uint8_t function_id, bool response_expected);
|
||||||
@ -155,10 +386,10 @@ int led_strip_set_response_expected_all(LEDStrip *led_strip, bool response_expec
|
|||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Registers a callback with ID \c id to the function \c callback. The
|
* Registers the given \c function with the given \c callback_id. The
|
||||||
* \c user_data will be given as a parameter of the callback.
|
* \c user_data will be passed as the last parameter to the \c function.
|
||||||
*/
|
*/
|
||||||
void led_strip_register_callback(LEDStrip *led_strip, uint8_t id, void *callback, void *user_data);
|
void led_strip_register_callback(LEDStrip *led_strip, int16_t callback_id, void (*function)(void), void *user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
@ -171,38 +402,40 @@ int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]);
|
|||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Sets the *rgb* values for the LEDs with the given *length* starting
|
* Sets *length* RGB values for the LEDs starting from *index*.
|
||||||
* from *index*.
|
*
|
||||||
*
|
* To make the colors show correctly you need to configure the chip type
|
||||||
* The maximum length is 16, the index goes from 0 to 319 and the rgb values
|
* ({@link led_strip_set_chip_type}) and a 3-channel channel mapping ({@link led_strip_set_channel_mapping})
|
||||||
* have 8 bits each.
|
* according to the connected LEDs.
|
||||||
*
|
*
|
||||||
* Example: If you set
|
* Example: If you set
|
||||||
*
|
*
|
||||||
* * index to 5,
|
* * index to 5,
|
||||||
* * length to 3,
|
* * length to 3,
|
||||||
* * r to [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* * r to [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
* * g to [0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] and
|
* * g to [0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] and
|
||||||
* * b to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
* * b to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
*
|
*
|
||||||
* the LED with index 5 will be red, 6 will be green and 7 will be blue.
|
* the LED with index 5 will be red, 6 will be green and 7 will be blue.
|
||||||
*
|
*
|
||||||
|
* \note Depending on the LED circuitry colors can be permuted.
|
||||||
|
*
|
||||||
* The colors will be transfered to actual LEDs when the next
|
* The colors will be transfered to actual LEDs when the next
|
||||||
* frame duration ends, see {@link led_strip_set_frame_duration}.
|
* frame duration ends, see {@link led_strip_set_frame_duration}.
|
||||||
*
|
*
|
||||||
* Generic approach:
|
* Generic approach:
|
||||||
*
|
*
|
||||||
* * Set the frame duration to a value that represents
|
* * Set the frame duration to a value that represents
|
||||||
* the number of frames per second you want to achieve.
|
* the number of frames per second you want to achieve.
|
||||||
* * Set all of the LED colors for one frame.
|
* * Set all of the LED colors for one frame.
|
||||||
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
||||||
* * Set all of the LED colors for next frame.
|
* * Set all of the LED colors for next frame.
|
||||||
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
||||||
* * and so on.
|
* * and so on.
|
||||||
*
|
*
|
||||||
* This approach ensures that you can change the LED colors with
|
* This approach ensures that you can change the LED colors with
|
||||||
* a fixed frame rate.
|
* a fixed frame rate.
|
||||||
*
|
*
|
||||||
* The actual number of controllable LEDs depends on the number of free
|
* The actual number of controllable LEDs depends on the number of free
|
||||||
* Bricklet ports. See :ref:`here <led_strip_bricklet_ram_constraints>` for more
|
* Bricklet ports. See :ref:`here <led_strip_bricklet_ram_constraints>` for more
|
||||||
* information. A call of {@link led_strip_set_rgb_values} with index + length above the
|
* information. A call of {@link led_strip_set_rgb_values} with index + length above the
|
||||||
@ -213,9 +446,9 @@ int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
|
|||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Returns the rgb with the given *length* starting from the
|
* Returns *length* R, G and B values starting from the
|
||||||
* given *index*.
|
* given LED *index*.
|
||||||
*
|
*
|
||||||
* The values are the last values that were set by {@link led_strip_set_rgb_values}.
|
* The values are the last values that were set by {@link led_strip_set_rgb_values}.
|
||||||
*/
|
*/
|
||||||
int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[16], uint8_t ret_g[16], uint8_t ret_b[16]);
|
int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[16], uint8_t ret_g[16], uint8_t ret_b[16]);
|
||||||
@ -223,14 +456,12 @@ int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
|
|||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Sets the frame duration in ms.
|
* Sets the frame duration.
|
||||||
*
|
*
|
||||||
* Example: If you want to achieve 20 frames per second, you should
|
* Example: If you want to achieve 20 frames per second, you should
|
||||||
* set the frame duration to 50ms (50ms * 20 = 1 second).
|
* set the frame duration to 50ms (50ms * 20 = 1 second).
|
||||||
*
|
*
|
||||||
* For an explanation of the general approach see {@link led_strip_set_rgb_values}.
|
* For an explanation of the general approach see {@link led_strip_set_rgb_values}.
|
||||||
*
|
|
||||||
* Default value: 100ms (10 frames per second).
|
|
||||||
*/
|
*/
|
||||||
int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration);
|
int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration);
|
||||||
|
|
||||||
@ -244,58 +475,223 @@ int led_strip_get_frame_duration(LEDStrip *led_strip, uint16_t *ret_duration);
|
|||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Returns the current supply voltage of the LEDs. The voltage is given in mV.
|
* Returns the current supply voltage of the LEDs.
|
||||||
*/
|
*/
|
||||||
int led_strip_get_supply_voltage(LEDStrip *led_strip, uint16_t *ret_voltage);
|
int led_strip_get_supply_voltage(LEDStrip *led_strip, uint16_t *ret_voltage);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Sets the frequency of the clock in Hz. The range is 10000Hz (10kHz) up to
|
* Sets the frequency of the clock.
|
||||||
* 2000000Hz (2MHz).
|
*
|
||||||
*
|
|
||||||
* The Bricklet will choose the nearest achievable frequency, which may
|
* The Bricklet will choose the nearest achievable frequency, which may
|
||||||
* be off by a few Hz. You can get the exact frequency that is used by
|
* be off by a few Hz. You can get the exact frequency that is used by
|
||||||
* calling {@link led_strip_get_clock_frequency}.
|
* calling {@link led_strip_get_clock_frequency}.
|
||||||
*
|
*
|
||||||
* If you have problems with flickering LEDs, they may be bits flipping. You
|
* If you have problems with flickering LEDs, they may be bits flipping. You
|
||||||
* can fix this by either making the connection between the LEDs and the
|
* can fix this by either making the connection between the LEDs and the
|
||||||
* Bricklet shorter or by reducing the frequency.
|
* Bricklet shorter or by reducing the frequency.
|
||||||
*
|
*
|
||||||
* With a decreasing frequency your maximum frames per second will decrease
|
* With a decreasing frequency your maximum frames per second will decrease
|
||||||
* too.
|
* too.
|
||||||
*
|
*
|
||||||
* The default value is 1.66MHz.
|
|
||||||
*
|
|
||||||
* \note
|
* \note
|
||||||
* The frequency in firmware version 2.0.0 is fixed at 2MHz.
|
* The frequency in firmware version 2.0.0 is fixed at 2MHz.
|
||||||
*
|
*
|
||||||
* .. versionadded:: 2.0.1~(Plugin)
|
* .. versionadded:: 2.0.1$nbsp;(Plugin)
|
||||||
*/
|
*/
|
||||||
int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency);
|
int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Returns the currently used clock frequency.
|
* Returns the currently used clock frequency as set by {@link led_strip_set_clock_frequency}.
|
||||||
*
|
*
|
||||||
* .. versionadded:: 2.0.1~(Plugin)
|
* .. versionadded:: 2.0.1$nbsp;(Plugin)
|
||||||
*/
|
*/
|
||||||
int led_strip_get_clock_frequency(LEDStrip *led_strip, uint32_t *ret_frequency);
|
int led_strip_get_clock_frequency(LEDStrip *led_strip, uint32_t *ret_frequency);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup BrickletLEDStrip
|
* \ingroup BrickletLEDStrip
|
||||||
*
|
*
|
||||||
* Returns the UID, the UID where the Bricklet is connected to,
|
* Sets the type of the LED driver chip. We currently support the chips
|
||||||
|
*
|
||||||
|
* * WS2801,
|
||||||
|
* * WS2811,
|
||||||
|
* * WS2812 / SK6812 / NeoPixel RGB,
|
||||||
|
* * SK6812RGBW / NeoPixel RGBW (Chip Type = WS2812),
|
||||||
|
* * LPD8806 and
|
||||||
|
* * APA102 / DotStar.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.2$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_set_chip_type(LEDStrip *led_strip, uint16_t chip);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Returns the currently used chip type as set by {@link led_strip_set_chip_type}.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.2$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_get_chip_type(LEDStrip *led_strip, uint16_t *ret_chip);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Sets *length* RGBW values for the LEDs starting from *index*.
|
||||||
|
*
|
||||||
|
* To make the colors show correctly you need to configure the chip type
|
||||||
|
* ({@link led_strip_set_chip_type}) and a 4-channel channel mapping ({@link led_strip_set_channel_mapping})
|
||||||
|
* according to the connected LEDs.
|
||||||
|
*
|
||||||
|
* The maximum length is 12, the index goes from 0 to 239 and the rgbw values
|
||||||
|
* have 8 bits each.
|
||||||
|
*
|
||||||
|
* Example: If you set
|
||||||
|
*
|
||||||
|
* * index to 5,
|
||||||
|
* * length to 4,
|
||||||
|
* * r to [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
* * g to [0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
* * b to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0] and
|
||||||
|
* * w to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
|
*
|
||||||
|
* the LED with index 5 will be red, 6 will be green, 7 will be blue and 8 will be white.
|
||||||
|
*
|
||||||
|
* \note Depending on the LED circuitry colors can be permuted.
|
||||||
|
*
|
||||||
|
* The colors will be transfered to actual LEDs when the next
|
||||||
|
* frame duration ends, see {@link led_strip_set_frame_duration}.
|
||||||
|
*
|
||||||
|
* Generic approach:
|
||||||
|
*
|
||||||
|
* * Set the frame duration to a value that represents
|
||||||
|
* the number of frames per second you want to achieve.
|
||||||
|
* * Set all of the LED colors for one frame.
|
||||||
|
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
||||||
|
* * Set all of the LED colors for next frame.
|
||||||
|
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
||||||
|
* * and so on.
|
||||||
|
*
|
||||||
|
* This approach ensures that you can change the LED colors with
|
||||||
|
* a fixed frame rate.
|
||||||
|
*
|
||||||
|
* The actual number of controllable LEDs depends on the number of free
|
||||||
|
* Bricklet ports. See :ref:`here <led_strip_bricklet_ram_constraints>` for more
|
||||||
|
* information. A call of {@link led_strip_set_rgbw_values} with index + length above the
|
||||||
|
* bounds is ignored completely.
|
||||||
|
*
|
||||||
|
* The LPD8806 LED driver chips have 7-bit channels for RGB. Internally the LED
|
||||||
|
* Strip Bricklets divides the 8-bit values set using this function by 2 to make
|
||||||
|
* them 7-bit. Therefore, you can just use the normal value range (0-255) for
|
||||||
|
* LPD8806 LEDs.
|
||||||
|
*
|
||||||
|
* The brightness channel of the APA102 LED driver chips has 5-bit. Internally the
|
||||||
|
* LED Strip Bricklets divides the 8-bit values set using this function by 8 to make
|
||||||
|
* them 5-bit. Therefore, you can just use the normal value range (0-255) for
|
||||||
|
* the brightness channel of APA102 LEDs.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_set_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[12], uint8_t g[12], uint8_t b[12], uint8_t w[12]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Returns *length* RGBW values starting from the given *index*.
|
||||||
|
*
|
||||||
|
* The values are the last values that were set by {@link led_strip_set_rgbw_values}.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_get_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[12], uint8_t ret_g[12], uint8_t ret_b[12], uint8_t ret_w[12]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Sets the channel mapping for the connected LEDs.
|
||||||
|
*
|
||||||
|
* {@link led_strip_set_rgb_values} and {@link led_strip_set_rgbw_values} take the data in RGB(W) order.
|
||||||
|
* But the connected LED driver chips might have their 3 or 4 channels in a
|
||||||
|
* different order. For example, the WS2801 chips typically use BGR order, the
|
||||||
|
* WS2812 chips typically use GRB order and the APA102 chips typically use WBGR
|
||||||
|
* order.
|
||||||
|
*
|
||||||
|
* The APA102 chips are special. They have three 8-bit channels for RGB
|
||||||
|
* and an additional 5-bit channel for the overall brightness of the RGB LED
|
||||||
|
* making them 4-channel chips. Internally the brightness channel is the first
|
||||||
|
* channel, therefore one of the Wxyz channel mappings should be used. Then
|
||||||
|
* the W channel controls the brightness.
|
||||||
|
*
|
||||||
|
* If a 3-channel mapping is selected then {@link led_strip_set_rgb_values} has to be used.
|
||||||
|
* Calling {@link led_strip_set_rgbw_values} with a 3-channel mapping will produce incorrect
|
||||||
|
* results. Vice-versa if a 4-channel mapping is selected then
|
||||||
|
* {@link led_strip_set_rgbw_values} has to be used. Calling {@link led_strip_set_rgb_values} with a
|
||||||
|
* 4-channel mapping will produce incorrect results.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_set_channel_mapping(LEDStrip *led_strip, uint8_t mapping);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Returns the currently used channel mapping as set by {@link led_strip_set_channel_mapping}.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_get_channel_mapping(LEDStrip *led_strip, uint8_t *ret_mapping);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Enables the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
||||||
|
*
|
||||||
|
* By default the callback is enabled.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_enable_frame_rendered_callback(LEDStrip *led_strip);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Disables the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
|
||||||
|
*
|
||||||
|
* By default the callback is enabled.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_disable_frame_rendered_callback(LEDStrip *led_strip);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Returns *true* if the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback is enabled, *false* otherwise.
|
||||||
|
*
|
||||||
|
* .. versionadded:: 2.0.6$nbsp;(Plugin)
|
||||||
|
*/
|
||||||
|
int led_strip_is_frame_rendered_callback_enabled(LEDStrip *led_strip, bool *ret_enabled);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup BrickletLEDStrip
|
||||||
|
*
|
||||||
|
* Returns the UID, the UID where the Bricklet is connected to,
|
||||||
* the position, the hardware and firmware version as well as the
|
* the position, the hardware and firmware version as well as the
|
||||||
* device identifier.
|
* device identifier.
|
||||||
*
|
*
|
||||||
* The position can be 'a', 'b', 'c' or 'd'.
|
* The position can be 'a', 'b', 'c', 'd', 'e', 'f', 'g' or 'h' (Bricklet Port).
|
||||||
*
|
* A Bricklet connected to an :ref:`Isolator Bricklet <isolator_bricklet>` is always at
|
||||||
* The device identifiers can be found :ref:`here <device_identifier>`.
|
* position 'z'.
|
||||||
*
|
*
|
||||||
* .. versionadded:: 2.0.0~(Plugin)
|
* The device identifier numbers can be found :ref:`here <device_identifier>`.
|
||||||
|
* |device_identifier_constant|
|
||||||
*/
|
*/
|
||||||
int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier);
|
int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
168
dependencies/include/tinkerforge/ip_connection.h
vendored
168
dependencies/include/tinkerforge/ip_connection.h
vendored
@ -1,9 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2012-2013 Matthias Bolte <matthias@tinkerforge.com>
|
* Copyright (C) 2012-2014, 2019-2020 Matthias Bolte <matthias@tinkerforge.com>
|
||||||
* Copyright (C) 2011 Olaf Lüke <olaf@tinkerforge.com>
|
* Copyright (C) 2011 Olaf Lüke <olaf@tinkerforge.com>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms of this file,
|
* Redistribution and use in source and binary forms of this file,
|
||||||
* with or without modification, are permitted.
|
* with or without modification, are permitted. See the Creative
|
||||||
|
* Commons Zero (CC0 1.0) License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IP_CONNECTION_H
|
#ifndef IP_CONNECTION_H
|
||||||
@ -16,11 +17,12 @@
|
|||||||
#ifndef __STDC_LIMIT_MACROS
|
#ifndef __STDC_LIMIT_MACROS
|
||||||
#define __STDC_LIMIT_MACROS
|
#define __STDC_LIMIT_MACROS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#if !defined __cplusplus && defined __GNUC__
|
#if !defined __cplusplus && (defined __GNUC__ || (defined _MSC_VER && _MSC_VER >= 1600))
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -34,6 +36,10 @@
|
|||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
E_OK = 0,
|
E_OK = 0,
|
||||||
E_TIMEOUT = -1,
|
E_TIMEOUT = -1,
|
||||||
@ -46,9 +52,21 @@ enum {
|
|||||||
E_NOT_CONNECTED = -8,
|
E_NOT_CONNECTED = -8,
|
||||||
E_INVALID_PARAMETER = -9, // error response from device
|
E_INVALID_PARAMETER = -9, // error response from device
|
||||||
E_NOT_SUPPORTED = -10, // error response from device
|
E_NOT_SUPPORTED = -10, // error response from device
|
||||||
E_UNKNOWN_ERROR_CODE = -11 // error response from device
|
E_UNKNOWN_ERROR_CODE = -11, // error response from device
|
||||||
|
E_STREAM_OUT_OF_SYNC = -12,
|
||||||
|
E_INVALID_UID = -13,
|
||||||
|
E_NON_ASCII_CHAR_IN_SECRET = -14,
|
||||||
|
E_WRONG_DEVICE_TYPE = -15,
|
||||||
|
E_DEVICE_REPLACED = -16,
|
||||||
|
E_WRONG_RESPONSE_LENGTH = -17
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef IPCON_EXPOSE_MILLISLEEP
|
||||||
|
|
||||||
|
void millisleep(uint32_t msec);
|
||||||
|
|
||||||
|
#endif // IPCON_EXPOSE_MILLISLEEP
|
||||||
|
|
||||||
#ifdef IPCON_EXPOSE_INTERNALS
|
#ifdef IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
typedef struct _Socket Socket;
|
typedef struct _Socket Socket;
|
||||||
@ -113,7 +131,6 @@ typedef struct _QueueItem {
|
|||||||
struct _QueueItem *next;
|
struct _QueueItem *next;
|
||||||
int kind;
|
int kind;
|
||||||
void *data;
|
void *data;
|
||||||
int length;
|
|
||||||
} QueueItem;
|
} QueueItem;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -130,7 +147,7 @@ typedef struct {
|
|||||||
#elif defined __GNUC__
|
#elif defined __GNUC__
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// workaround struct packing bug in GCC 4.7 on Windows
|
// workaround struct packing bug in GCC 4.7 on Windows
|
||||||
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
|
||||||
#define ATTRIBUTE_PACKED __attribute__((gcc_struct, packed))
|
#define ATTRIBUTE_PACKED __attribute__((gcc_struct, packed))
|
||||||
#else
|
#else
|
||||||
#define ATTRIBUTE_PACKED __attribute__((packed))
|
#define ATTRIBUTE_PACKED __attribute__((packed))
|
||||||
@ -140,7 +157,7 @@ typedef struct {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t uid;
|
uint32_t uid; // always little endian
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
uint8_t function_id;
|
uint8_t function_id;
|
||||||
uint8_t sequence_number_and_options;
|
uint8_t sequence_number_and_options;
|
||||||
@ -168,24 +185,35 @@ typedef struct _DevicePrivate DevicePrivate;
|
|||||||
#ifdef IPCON_EXPOSE_INTERNALS
|
#ifdef IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
typedef struct _CallbackContext CallbackContext;
|
typedef struct _CallbackContext CallbackContext;
|
||||||
|
typedef struct _HighLevelCallback HighLevelCallback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
struct _HighLevelCallback {
|
||||||
|
bool exists;
|
||||||
|
void *data;
|
||||||
|
size_t length;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void (*EnumerateCallbackFunction)(const char *uid,
|
typedef void (*EnumerateCallbackFunction)(const char *uid,
|
||||||
const char *connected_uid,
|
const char *connected_uid,
|
||||||
char position,
|
char position,
|
||||||
uint8_t hardware_version[3],
|
uint8_t hardware_version[3],
|
||||||
uint8_t firmware_version[3],
|
uint8_t firmware_version[3],
|
||||||
uint16_t device_identifier,
|
uint16_t device_identifier,
|
||||||
uint8_t enumeration_type,
|
uint8_t enumeration_type,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
typedef void (*ConnectedCallbackFunction)(uint8_t connect_reason,
|
typedef void (*ConnectedCallbackFunction)(uint8_t connect_reason,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
typedef void (*DisconnectedCallbackFunction)(uint8_t disconnect_reason,
|
typedef void (*DisconnectedCallbackFunction)(uint8_t disconnect_reason,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
#ifdef IPCON_EXPOSE_INTERNALS
|
#ifdef IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
|
typedef void (*CallbackFunction)(void);
|
||||||
typedef void (*CallbackWrapperFunction)(DevicePrivate *device_p, Packet *packet);
|
typedef void (*CallbackWrapperFunction)(DevicePrivate *device_p, Packet *packet);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -201,16 +229,31 @@ struct _Device {
|
|||||||
|
|
||||||
#define DEVICE_NUM_FUNCTION_IDS 256
|
#define DEVICE_NUM_FUNCTION_IDS 256
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DEVICE_IDENTIFIER_CHECK_PENDING = 0,
|
||||||
|
DEVICE_IDENTIFIER_CHECK_MATCH = 1,
|
||||||
|
DEVICE_IDENTIFIER_CHECK_MISMATCH = 2
|
||||||
|
} DeviceIdentifierCheck;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
struct _DevicePrivate {
|
struct _DevicePrivate {
|
||||||
uint32_t uid;
|
int ref_count;
|
||||||
|
|
||||||
|
bool replaced;
|
||||||
|
|
||||||
|
uint32_t uid; // always host endian
|
||||||
|
bool uid_valid;
|
||||||
|
|
||||||
IPConnectionPrivate *ipcon_p;
|
IPConnectionPrivate *ipcon_p;
|
||||||
|
|
||||||
uint8_t api_version[3];
|
uint8_t api_version[3];
|
||||||
|
|
||||||
|
uint16_t device_identifier;
|
||||||
|
Mutex device_identifier_mutex;
|
||||||
|
DeviceIdentifierCheck device_identifier_check; // protected by device_identifier_mutex
|
||||||
|
|
||||||
Mutex request_mutex;
|
Mutex request_mutex;
|
||||||
|
|
||||||
uint8_t expected_response_function_id; // protected by request_mutex
|
uint8_t expected_response_function_id; // protected by request_mutex
|
||||||
@ -220,9 +263,12 @@ struct _DevicePrivate {
|
|||||||
Event response_event;
|
Event response_event;
|
||||||
int response_expected[DEVICE_NUM_FUNCTION_IDS];
|
int response_expected[DEVICE_NUM_FUNCTION_IDS];
|
||||||
|
|
||||||
void *registered_callbacks[DEVICE_NUM_FUNCTION_IDS];
|
Mutex stream_mutex;
|
||||||
void *registered_callback_user_data[DEVICE_NUM_FUNCTION_IDS];
|
|
||||||
|
CallbackFunction registered_callbacks[DEVICE_NUM_FUNCTION_IDS * 2];
|
||||||
|
void *registered_callback_user_data[DEVICE_NUM_FUNCTION_IDS * 2];
|
||||||
CallbackWrapperFunction callback_wrappers[DEVICE_NUM_FUNCTION_IDS];
|
CallbackWrapperFunction callback_wrappers[DEVICE_NUM_FUNCTION_IDS];
|
||||||
|
HighLevelCallback high_level_callbacks[DEVICE_NUM_FUNCTION_IDS];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -231,7 +277,6 @@ struct _DevicePrivate {
|
|||||||
enum {
|
enum {
|
||||||
DEVICE_RESPONSE_EXPECTED_INVALID_FUNCTION_ID = 0,
|
DEVICE_RESPONSE_EXPECTED_INVALID_FUNCTION_ID = 0,
|
||||||
DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE, // getter
|
DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE, // getter
|
||||||
DEVICE_RESPONSE_EXPECTED_ALWAYS_FALSE, // callback
|
|
||||||
DEVICE_RESPONSE_EXPECTED_TRUE, // setter
|
DEVICE_RESPONSE_EXPECTED_TRUE, // setter
|
||||||
DEVICE_RESPONSE_EXPECTED_FALSE // setter, default
|
DEVICE_RESPONSE_EXPECTED_FALSE // setter, default
|
||||||
};
|
};
|
||||||
@ -240,25 +285,26 @@ enum {
|
|||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
void device_create(Device *device, const char *uid,
|
void device_create(Device *device, const char *uid,
|
||||||
IPConnectionPrivate *ipcon_p, uint8_t api_version_major,
|
IPConnectionPrivate *ipcon_p, uint8_t api_version_major,
|
||||||
uint8_t api_version_minor, uint8_t api_version_release);
|
uint8_t api_version_minor, uint8_t api_version_release,
|
||||||
|
uint16_t device_identifier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
void device_destroy(Device *device);
|
void device_release(DevicePrivate *device_p);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
int device_get_response_expected(DevicePrivate *device_p, uint8_t function_id,
|
int device_get_response_expected(DevicePrivate *device_p, uint8_t function_id,
|
||||||
bool *ret_response_expected);
|
bool *ret_response_expected);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
int device_set_response_expected(DevicePrivate *device_p, uint8_t function_id,
|
int device_set_response_expected(DevicePrivate *device_p, uint8_t function_id,
|
||||||
bool response_expected);
|
bool response_expected);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
@ -268,8 +314,8 @@ int device_set_response_expected_all(DevicePrivate *device_p, bool response_expe
|
|||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
void device_register_callback(DevicePrivate *device_p, uint8_t id, void *callback,
|
void device_register_callback(DevicePrivate *device_p, int16_t callback_id,
|
||||||
void *user_data);
|
void (*function)(void), void *user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
@ -279,7 +325,13 @@ int device_get_api_version(DevicePrivate *device_p, uint8_t ret_api_version[3]);
|
|||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
int device_send_request(DevicePrivate *device_p, Packet *request, Packet *response);
|
int device_send_request(DevicePrivate *device_p, Packet *request, Packet *response,
|
||||||
|
int expected_response_length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
int device_check_validity(DevicePrivate *device_p);
|
||||||
|
|
||||||
#endif // IPCON_EXPOSE_INTERNALS
|
#endif // IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
@ -347,6 +399,12 @@ struct _IPConnection {
|
|||||||
#ifdef IPCON_EXPOSE_INTERNALS
|
#ifdef IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
#define IPCON_NUM_CALLBACK_IDS 256
|
#define IPCON_NUM_CALLBACK_IDS 256
|
||||||
|
#define IPCON_MAX_SECRET_LENGTH 64
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
typedef Device BrickDaemon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
@ -368,9 +426,13 @@ struct _IPConnectionPrivate {
|
|||||||
Mutex sequence_number_mutex;
|
Mutex sequence_number_mutex;
|
||||||
uint8_t next_sequence_number; // protected by sequence_number_mutex
|
uint8_t next_sequence_number; // protected by sequence_number_mutex
|
||||||
|
|
||||||
|
Mutex authentication_mutex; // protects authentication handshake
|
||||||
|
uint32_t next_authentication_nonce; // protected by authentication_mutex
|
||||||
|
|
||||||
|
Mutex devices_ref_mutex; // protects DevicePrivate.ref_count
|
||||||
Table devices;
|
Table devices;
|
||||||
|
|
||||||
void *registered_callbacks[IPCON_NUM_CALLBACK_IDS];
|
CallbackFunction registered_callbacks[IPCON_NUM_CALLBACK_IDS];
|
||||||
void *registered_callback_user_data[IPCON_NUM_CALLBACK_IDS];
|
void *registered_callback_user_data[IPCON_NUM_CALLBACK_IDS];
|
||||||
|
|
||||||
Mutex socket_mutex;
|
Mutex socket_mutex;
|
||||||
@ -387,6 +449,8 @@ struct _IPConnectionPrivate {
|
|||||||
Event disconnect_probe_event;
|
Event disconnect_probe_event;
|
||||||
|
|
||||||
Semaphore wait;
|
Semaphore wait;
|
||||||
|
|
||||||
|
BrickDaemon brickd;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // IPCON_EXPOSE_INTERNALS
|
#endif // IPCON_EXPOSE_INTERNALS
|
||||||
@ -431,6 +495,21 @@ int ipcon_connect(IPConnection *ipcon, const char *host, uint16_t port);
|
|||||||
*/
|
*/
|
||||||
int ipcon_disconnect(IPConnection *ipcon);
|
int ipcon_disconnect(IPConnection *ipcon);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup IPConnection
|
||||||
|
*
|
||||||
|
* Performs an authentication handshake with the connected Brick Daemon or
|
||||||
|
* WIFI/Ethernet Extension. If the handshake succeeds the connection switches
|
||||||
|
* from non-authenticated to authenticated state and communication can
|
||||||
|
* continue as normal. If the handshake fails then the connection gets closed.
|
||||||
|
* Authentication can fail if the wrong secret was used or if authentication
|
||||||
|
* is not enabled at all on the Brick Daemon or the WIFI/Ethernet Extension.
|
||||||
|
*
|
||||||
|
* For more information about authentication see
|
||||||
|
* https://www.tinkerforge.com/en/doc/Tutorials/Tutorial_Authentication/Tutorial.html
|
||||||
|
*/
|
||||||
|
int ipcon_authenticate(IPConnection *ipcon, const char *secret);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup IPConnection
|
* \ingroup IPConnection
|
||||||
*
|
*
|
||||||
@ -514,19 +593,25 @@ void ipcon_unwait(IPConnection *ipcon);
|
|||||||
/**
|
/**
|
||||||
* \ingroup IPConnection
|
* \ingroup IPConnection
|
||||||
*
|
*
|
||||||
* Registers a callback for a given ID.
|
* Registers the given \c function with the given \c callback_id. The
|
||||||
|
* \c user_data will be passed as the last parameter to the \c function.
|
||||||
*/
|
*/
|
||||||
void ipcon_register_callback(IPConnection *ipcon, uint8_t id,
|
void ipcon_register_callback(IPConnection *ipcon, int16_t callback_id,
|
||||||
void *callback, void *user_data);
|
void (*function)(void), void *user_data);
|
||||||
|
|
||||||
#ifdef IPCON_EXPOSE_INTERNALS
|
#ifdef IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
void ipcon_add_device(IPConnectionPrivate *ipcon_p, DevicePrivate *device_p);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
int packet_header_create(PacketHeader *header, uint8_t length,
|
int packet_header_create(PacketHeader *header, uint8_t length,
|
||||||
uint8_t function_id, IPConnectionPrivate *ipcon_p,
|
uint8_t function_id, IPConnectionPrivate *ipcon_p,
|
||||||
DevicePrivate *device_p);
|
DevicePrivate *device_p);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
@ -536,8 +621,7 @@ uint8_t packet_header_get_sequence_number(PacketHeader *header);
|
|||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
void packet_header_set_sequence_number(PacketHeader *header,
|
void packet_header_set_sequence_number(PacketHeader *header, uint8_t sequence_number);
|
||||||
uint8_t sequence_number);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
@ -547,8 +631,7 @@ uint8_t packet_header_get_response_expected(PacketHeader *header);
|
|||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
*/
|
*/
|
||||||
void packet_header_set_response_expected(PacketHeader *header,
|
void packet_header_set_response_expected(PacketHeader *header, bool response_expected);
|
||||||
uint8_t response_expected);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
@ -625,6 +708,15 @@ uint64_t leconvert_uint64_from(uint64_t little);
|
|||||||
*/
|
*/
|
||||||
float leconvert_float_from(float little);
|
float leconvert_float_from(float little);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
char *string_copy(char *dest, const char *src, size_t n);
|
||||||
|
|
||||||
#endif // IPCON_EXPOSE_INTERNALS
|
#endif // IPCON_EXPOSE_INTERNALS
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -82,6 +82,7 @@ private:
|
|||||||
CECConfig _cecConfig {};
|
CECConfig _cecConfig {};
|
||||||
|
|
||||||
bool _isInitialised;
|
bool _isInitialised;
|
||||||
|
bool _isOpen;
|
||||||
bool _isEnabled;
|
bool _isEnabled;
|
||||||
|
|
||||||
int _buttonReleaseDelayMs;
|
int _buttonReleaseDelayMs;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef PIXELFORMAT_H
|
||||||
|
#define PIXELFORMAT_H
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
@ -14,9 +15,7 @@ enum class PixelFormat {
|
|||||||
BGR32,
|
BGR32,
|
||||||
NV12,
|
NV12,
|
||||||
I420,
|
I420,
|
||||||
#ifdef HAVE_TURBO_JPEG
|
|
||||||
MJPEG,
|
MJPEG,
|
||||||
#endif
|
|
||||||
NO_CHANGE
|
NO_CHANGE
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,12 +56,10 @@ inline PixelFormat parsePixelFormat(const QString& pixelFormat)
|
|||||||
{
|
{
|
||||||
return PixelFormat::NV12;
|
return PixelFormat::NV12;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_TURBO_JPEG
|
|
||||||
else if (format.compare("mjpeg") == 0)
|
else if (format.compare("mjpeg") == 0)
|
||||||
{
|
{
|
||||||
return PixelFormat::MJPEG;
|
return PixelFormat::MJPEG;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// return the default NO_CHANGE
|
// return the default NO_CHANGE
|
||||||
return PixelFormat::NO_CHANGE;
|
return PixelFormat::NO_CHANGE;
|
||||||
@ -103,12 +100,10 @@ inline QString pixelFormatToString(const PixelFormat& pixelFormat)
|
|||||||
{
|
{
|
||||||
return "NV12";
|
return "NV12";
|
||||||
}
|
}
|
||||||
#ifdef HAVE_TURBO_JPEG
|
|
||||||
else if (pixelFormat == PixelFormat::MJPEG)
|
else if (pixelFormat == PixelFormat::MJPEG)
|
||||||
{
|
{
|
||||||
return "MJPEG";
|
return "MJPEG";
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// return the default NO_CHANGE
|
// return the default NO_CHANGE
|
||||||
return "NO_CHANGE";
|
return "NO_CHANGE";
|
||||||
@ -166,3 +161,5 @@ inline QString flipModeToString(const FlipMode& flipMode)
|
|||||||
// return the default NO_CHANGE
|
// return the default NO_CHANGE
|
||||||
return "NO_CHANGE";
|
return "NO_CHANGE";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // PIXELFORMAT_H
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QDebug>
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
/* Enable to turn on detailed CEC logs */
|
/* Enable to turn on detailed CEC logs */
|
||||||
@ -19,6 +19,7 @@ CECHandler::CECHandler(const QJsonDocument& config, QObject * parent)
|
|||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, _config(config)
|
, _config(config)
|
||||||
, _isInitialised(false)
|
, _isInitialised(false)
|
||||||
|
, _isOpen(false)
|
||||||
, _isEnabled(false)
|
, _isEnabled(false)
|
||||||
, _buttonReleaseDelayMs(CEC_BUTTON_TIMEOUT)
|
, _buttonReleaseDelayMs(CEC_BUTTON_TIMEOUT)
|
||||||
, _buttonRepeatRateMs(0)
|
, _buttonRepeatRateMs(0)
|
||||||
@ -126,62 +127,71 @@ void CECHandler::stop()
|
|||||||
|
|
||||||
bool CECHandler::enable()
|
bool CECHandler::enable()
|
||||||
{
|
{
|
||||||
bool opened {false};
|
|
||||||
if (_isInitialised)
|
if (_isInitialised)
|
||||||
{
|
{
|
||||||
const auto adapters = getAdapters();
|
if (!_isOpen)
|
||||||
if (adapters.isEmpty())
|
|
||||||
{
|
{
|
||||||
Error(_logger, "Failed to find any CEC adapter. CEC event handling will be disabled.");
|
const auto adapters = getAdapters();
|
||||||
_cecAdapter->Close();
|
if (adapters.isEmpty())
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Info(_logger, "Auto detecting CEC adapter");
|
|
||||||
for (const auto & adapter : adapters)
|
|
||||||
{
|
|
||||||
printAdapter(adapter);
|
|
||||||
|
|
||||||
if (!opened && openAdapter(adapter))
|
|
||||||
{
|
{
|
||||||
Info(_logger, "CEC adapter '%s', type: %s initialized." , adapter.strComName, _cecAdapter->ToString(adapter.adapterType));
|
Error(_logger, "Failed to find any CEC adapter. CEC event handling will be disabled.");
|
||||||
opened = true;
|
_cecAdapter->Close();
|
||||||
break;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info(_logger, "Auto detecting CEC adapter");
|
||||||
|
bool opened {false};
|
||||||
|
for (const auto & adapter : adapters)
|
||||||
|
{
|
||||||
|
printAdapter(adapter);
|
||||||
|
if (!opened)
|
||||||
|
{
|
||||||
|
if (openAdapter(adapter))
|
||||||
|
{
|
||||||
|
|
||||||
|
Info(_logger, "CEC adapter '%s', type: %s initialized." , adapter.strComName, _cecAdapter->ToString(adapter.adapterType));
|
||||||
|
opened = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!opened)
|
||||||
|
{
|
||||||
|
Error(_logger, "Could not initialize any CEC adapter.");
|
||||||
|
_cecAdapter->Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_isOpen=true;
|
||||||
|
QObject::connect(this, &CECHandler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
||||||
|
#ifdef VERBOSE_CEC
|
||||||
|
std::cout << "Found Devices: " << scan().toStdString() << std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VERBOSE_CEC
|
if (_isOpen && !_cecAdapter->SetConfiguration(&_cecConfig))
|
||||||
std::cout << "Found Devices: " << scan().toStdString() << std::endl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!opened)
|
|
||||||
{
|
|
||||||
Error(_logger, "Could not initialize any CEC adapter.");
|
|
||||||
_cecAdapter->Close();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!_cecAdapter->SetConfiguration(&_cecConfig))
|
|
||||||
{
|
{
|
||||||
Error(_logger, "Failed setting remote button press timing parameters");
|
Error(_logger, "Failed setting remote button press timing parameters");
|
||||||
}
|
}
|
||||||
QObject::connect(this, &CECHandler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
|
||||||
Info(_logger, "CEC handler started");
|
Info(_logger, "CEC handler enabled");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return opened;
|
return _isOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CECHandler::disable()
|
void CECHandler::disable()
|
||||||
{
|
{
|
||||||
if (_isInitialised)
|
if (_isInitialised)
|
||||||
{
|
{
|
||||||
Info(_logger, "Stopping CEC handler");
|
|
||||||
|
|
||||||
QObject::disconnect(this, &CECHandler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::disconnect(this, &CECHandler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
||||||
|
|
||||||
_cecAdapter->Close();
|
_cecAdapter->Close();
|
||||||
|
_isOpen=false;
|
||||||
|
Info(_logger, "CEC handler disabled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +237,9 @@ QVector<CECAdapterDescriptor> CECHandler::getAdapters() const
|
|||||||
bool CECHandler::openAdapter(const CECAdapterDescriptor & descriptor)
|
bool CECHandler::openAdapter(const CECAdapterDescriptor & descriptor)
|
||||||
{
|
{
|
||||||
if (_cecAdapter == nullptr)
|
if (_cecAdapter == nullptr)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if(!_cecAdapter->Open(descriptor.strComName))
|
if(!_cecAdapter->Open(descriptor.strComName))
|
||||||
{
|
{
|
||||||
@ -301,9 +313,9 @@ QString CECHandler::scan() const
|
|||||||
void CECHandler::triggerAction(const QString& cecEvent)
|
void CECHandler::triggerAction(const QString& cecEvent)
|
||||||
{
|
{
|
||||||
Event action = _cecEventActionMap.value(cecEvent, Event::Unknown);
|
Event action = _cecEventActionMap.value(cecEvent, Event::Unknown);
|
||||||
Debug(_logger, "CEC-Event : \"%s\" triggers action \"%s\"", QSTRING_CSTR(cecEvent), eventToString(action) );
|
|
||||||
if ( action != Event::Unknown )
|
if ( action != Event::Unknown )
|
||||||
{
|
{
|
||||||
|
Debug(_logger, "CEC-Event : \"%s\" triggers action \"%s\"", QSTRING_CSTR(cecEvent), eventToString(action) );
|
||||||
emit signalEvent(action);
|
emit signalEvent(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ target_link_libraries(${PROJECT_NAME} hyperion)
|
|||||||
if(ENABLE_V4L2 OR ENABLE_MF)
|
if(ENABLE_V4L2 OR ENABLE_MF)
|
||||||
find_package(TurboJPEG)
|
find_package(TurboJPEG)
|
||||||
if(TURBOJPEG_FOUND)
|
if(TURBOJPEG_FOUND)
|
||||||
add_definitions(-DHAVE_TURBO_JPEG)
|
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_TURBO_JPEG)
|
||||||
message(STATUS "Using Turbo JPEG library: ${TurboJPEG_LIBRARY}")
|
message(STATUS "Using Turbo JPEG library: ${TurboJPEG_LIBRARY}")
|
||||||
target_link_libraries(${PROJECT_NAME} ${TurboJPEG_LIBRARY})
|
target_link_libraries(${PROJECT_NAME} ${TurboJPEG_LIBRARY})
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ${TurboJPEG_INCLUDE_DIRS})
|
target_include_directories(${PROJECT_NAME} PUBLIC ${TurboJPEG_INCLUDE_DIRS})
|
||||||
|
@ -674,7 +674,7 @@ void Hyperion::update()
|
|||||||
|
|
||||||
if (_ledString.hasBlackListedLeds())
|
if (_ledString.hasBlackListedLeds())
|
||||||
{
|
{
|
||||||
for (int id : _ledString.blacklistedLedIds())
|
for (unsigned long id : _ledString.blacklistedLedIds())
|
||||||
{
|
{
|
||||||
if (id > _ledBuffer.size()-1)
|
if (id > _ledBuffer.size()-1)
|
||||||
{
|
{
|
||||||
|
@ -72,7 +72,7 @@ LinearColorSmoothing::LinearColorSmoothing(const QJsonDocument &config, Hyperion
|
|||||||
, _enabled(false)
|
, _enabled(false)
|
||||||
, _enabledSystemCfg(false)
|
, _enabledSystemCfg(false)
|
||||||
, _smoothingType(SmoothingType::Linear)
|
, _smoothingType(SmoothingType::Linear)
|
||||||
, tempValues(std::vector<uint64_t>(0, 0L))
|
, tempValues(std::vector<uint64_t>())
|
||||||
{
|
{
|
||||||
QString subComponent = hyperion->property("instance").toString();
|
QString subComponent = hyperion->property("instance").toString();
|
||||||
_log= Logger::getInstance("SMOOTHING", subComponent);
|
_log= Logger::getInstance("SMOOTHING", subComponent);
|
||||||
@ -87,7 +87,7 @@ LinearColorSmoothing::LinearColorSmoothing(const QJsonDocument &config, Hyperion
|
|||||||
|
|
||||||
// add pause on cfg 1
|
// add pause on cfg 1
|
||||||
SmoothingCfg cfg {true, 0, 0};
|
SmoothingCfg cfg {true, 0, 0};
|
||||||
_cfgList.append(cfg);
|
_cfgList.append(std::move(cfg));
|
||||||
|
|
||||||
// listen for comp changes
|
// listen for comp changes
|
||||||
connect(_hyperion, &Hyperion::compStateChangeRequest, this, &LinearColorSmoothing::componentStateChange);
|
connect(_hyperion, &Hyperion::compStateChangeRequest, this, &LinearColorSmoothing::componentStateChange);
|
||||||
@ -592,7 +592,7 @@ unsigned LinearColorSmoothing::addConfig(int settlingTime_ms, double ledUpdateFr
|
|||||||
ledUpdateFrequency_hz,
|
ledUpdateFrequency_hz,
|
||||||
updateDelay
|
updateDelay
|
||||||
};
|
};
|
||||||
_cfgList.append(cfg);
|
_cfgList.append(std::move(cfg));
|
||||||
|
|
||||||
DebugIf(verbose && _enabled, _log,"%s", QSTRING_CSTR(getConfig(_cfgList.count()-1)));
|
DebugIf(verbose && _enabled, _log,"%s", QSTRING_CSTR(getConfig(_cfgList.count()-1)));
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
"enum": [
|
"enum": [
|
||||||
"standby",
|
"standby",
|
||||||
"set stream path",
|
"set stream path",
|
||||||
"F1(blue)",
|
"F1 (blue)",
|
||||||
"F2 (red)",
|
"F2 (red)",
|
||||||
"F3 (green)",
|
"F3 (green)",
|
||||||
"F4 (yellow)"
|
"F4 (yellow)"
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
"rateList": {
|
"rateList": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"title":"edt_dev_spec_baudrate_title",
|
"title":"edt_dev_spec_baudrate_title",
|
||||||
"enum": [ "CUSTOM","9600","14400","19200","28800","33600","38400","56000","57600","76800","115200","128000","153600","230400","256000","307200","460800","921600","1000000","1500000","2000000","3000000","4000000" ],
|
"enum": [ "CUSTOM","250000","500000","1000000" ],
|
||||||
"options": {
|
"options": {
|
||||||
"enum_titles": [ "edt_conf_enum_custom" ]
|
"enum_titles": [ "edt_conf_enum_custom" ]
|
||||||
},
|
},
|
||||||
"default": "1000000",
|
"default": "500000",
|
||||||
"access": "advanced",
|
"access": "advanced",
|
||||||
"propertyOrder" : 2
|
"propertyOrder" : 2
|
||||||
},
|
},
|
||||||
|
@ -58,7 +58,11 @@ PythonInit::PythonInit()
|
|||||||
|
|
||||||
if (QFile(py_file).exists() || QDir(py_path).exists() || QDir(py_framework).exists())
|
if (QFile(py_file).exists() || QDir(py_path).exists() || QDir(py_framework).exists())
|
||||||
{
|
{
|
||||||
Py_NoSiteFlag++;
|
#if (PY_VERSION_HEX >= 0x030C0000)
|
||||||
|
config.site_import = 0;
|
||||||
|
#else
|
||||||
|
Py_NoSiteFlag++;
|
||||||
|
#endif
|
||||||
if (QFile(py_file).exists()) // Windows
|
if (QFile(py_file).exists()) // Windows
|
||||||
{
|
{
|
||||||
#if (PY_VERSION_HEX >= 0x03080000)
|
#if (PY_VERSION_HEX >= 0x03080000)
|
||||||
|
@ -92,8 +92,8 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
|||||||
, _osxGrabber(nullptr)
|
, _osxGrabber(nullptr)
|
||||||
, _qtGrabber(nullptr)
|
, _qtGrabber(nullptr)
|
||||||
, _dxGrabber(nullptr)
|
, _dxGrabber(nullptr)
|
||||||
, _audioGrabber(nullptr)
|
|
||||||
, _ssdp(nullptr)
|
, _ssdp(nullptr)
|
||||||
|
, _audioGrabber(nullptr)
|
||||||
, _eventHandler(nullptr)
|
, _eventHandler(nullptr)
|
||||||
, _osEventHandler(nullptr)
|
, _osEventHandler(nullptr)
|
||||||
, _eventScheduler(nullptr)
|
, _eventScheduler(nullptr)
|
||||||
|
@ -211,8 +211,8 @@ private:
|
|||||||
OsxWrapper* _osxGrabber;
|
OsxWrapper* _osxGrabber;
|
||||||
QtWrapper* _qtGrabber;
|
QtWrapper* _qtGrabber;
|
||||||
DirectXWrapper* _dxGrabber;
|
DirectXWrapper* _dxGrabber;
|
||||||
SSDPHandler* _ssdp;
|
|
||||||
AudioWrapper* _audioGrabber;
|
AudioWrapper* _audioGrabber;
|
||||||
|
SSDPHandler* _ssdp;
|
||||||
EventHandler* _eventHandler;
|
EventHandler* _eventHandler;
|
||||||
OsEventHandler* _osEventHandler;
|
OsEventHandler* _osEventHandler;
|
||||||
EventScheduler* _eventScheduler;
|
EventScheduler* _eventScheduler;
|
||||||
|
@ -224,7 +224,7 @@ class ValidatorMixin(object):
|
|||||||
properties is dispatched to ``validate_property`` methods. E.g., to
|
properties is dispatched to ``validate_property`` methods. E.g., to
|
||||||
implement a validator for a ``maximum`` property, create a
|
implement a validator for a ``maximum`` property, create a
|
||||||
``validate_maximum`` method. Validator methods should yield zero or more
|
``validate_maximum`` method. Validator methods should yield zero or more
|
||||||
:exc:`ValidationError``\s to signal failed validation.
|
:exc:`ValidationError``\\s to signal failed validation.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -1028,7 +1028,7 @@ if hasattr(socket, "inet_pton"):
|
|||||||
|
|
||||||
@_checks_drafts(draft3="host-name", draft4="hostname")
|
@_checks_drafts(draft3="host-name", draft4="hostname")
|
||||||
def is_host_name(instance):
|
def is_host_name(instance):
|
||||||
pattern = "^[A-Za-z0-9][A-Za-z0-9\.\-]{1,255}$"
|
pattern = r"^[A-Za-z0-9][A-Za-z0-9.-]{1,255}$"
|
||||||
if not re.match(pattern, instance):
|
if not re.match(pattern, instance):
|
||||||
return False
|
return False
|
||||||
components = instance.split(".")
|
components = instance.split(".")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user