We've launched our new site at www.openlighting.org. This wiki will remain and be updated with more technical information.
Using OLA with Xcode: Difference between revisions
From wiki.openlighting.org
Chatchavan (talk | contribs) |
No edit summary |
||
| Line 4: | Line 4: | ||
* Xcode | * Xcode | ||
* [http://linux-lighting.googlecode.com/files/OLA%200.6.0.dmg OLA 0.6.0 Universal Mac Binaries] installed | * [http://linux-lighting.googlecode.com/files/OLA%200.6.0.dmg OLA 0.6.0 Universal Mac Binaries] installed | ||
== Create a new Project == | |||
# File -> New Project, from the right under Mac OS X, select 'Application', then in the left panel choose 'Cocoa Application' | |||
# Once the main window pops up, right click the 'main.m' file and select rename. Change the name to 'main.mm' (required for Objective-C++ extensions) | |||
==Configure your project== | ==Configure your project== | ||
# Select menu: "Project" -> "Edit Project Settings". All settings below are referred in a "Build" tab | # Select menu: "Project" -> "Edit Project Settings". All settings below are referred in a "Build" tab | ||
# | # Under 'Architectures', set "Architectures" to 32-bit Universal | ||
# | # Under 'Search Paths', set "Header Search Paths" to /usr/local/include. | ||
==Add | ==Add the required libraries== | ||
# In your project tree, right-click on a group that contain frameworks (e.g. "External Frameworks and Libraries", "Fromeworks/Linked Frameworks"), select "Add" -> "Existing Frameworks" | # In your project tree, right-click on a group that contain frameworks (e.g. "External Frameworks and Libraries", "Fromeworks/Linked Frameworks"), select "Add" -> "Existing Frameworks" | ||
# Select following frameworks: | # Select following frameworks: | ||
| Line 19: | Line 22: | ||
==Example code== | ==Example code== | ||
The following code sends value 255 to channel 0 in universe 0. First, it creates a client from a SimpleClient object. Then, it creates a DMX | The following code sends value 255 to channel 0 in universe 0. First, it creates a client from a SimpleClient object. Then, it creates a DMX buffer and sets channel 0 to 255. Finally it sends the buffer to a server. | ||
#import < | #import <Cocoa/Cocoa.h> | ||
#import <ola/DmxBuffer.h | |||
#import <ola/DmxBuffer.h | |||
#import <ola/SimpleClient.h> | #import <ola/SimpleClient.h> | ||
int main(int argc, char *argv[]) { | |||
ola::SimpleClient simpleClient; | |||
if (!simpleClient.Setup()) { | |||
NSLog(@"Client setup failed"); | |||
return -1; | |||
} | |||
int main (int argc, | |||
ola::OlaClient *client = simpleClient.GetClient(); | |||
ola::DmxBuffer buffer; | |||
buffer.Blackout(); | |||
buffer.SetChannel(0, 255); | |||
unsigned int universe = 0; | |||
if (!client->SendDmx(universe, buffer)) { | |||
NSLog(@"Sending DMX failed"); | |||
} | |||
return NSApplicationMain(argc, (const char **) argv); | |||
} | } | ||
You can find more information by browsing the source file of [http://linux-lighting.googlecode.com/files/ola-examples-0.6.0.tar.gz DMX example]. For me, the src/ola-client.cpp is quite useful. | |||
Here is another example that create OlaServer and communicate with a pipe socket. | Here is another example that create OlaServer and communicate with a pipe socket. | ||
Revision as of 19:48, 30 January 2010
You can use OLA to implement your application in Objective-C++, a bridge between Objective-C and C++. This page explains how to integrate OLA client into your program. The content of this page is based on OLA 0.6.0 Universal Mac Binaries
What you'll need
- Xcode
- OLA 0.6.0 Universal Mac Binaries installed
Create a new Project
- File -> New Project, from the right under Mac OS X, select 'Application', then in the left panel choose 'Cocoa Application'
- Once the main window pops up, right click the 'main.m' file and select rename. Change the name to 'main.mm' (required for Objective-C++ extensions)
Configure your project
- Select menu: "Project" -> "Edit Project Settings". All settings below are referred in a "Build" tab
- Under 'Architectures', set "Architectures" to 32-bit Universal
- Under 'Search Paths', set "Header Search Paths" to /usr/local/include.
Add the required libraries
- In your project tree, right-click on a group that contain frameworks (e.g. "External Frameworks and Libraries", "Fromeworks/Linked Frameworks"), select "Add" -> "Existing Frameworks"
- Select following frameworks:
- libprotobuf.dylib
- libola.dylib
- libolacommon.dylib
Example code
The following code sends value 255 to channel 0 in universe 0. First, it creates a client from a SimpleClient object. Then, it creates a DMX buffer and sets channel 0 to 255. Finally it sends the buffer to a server.
#import <Cocoa/Cocoa.h>
#import <ola/DmxBuffer.h
#import <ola/SimpleClient.h>
int main(int argc, char *argv[]) {
ola::SimpleClient simpleClient;
if (!simpleClient.Setup()) {
NSLog(@"Client setup failed");
return -1;
}
ola::OlaClient *client = simpleClient.GetClient();
ola::DmxBuffer buffer;
buffer.Blackout();
buffer.SetChannel(0, 255);
unsigned int universe = 0;
if (!client->SendDmx(universe, buffer)) {
NSLog(@"Sending DMX failed");
}
return NSApplicationMain(argc, (const char **) argv);
}
You can find more information by browsing the source file of DMX example. For me, the src/ola-client.cpp is quite useful.
Here is another example that create OlaServer and communicate with a pipe socket.
#import <Foundation/Foundation.h>
#include <errno.h>
#import <ola/DmxBuffer.h>
#import <ola/OlaClient.h>
#import <ola/network/SelectServer.h>
#import <ola/network/Socket.h>
using ola::network::PipeSocket;
// define type for DMX message
typedef unsigned char dmx_t ;
// maximum number of channels
int MAXCHANNELS=512;
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// create a server
ola::network::SelectServer server;
// create a select server
ola::network::SelectServer server;
// create pipe socket
PipeSocket *socket = new PipeSocket();
if (!socket->Init())
{
NSLog(@"Cannot create pipe socket");
return -1;
}
// add socket to select server
server.AddSocket(socket, true);
// create server daemon
// *** see: olad/Olad.cpp for more detail ***
// get a client
ola::OlaClient client(socket);
if (!client.Setup()) {
NSLog(@"Client setup failed %s", strerror(errno));
return -1;
}
// prepare data
int channel = 0;
dmx_t *dmx = (dmx_t *)calloc(MAXCHANNELS + 10, sizeof(dmx_t));
dmx[channel] = 255;
ola::DmxBuffer buffer(dmx, MAXCHANNELS);
// send DMX message
int universe = 0;
if (!client.SendDmx(universe, buffer)) {
NSLog(@"Sending DMX failed %s", strerror(errno));
}
// cleanup
free(dmx);
[pool drain];
return 0;
}