@@ -33,115 +33,120 @@ int use_select = 0 ;
3333
3434int delay = 25000 ;
3535
36-
36+ #ifndef WIN32
3737#include <sys/select.h>
38+ #else
39+ #include <windows.h>
40+ #endif
3841
3942int main (int argc , char * argv []) {
40- artnet_node node ;
41- char * ip_addr = NULL ;
42- int optc , subnet_addr = 0 , port_addr = 0 ;
43- uint8_t data [ARTNET_DMX_LENGTH ] ;
44- struct timeval tv ;
45- int sd , maxsd ;
46- fd_set rset ;
47- struct timespec ts ;
48-
49- // parse options
50- while ((optc = getopt (argc , argv , "s:p:d:a:ve" )) != EOF ) {
51- switch (optc ) {
52- case 'a' :
53- ip_addr = (char * ) strdup (optarg ) ;
54- break ;
55- case 'v' :
56- verbose = 1 ;
57- break ;
58- case 'e' :
59- use_select = 1 ;
60- break ;
61- case 's' :
62- subnet_addr = atoi (optarg ) ;
63-
64- if (subnet_addr < 0 && subnet_addr > 15 ) {
65- printf ("Subnet address must be between 0 and 15\n" ) ;
66- exit (1 ) ;
67- }
68- break ;
69- case 'd' :
70- delay = atoi (optarg ) ;
71- break ;
72- case 'p' :
73- port_addr = atoi (optarg ) ;
74-
75- if (port_addr < 0 && port_addr > 15 ) {
76- printf ("Port address must be between 0 and 15\n" ) ;
77- exit (1 ) ;
78- }
79- break ;
80- default :
81- break ;
82- }
83- }
43+ artnet_node node ;
44+ char * ip_addr = NULL ;
45+ int optc , subnet_addr = 0 , port_addr = 0 ;
46+ uint8_t data [ARTNET_DMX_LENGTH ] ;
47+ struct timeval tv ;
48+ int sd , maxsd ;
49+ fd_set rset ;
50+ #ifndef WIN32
51+ struct timespec ts ;
52+ #endif
53+
54+ // parse options
55+ while ((optc = getopt (argc , argv , "s:p:d:a:ve" )) != EOF ) {
56+ switch (optc ) {
57+ case 'a' :
58+ ip_addr = (char * ) strdup (optarg ) ;
59+ break ;
60+ case 'v' :
61+ verbose = 1 ;
62+ break ;
63+ case 'e' :
64+ use_select = 1 ;
65+ break ;
66+ case 's' :
67+ subnet_addr = atoi (optarg ) ;
68+
69+ if (subnet_addr < 0 && subnet_addr > 15 ) {
70+ printf ("Subnet address must be between 0 and 15\n" ) ;
71+ exit (1 ) ;
72+ }
73+ break ;
74+ case 'd' :
75+ delay = atoi (optarg ) ;
76+ break ;
77+ case 'p' :
78+ port_addr = atoi (optarg ) ;
79+
80+ if (port_addr < 0 && port_addr > 15 ) {
81+ printf ("Port address must be between 0 and 15\n" ) ;
82+ exit (1 ) ;
83+ }
84+ break ;
85+ default :
86+ break ;
87+ }
88+ }
8489
8590 node = artnet_new (ip_addr , verbose ) ; ;
8691
87- artnet_set_short_name (node , "Artnet -> DMX " ) ;
88- artnet_set_long_name (node , "ArtNet Flood RX" ) ;
89- artnet_set_node_type (node , ARTNET_NODE ) ;
90-
91- // set the first port to input dmx data
92- artnet_set_port_type (node , 0 , ARTNET_ENABLE_INPUT , ARTNET_PORT_DMX ) ;
93- artnet_set_subnet_addr (node , subnet_addr ) ;
94-
95- // set the universe address of the first port
96- artnet_set_port_addr (node , 0 , ARTNET_INPUT_PORT , port_addr ) ;
97- artnet_start (node ) ;
98-
99- sd = artnet_get_sd (node ) ;
100-
101- if (use_select ) {
102- while (1 ) {
103- FD_ZERO (& rset ) ;
104- FD_SET (sd , & rset ) ;
105-
106- tv .tv_usec = delay ;
107- tv .tv_sec = 0 ;
108-
109- maxsd = sd ;
110-
111- switch ( select ( maxsd + 1 , & rset , NULL , NULL , & tv ) ) {
112- case 0 :
113- artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
114- artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
115- artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
116- artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
117-
118- break ;
119- case -1 :
120- printf ("select error\n" ) ;
121- break ;
122- default :
123- artnet_read (node ,0 ) ;
124- break ;
125- }
126- }
127- } else {
128-
129- // sched_setscheduler(0, )
130-
131- while ( 1 ) {
132- ts . tv_nsec = delay ;
133- ts . tv_sec = 0 ;
134- artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
135-
136- artnet_read (node ,0 ) ;
137- artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
138-
139- nanosleep ( & ts , NULL ) ;
140- artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
141- artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
142-
143- }
144- }
145-
146- return 0 ;
92+ artnet_set_short_name (node , "Artnet -> DMX " ) ;
93+ artnet_set_long_name (node , "ArtNet Flood RX" ) ;
94+ artnet_set_node_type (node , ARTNET_NODE ) ;
95+
96+ // set the first port to input dmx data
97+ artnet_set_port_type (node , 0 , ARTNET_ENABLE_INPUT , ARTNET_PORT_DMX ) ;
98+ artnet_set_subnet_addr (node , subnet_addr ) ;
99+
100+ // set the universe address of the first port
101+ artnet_set_port_addr (node , 0 , ARTNET_INPUT_PORT , port_addr ) ;
102+ artnet_start (node ) ;
103+
104+ sd = artnet_get_sd (node ) ;
105+
106+ if (use_select ) {
107+ while (1 ) {
108+ FD_ZERO (& rset ) ;
109+ FD_SET (sd , & rset ) ;
110+
111+ tv .tv_usec = delay ;
112+ tv .tv_sec = 0 ;
113+
114+ maxsd = sd ;
115+
116+ switch ( select ( maxsd + 1 , & rset , NULL , NULL , & tv ) ) {
117+ case 0 :
118+ artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
119+ artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
120+ artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
121+ artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
122+
123+ break ;
124+ case -1 :
125+ printf ("select error\n" ) ;
126+ break ;
127+ default :
128+ artnet_read (node ,0 ) ;
129+ break ;
130+ }
131+ }
132+ } else {
133+ while ( 1 ) {
134+ #ifndef WIN32
135+ ts . tv_nsec = delay ;
136+ ts . tv_sec = 0 ;
137+ #endif
138+ artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
139+
140+ artnet_read ( node , 0 ) ;
141+ artnet_send_dmx (node ,0 , ARTNET_DMX_LENGTH , data ) ;
142+ #ifndef WIN32
143+ nanosleep ( & ts , NULL ) ;
144+ #else
145+ Sleep ( delay );
146+ #endif
147+ artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
148+ artnet_send_dmx ( node , 0 , ARTNET_DMX_LENGTH , data ) ;
149+ }
150+ }
151+ return 0 ;
147152}
0 commit comments