sACN  HEAD (unstable)
Implementation of ANSI E1.31 (Streaming ACN)
View other versions:
Loading...
Searching...
No Matches
merge_receiver.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright 2024 ETC Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************
16 * This file is a part of sACN. For more information, go to:
17 * https://github.com/ETCLabs/sACN
18 *****************************************************************************/
19
27#ifndef SACN_MERGE_RECEIVER_H_
28#define SACN_MERGE_RECEIVER_H_
29
30#include <stdbool.h>
31#include <stdint.h>
32#include "sacn/receiver.h"
33#include "sacn/dmx_merger.h"
34
49#define SACN_MERGE_RECEIVER_MAX_SLOTS \
50 ((SACN_DMX_MERGER_MAX_SLOTS > kSacnDmxAddressCount) ? kSacnDmxAddressCount : SACN_DMX_MERGER_MAX_SLOTS)
51
52#ifdef __cplusplus
53extern "C" {
54#endif
55
60
101
127 const SacnRecvMergedData* merged_data,
128 void* context);
129
152 const EtcPalSockAddr* source_addr,
153 const SacnRemoteSource* source_info,
154 const SacnRecvUniverseData* universe_data,
155 void* context);
156
173 uint16_t universe,
174 const SacnLostSource* lost_sources,
175 size_t num_lost_sources,
176 void* context);
177
189 uint16_t universe,
190 void* context);
191
208 uint16_t universe,
209 void* context);
210
227 uint16_t universe,
228 const SacnRemoteSource* source,
229 void* context);
230
242 uint16_t universe,
243 void* context);
244
257
260{
261 /********* Required values **********/
262
264 uint16_t universe_id;
267
268 /********* Optional values **********/
269
272
277
282
286
288#define SACN_MERGE_RECEIVER_CONFIG_DEFAULT_INIT \
289 {0, {NULL, NULL, NULL, NULL}, {1, SACN_MERGE_RECEIVER_MAX_SLOTS}, kSacnReceiverInfiniteSources, \
290 true, kSacnIpV4AndIpV6}
291
306
323
325
327 sacn_merge_receiver_t* handle,
328 const SacnNetintConfig* netint_config);
334 const SacnRecvUniverseSubrange* new_footprint);
336 uint16_t new_universe_id,
337 const SacnRecvUniverseSubrange* new_footprint);
340 const SacnNetintConfig* sys_netint_config,
341 const SacnMergeReceiverNetintList* per_receiver_netint_lists,
342 size_t num_per_receiver_netint_lists);
344 EtcPalMcastNetintId* netints,
345 size_t netints_size);
347 sacn_remote_source_t source_handle,
348 SacnMergeReceiverSource* source_info);
349
350#ifdef __cplusplus
351}
352#endif
353
358#endif /* SACN_MERGE_RECEIVER_H_ */
sACN DMX Merger API definitions
etcpal_error_t
sacn_ip_support_t
This enum defines how the API module will use IPv4 and IPv6 networking.
Definition common.h:75
uint16_t sacn_remote_source_t
A source discovered on an sACN network that has a CID - used by Receiver and Merge Receiver.
Definition common.h:47
@ kSacnSourceNameMaxLen
The maximum length of an sACN source name, including the null-terminator.
Definition common.h:58
etcpal_error_t sacn_merge_receiver_reset_networking(const SacnNetintConfig *sys_netint_config)
Resets underlying network sockets and packet receipt state, determines network interfaces for all mer...
Definition merge_receiver.c:436
size_t sacn_merge_receiver_get_network_interfaces(sacn_merge_receiver_t handle, EtcPalMcastNetintId *netints, size_t netints_size)
Obtain a list of a merge receiver's network interfaces.
Definition merge_receiver.c:534
etcpal_error_t sacn_merge_receiver_destroy(sacn_merge_receiver_t handle)
Destroy a sACN Merge Receiver instance.
Definition merge_receiver.c:221
etcpal_error_t sacn_merge_receiver_change_footprint(sacn_merge_receiver_t handle, const SacnRecvUniverseSubrange *new_footprint)
Change the footprint within the universe on which an sACN receiver is listening.
Definition merge_receiver.c:381
struct SacnMergeReceiverConfig SacnMergeReceiverConfig
A set of configuration information for an sACN merge receiver.
etcpal_error_t sacn_merge_receiver_reset_networking_per_receiver(const SacnNetintConfig *sys_netint_config, const SacnMergeReceiverNetintList *per_receiver_netint_lists, size_t num_per_receiver_netint_lists)
Resets underlying network sockets and packet receipt state, determines network interfaces for each me...
Definition merge_receiver.c:473
struct SacnMergeReceiverNetintList SacnMergeReceiverNetintList
A set of network interfaces for a particular merge receiver.
void(* SacnMergeReceiverNonDmxCallback)(sacn_merge_receiver_t receiver_handle, const EtcPalSockAddr *source_addr, const SacnRemoteSource *source_info, const SacnRecvUniverseData *universe_data, void *context)
Notify that a non-data packet has been received.
Definition merge_receiver.h:151
void(* SacnMergeReceiverSourcesLostCallback)(sacn_merge_receiver_t handle, uint16_t universe, const SacnLostSource *lost_sources, size_t num_lost_sources, void *context)
Notify that one or more sources have entered a source loss state.
Definition merge_receiver.h:172
etcpal_error_t sacn_merge_receiver_get_footprint(sacn_merge_receiver_t handle, SacnRecvUniverseSubrange *footprint)
Get the footprint within the universe on which a sACN Merge Receiver is currently listening.
Definition merge_receiver.c:297
void(* SacnMergeReceiverSamplingPeriodEndedCallback)(sacn_merge_receiver_t handle, uint16_t universe, void *context)
Notify that a merge receiver's sampling period has ended.
Definition merge_receiver.h:207
void(* SacnMergeReceiverSourcePapLostCallback)(sacn_merge_receiver_t handle, uint16_t universe, const SacnRemoteSource *source, void *context)
Notify that a source has stopped transmission of per-address priority packets.
Definition merge_receiver.h:226
void(* SacnMergeReceiverMergedDataCallback)(sacn_merge_receiver_t handle, const SacnRecvMergedData *merged_data, void *context)
Notify that a new data packet has been received and merged.
Definition merge_receiver.h:126
void(* SacnMergeReceiverSourceLimitExceededCallback)(sacn_merge_receiver_t handle, uint16_t universe, void *context)
Notify that more than the configured maximum number of sources are currently sending on the universe ...
Definition merge_receiver.h:241
void(* SacnMergeReceiverSamplingPeriodStartedCallback)(sacn_merge_receiver_t handle, uint16_t universe, void *context)
Notify that a merge receiver's sampling period has begun.
Definition merge_receiver.h:188
etcpal_error_t sacn_merge_receiver_get_universe(sacn_merge_receiver_t handle, uint16_t *universe_id)
Get the universe on which a sACN Merge Receiver is currently listening.
Definition merge_receiver.c:278
etcpal_error_t sacn_merge_receiver_get_source(sacn_merge_receiver_t merge_receiver_handle, sacn_remote_source_t source_handle, SacnMergeReceiverSource *source_info)
Gets a copy of the information for the specified merge receiver source.
Definition merge_receiver.c:554
etcpal_error_t sacn_merge_receiver_change_universe(sacn_merge_receiver_t handle, uint16_t new_universe_id)
Change the universe on which a sACN Merge Receiver is listening.
Definition merge_receiver.c:320
etcpal_error_t sacn_merge_receiver_create(const SacnMergeReceiverConfig *config, sacn_merge_receiver_t *handle, const SacnNetintConfig *netint_config)
Create a new sACN Merge Receiver to listen and merge sACN data on a universe.
Definition merge_receiver.c:99
struct SacnMergeReceiverCallbacks SacnMergeReceiverCallbacks
A set of callback functions that the library uses to notify the application about sACN events.
etcpal_error_t sacn_merge_receiver_change_universe_and_footprint(sacn_merge_receiver_t handle, uint16_t new_universe_id, const SacnRecvUniverseSubrange *new_footprint)
Change the universe and footprint on which an sACN merge receiver is listening.
Definition merge_receiver.c:401
void sacn_merge_receiver_config_init(SacnMergeReceiverConfig *config)
Initialize an sACN Merge Receiver Config struct to default values.
Definition merge_receiver.c:65
int sacn_merge_receiver_t
A handle to an sACN Merge Receiver.
Definition merge_receiver.h:57
struct SacnMergeReceiverSource SacnMergeReceiverSource
Information about a remote sACN source being tracked by a merge receiver.
static const sacn_merge_receiver_t kSacnMergeReceiverInvalid
An invalid sACN Merge Receiver handle value.
Definition merge_receiver.h:59
struct SacnRecvMergedData SacnRecvMergedData
Newly updated merged data within the configured footprint.
sACN Receiver API definitions
Information about a sACN source that was lost.
Definition receiver.h:153
On input, this structure is used to indicate a network interface to use.
Definition common.h:89
A set of callback functions that the library uses to notify the application about sACN events.
Definition merge_receiver.h:247
SacnMergeReceiverSourceLimitExceededCallback source_limit_exceeded
Optional.
Definition merge_receiver.h:254
SacnMergeReceiverSamplingPeriodStartedCallback sampling_period_started
Optional.
Definition merge_receiver.h:251
SacnMergeReceiverMergedDataCallback universe_data
Required.
Definition merge_receiver.h:248
SacnMergeReceiverSourcesLostCallback sources_lost
Optional.
Definition merge_receiver.h:250
void * callback_context
(optional) Pointer to opaque data passed back with each callback.
Definition merge_receiver.h:255
SacnMergeReceiverSourcePapLostCallback source_pap_lost
Optional.
Definition merge_receiver.h:253
SacnMergeReceiverSamplingPeriodEndedCallback sampling_period_ended
Optional.
Definition merge_receiver.h:252
SacnMergeReceiverNonDmxCallback universe_non_dmx
Optional.
Definition merge_receiver.h:249
A set of configuration information for an sACN merge receiver.
Definition merge_receiver.h:260
int source_count_max
The maximum number of sources this universe will listen to.
Definition merge_receiver.h:276
SacnRecvUniverseSubrange footprint
The footprint within the universe to monitor.
Definition merge_receiver.h:271
uint16_t universe_id
Universe number on which to listen for sACN.
Definition merge_receiver.h:264
bool use_pap
If true, this allows per-address priorities (if any are received) to be fed into the merger.
Definition merge_receiver.h:281
SacnMergeReceiverCallbacks callbacks
The callbacks this merge receiver will use to notify the application of events.
Definition merge_receiver.h:266
sacn_ip_support_t ip_supported
What IP networking the merge_receiver will support.
Definition merge_receiver.h:284
A set of network interfaces for a particular merge receiver.
Definition merge_receiver.h:294
size_t num_netints
The size of netints, or 0 if netints is NULL.
Definition merge_receiver.h:302
bool no_netints
If this is true, this merge receiver will not use any network interfaces for multicast traffic.
Definition merge_receiver.h:304
SacnMcastInterface * netints
If non-NULL, this is the list of interfaces the application wants to use, and the status codes are fi...
Definition merge_receiver.h:300
sacn_merge_receiver_t handle
The merge receiver's handle.
Definition merge_receiver.h:296
Information about a remote sACN source being tracked by a merge receiver.
Definition merge_receiver.h:309
char name[kSacnSourceNameMaxLen]
The name of the source.
Definition merge_receiver.h:315
EtcPalUuid cid
The Component Identifier (CID) of the source.
Definition merge_receiver.h:313
uint8_t universe_priority
The source's current per-universe priority.
Definition merge_receiver.h:321
EtcPalSockAddr addr
The network address from which the most recent sACN packet originated.
Definition merge_receiver.h:317
bool per_address_priorities_active
Whether the source is sending per-address priority packets, or only per-universe.
Definition merge_receiver.h:319
sacn_remote_source_t handle
The handle of the source.
Definition merge_receiver.h:311
Network interface configuration information to give the sACN library.
Definition common.h:114
Newly updated merged data within the configured footprint.
Definition merge_receiver.h:65
const uint8_t * levels
The merged levels for the universe at the location indicated by slot_range.
Definition merge_receiver.h:77
uint16_t universe_id
The sACN Universe identifier.
Definition merge_receiver.h:69
const sacn_remote_source_t * owners
The source handles of the owners of the slots within slot_range.
Definition merge_receiver.h:88
size_t num_active_sources
The current number of sources considered to be active on the current universe (and thus the size of a...
Definition merge_receiver.h:99
const sacn_remote_source_t * active_sources
The handles of all sources considered to be active on the current universe.
Definition merge_receiver.h:94
SacnRecvUniverseSubrange slot_range
The range of slots represented by this data (the configured footprint).
Definition merge_receiver.h:73
const uint8_t * priorities
The merged per-address priorities for the universe at the location indicated by slot_range.
Definition merge_receiver.h:82
A complete description of newly received universe data within the configured footprint.
Definition receiver.h:92
Defines a range of addresses within a sACN universe.
Definition receiver.h:83
Information about a remote sACN source being tracked by a receiver.
Definition receiver.h:142