Skip to content

Commit

Permalink
Added option to use raw dmx values
Browse files Browse the repository at this point in the history
  • Loading branch information
varkokonyi authored and k-yle committed Mar 11, 2024
1 parent 145f479 commit 61759b1
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ const sACNServer = new Sender({

async function main() {
await sACNServer.send({
payload: { // required. object with the percentages for each DMX channel
payload: { // required. object with the percentages for each DMX channel (or set `useRawDmxValues` per packet or in the `defaultPacketOptions` for the Sender to use raw DMX values)
1: 100,
2: 50,
3: 0,
Expand All @@ -123,7 +123,7 @@ main(); // wrapped in a main() function so that we can `await` the promise
| `universe` | `number` | Required. The universes to listen to. Must be within 1-63999 | `[]` |
| `port` | `number` | Optional. The multicast port to use. All professional consoles broadcast to the default port. | `5568` |
| `reuseAddr` | `boolean` | Optional. Allow multiple programs on your computer to send to the same sACN universe. |
| `defaultPacketOptions` | `object` | Optional. You can specify options like `sourceName`, `cid`, and `priority` here instead of on every packet |
| `defaultPacketOptions` | `object` | Optional. You can specify options like `sourceName`, `cid`, `priority` and `useRawDmxValues` here instead of on every packet |
| `iface` | `string` | Optional. Specifies the IPv4 address of the network interface/card to use. | OS default interface (=active internet connection)
| `useUnicastDestination`| `string` | Optional. Setting this attribute to an IPv4 address will cause data to be sent directly to that device, instead of broadcasting to the whole LAN. |

Expand Down
18 changes: 17 additions & 1 deletion src/packet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ export interface Options {
sourceName?: Packet['sourceName'];
priority?: Packet['priority'];
cid?: Packet['cid'];
/**
* Whether to use 0-100 or 0-255 scale when creating the packet
* false (default): 0-100
* true: 0-255
*/
useRawDmxValues?: Packet['useRawDmxValues'];
}

/**
Expand Down Expand Up @@ -58,6 +64,8 @@ export class Packet {

/* eslint-enable lines-between-class-members */

private readonly useRawDmxValues: boolean = false;

public constructor(
input: Buffer | Options,
public readonly sourceAddress?: string,
Expand Down Expand Up @@ -121,6 +129,10 @@ export class Packet {
this.propertyValueCount = 0x0201; // "Indicates 1+ the number of slots in packet"
// We set the highest possible value (1+512) so that channels with zero values are
// treated as deliberately 0 (cf. undefined)

if (options.useRawDmxValues) {
this.useRawDmxValues = true;
}
}
}

Expand Down Expand Up @@ -168,7 +180,11 @@ export class Packet {

for (const ch in this.payload) {
if (+ch >= 1 && +ch <= 512) {
n[125 + +ch] = inRange(this.payload[ch]! * 2.55);
if (this.useRawDmxValues) {
n[125 + +ch] = inRange(this.payload[ch]!);
} else {
n[125 + +ch] = inRange(this.payload[ch]! * 2.55);
}
}
}

Expand Down
5 changes: 4 additions & 1 deletion src/sender.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ export interface SenderProps {
minRefreshRate?: number;

/** some options can be sepecified when you instantiate the sender, instead of sepecifying them on every packet */
defaultPacketOptions?: Pick<Options, 'cid' | 'sourceName' | 'priority'>;
defaultPacketOptions?: Pick<
Options,
'cid' | 'sourceName' | 'priority' | 'useRawDmxValues'
>;

// IPv4 address of the network interface
iface?: string;
Expand Down

0 comments on commit 61759b1

Please sign in to comment.