C/C++ (iOS) - API Bindings

Objective-C ist kompatible zu C. Dies erlaubt es uns die C/C++ Bindings in einer iOS App zu verwenden. Allgemeine Informationen sind in der Beschreibung der C/C++ Bindings zu finden, diese Seite befasst sich nur mit iOS spezifischen Dingen.

Im Folgenden wird angenommen, dass die iOS Entwicklungsumgebung schon installiert ist.

Test eines Beispiels

Als Beispiel soll ein kleines Projekt zum Schalten eines Dual Relay Bricklets erstellt werden. Es sollte leicht sein dieses Beispiel für deine Zwecke weiterzuentwickeln.

Starte ein neues Xcode Projekt:

  • File
  • New
  • Project...
  • Wähle "iOS Application"
  • Wähle "Single View Application"
  • Klicke Next
  • Wähle einen "Product Name" (e.g. Relay)
  • Klicke Next
  • Wähle einen "Folder" für das Projekt
  • Klicke Create

Füge den Quelltext der C/C++ Bindings dem Projekt hinzu:

  • Rechtsklick auf den Relay Ordner im Project Navigator
  • New Group, wähle als Name "Tinkerforge"
  • Rechtsklick auf die neue Tinkerforge Group
  • Add Files to "Relay"...
  • Wähle alle Dateien aus dem source/ Ordner der C/C++ Bindings

Es folgt ein kleines Beispielprogramm zum Schalten eines Relays per Knopfdruck.

Bearbeite AppDelegate.h so wie unten gezeigt: füge zwei neue Variablen für die IPConnection und das DualRelay Objekt und die toggleRelays Interface Builder Action hinzu.

#import <UIKit/UIKit.h>
#include "ip_connection.h"
#include "bricklet_dual_relay.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    IPConnection ipcon;
    DualRelay dr;
}

@property (strong, nonatomic) UIWindow *window;

- (IBAction)toggleRelays;

@end

Bearbeite AppDelegate.m so wie unten gezeigt: erzeuge das IPConnection und DualRelay Objekt nachdem die App gestartet ist. Der Einfachheit halber haben wir im Beispiel auf Fehlerbehandlung verzichtet. In der toggleRelays Action wird der Zustand beider Relais umgeschaltet.

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Change to the IP address of your host
    ipcon_create(&ipcon);
    dual_relay_create(&dr, "XYZ", &ipcon); // Change XYZ to the UID of your Dual Relay Brick
    ipcon_connect(&ipcon, "192.168.178.46", 4223);
    dual_relay_set_state(&dr, true, true);

    return YES;
}

- (IBAction) toggleRelays
{
    // Get state of both relays and toogle it
    bool state1, state2;
    dual_relay_get_state(&dr, &state1, &state2);
    dual_relay_set_state(&dr, !state1, !state2);
}

@end

Jetzt öffne das MainStoryboard.storyboard im Interface Builder und füge ein Label und ein an/aus Switch Objekt hinzu wie es im Screenshot zu sehen ist. Der letzte Schritt is das Verbinden des Value Changed Events des Switches mit der toggleRelays Action:

  • Rechtsklick auf den Switch
  • Klicke auf den Kreis rechts vom Value Changed Event
  • Ziehe eine Linie zum First Responder
  • Wähle "toogleRelays" vom Action Menu
Xcode example for C/C++ bindings in iOS
Xcode Beispiel für C/C++ Bindings in iOS, Event verbinden (Schritt 1) Xcode Beispiel für C/C++ Bindings in iOS, Event verbinden (Schritt 2)

Die App kann mittels des Run Knopfes im Simulator getestet werden. Dabei ist darauf zu achten UID und IP Adresse entsprechend des verwendeten Dual Relay Bricklets und PCs abzuändern.