bool Node::setup(std::string _ip_addr, bool _sendRaw, uint8_t _subnet_addr)
{
    ip_addr = _ip_addr;
    subnet_addr = _subnet_addr;
    sendRaw = _sendRaw;
    
    artnetNode  = artnet_new(ip_addr.c_str(), 0);//int = verbose
    //@todo: allow for multiple nodes then artnet_join(artnetNode1, artnetNodeN)
    
    if (!artnetNode) {
        printf("Error: %s\n", artnet_strerror());
        return false;
    }
    
    artnet_set_long_name(artnetNode, "Cinder-LibArtnet");
    artnet_set_short_name(artnetNode, "CI");
    if (sendRaw) artnet_set_node_type(artnetNode, ARTNET_RAW);
    
    // set the upper 4 bits of the universe address 
    artnet_set_subnet_addr(artnetNode, subnet_addr) ;
    
    if (!unis.size()) {
        setNumUniverses(1);
        std::cout<<"Creating single universe with address 1 and ID 0."<<std::endl;
    }
    
    for (int i=0; i<unis.size(); i++) {
        // enable port        
        artnet_set_port_type(artnetNode, unis[i].port_id, ARTNET_ENABLE_OUTPUT, ARTNET_PORT_DMX);
        // bind port to universe
        artnet_set_port_addr(artnetNode, unis[i].port_id, ARTNET_OUTPUT_PORT, unis[i].port_addr); 
    }
    
    artnet_dump_config(artnetNode);
    
    //set receiver callback
    artnet_set_handler(artnetNode, ARTNET_RECV_HANDLER, artnetReceiverWrapper, this); 
    
    if (artnet_start(artnetNode) != 0) {
        printf("Error: %s\n", artnet_strerror());
        return false;
    }

    didSetup = true;
    return true;
    
};
Esempio n. 2
0
void ofxArtnet::setup(const char* interfaceIP, int port_addr, int verbose)
{
    printf("ofxArtnet::setup\n");
    verbose = 1;
    nodes_found = 0;
    
    // create new artnet node, and set config values
    
    if ( (node = artnet_new(interfaceIP, verbose)) == NULL)
    {
        if ( verbose ) printf("cannot create node: %s\n", artnet_strerror() );
        goto error_destroy;
    }
    artnet_set_short_name(node, SHORT_NAME.c_str());
    artnet_set_long_name(node, LONG_NAME.c_str());
    artnet_set_node_type(node, ARTNET_RAW);
    
    artnet_set_port_type(node, 0, ARTNET_ENABLE_INPUT, ARTNET_PORT_DMX);
    artnet_set_port_addr(node, 0, ARTNET_INPUT_PORT, port_addr);
    artnet_set_handler(node, ARTNET_REPLY_HANDLER, ofxArtnet::reply_handler, NULL);
    
    if (artnet_start(node) != ARTNET_EOK) {
        if ( verbose ) printf("Failed to start: %s\n", artnet_strerror() );
        goto error_destroy;
    }
    
    sd = artnet_get_sd(node);
    
    find_timeout = ofGetElapsedTimeMillis();
    status = NODES_FINDING;
    if (artnet_send_poll(node, NULL, ARTNET_TTM_DEFAULT) != ARTNET_EOK) {
        printf("send poll failed: %s\n", artnet_strerror() );
        goto error_destroy;
    }
    printf("starting thread\n");
    startThread(true);
    return;
    
    error_destroy :
    artnet_destroy(node);
    
    //    free(ops.ip_addr);
    //    exit(1);
}
int main(int argc, char *argv[]){
    int r=atoi(argv[1]);
    int g=atoi(argv[2]);
    int b=atoi(argv[3]);

    artnet_node node;
    node = artnet_new(NULL, 0);
    artnet_set_node_type(node, ARTNET_RAW);
    if (artnet_start(node) != ARTNET_EOK) {
        printf("Oh, kaputt: %s\n", artnet_strerror());
        return 1;
    }
    uint8_t dmx[3];
    dmx[0]=r;
    dmx[1]=g;
    dmx[2]=b;
    artnet_raw_send_dmx(node, 0, 1, dmx);
    artnet_raw_send_dmx(node, 0, 2, dmx);
    artnet_raw_send_dmx(node, 0, 3, dmx);
}