今作ってるコード
ヘッダファイル
// // NWOViewController.h // ModelaJogger // // Created by shohei on 11/11/12. // Copyright (c) 2012 shohei. All rights reserved. // #import <UIKit/UIKit.h> @interface NWOViewController : UIViewController { //IBOUtletの宣言ってインスタンス変数のフィールド定義ではいらないの? //IBOutlet UIButton *X_back_button; //IBOutlet UIButton *X_forward_button; //IBOutlet UIButton *Y_back_button; //IBOutlet UIButton *Y_forward_button; //__weak IBOutlet UIButton *spindle_ON_button; //__weak IBOutlet UIButton *spindle_OFF_button; __weak IBOutlet UILabel *debugConsoleHoge; } @property (weak, nonatomic) IBOutlet UILabel *debugConsoleHoge; @property (weak, nonatomic) IBOutlet UIButton *X_back_button; @property (weak, nonatomic) IBOutlet UIButton *X_forward_button; @property (weak, nonatomic) IBOutlet UIButton *Y_back_button; @property (weak, nonatomic) IBOutlet UIButton *Y_forward_button; @property (weak, nonatomic) IBOutlet UIButton *spindle_ON_button; @property (weak, nonatomic) IBOutlet UIButton *spindle_OFF_button; - (IBAction)X_back:(id)sender; - (IBAction)X_forward:(id)sender; - (IBAction)Y_back:(id)sender; - (IBAction)Y_forward:(id)sender; - (IBAction)spindle_ON:(id)sender; - (IBAction)spindle_OFF:(id)sender; //- (void)drawDebugConsoleHoge; -(void)showAlert:(NSString *)mojiretsu; @end
実装ファイル
// // NWOViewController.m // ModelaJogger // // Created by shohei on 11/11/12. // Copyright (c) 2012 shohei. All rights reserved. // #import "NWOViewController.h" //@class NWOViewController; @interface NWOViewController () @end @implementation NWOViewController @synthesize debugConsoleHoge; //Objective-CとC++でやりとりするためのグローバル変数を用意 NSString* moji = [[NSString alloc] init ]; //C++のプロトタイプ宣言 static int ActualFunc(); //How to synthesize manually? //@synthesize X_back_button,X_forward_button,Y_back_button,Y_forward_button,*spindle_ON_button,spindle_OFF_button; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)showAlert:(NSString *)mojiretsu { UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Title!!" message:[NSString stringWithFormat:@"%@ was pushed",mojiretsu] delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"phew", nil]; [alert show]; } - (IBAction)X_back:(id)sender { [self showAlert:@"X back"]; } - (IBAction)X_forward:(id)sender { [self showAlert:@"X forward"]; } - (IBAction)Y_back:(id)sender { [self showAlert:@"Y back"]; } - (IBAction)Y_forward:(id)sender { [self showAlert:@"Y forward"]; } - (IBAction)spindle_ON:(id)sender { ActualFunc(self); } - (IBAction)spindle_OFF:(id)sender { } //- (void)drawDebugConsoleHoge{ // debugConsoleHoge.text = moji; //} //ここからC++の記法 #include <stdio.h> /* Standard input/output definitions */ #include <string.h> /* String function definitions */ #include <unistd.h> /* UNIX standard function definitions */ #include <fcntl.h> /* File control definitions */ #include <errno.h> /* Error number definitions */ #include <termios.h> /* POSIX terminal control definitions */ #include <sys/ioctl.h> static struct termios gOriginalTTYAttrs; static int OpenSerialPort() { int fileDescriptor = -1; int handshake; struct termios options; // Open the serial port read/write, with no controlling terminal, and don't wait for a connection. // The O_NONBLOCK flag also causes subsequent I/O on the device to be non-blocking. // See open(2) ("man 2 open") for details. fileDescriptor = open("/dev/tty.iap", O_RDWR | O_NOCTTY | O_NONBLOCK); if (fileDescriptor == -1) { printf("Error opening serial port %s - %s(%d).\n", "/dev/tty.iap", strerror(errno), errno); goto error; } // Note that open() follows POSIX semantics: multiple open() calls to the same file will succeed // unless the TIOCEXCL ioctl is issued. This will prevent additional opens except by root-owned // processes. // See tty(4) ("man 4 tty") and ioctl(2) ("man 2 ioctl") for details. if (ioctl(fileDescriptor, TIOCEXCL) == -1) { printf("Error setting TIOCEXCL on %s - %s(%d).\n", "/dev/tty.iap", strerror(errno), errno); goto error; } // Now that the device is open, clear the O_NONBLOCK flag so subsequent I/O will block. // See fcntl(2) ("man 2 fcntl") for details. if (fcntl(fileDescriptor, F_SETFL, 0) == -1) { printf("Error clearing O_NONBLOCK %s - %s(%d).\n", "/dev/tty.iap", strerror(errno), errno); goto error; } // Get the current options and save them so we can restore the default settings later. if (tcgetattr(fileDescriptor, &gOriginalTTYAttrs) == -1) { printf("Error getting tty attributes %s - %s(%d).\n", "/dev/tty.iap", strerror(errno), errno); goto error; } // The serial port attributes such as timeouts and baud rate are set by modifying the termios // structure and then calling tcsetattr() to cause the changes to take effect. Note that the // changes will not become effective without the tcsetattr() call. // See tcsetattr(4) ("man 4 tcsetattr") for details. options = gOriginalTTYAttrs; // Print the current input and output baud rates. // See tcsetattr(4) ("man 4 tcsetattr") for details. printf("Current input baud rate is %d\n", (int) cfgetispeed(&options)); printf("Current output baud rate is %d\n", (int) cfgetospeed(&options)); // Set raw input (non-canonical) mode, with reads blocking until either a single character // has been received or a one second timeout expires. // See tcsetattr(4) ("man 4 tcsetattr") and termios(4) ("man 4 termios") for details. cfmakeraw(&options); options.c_cc[VMIN] = 1; options.c_cc[VTIME] = 10; // The baud rate, word length, and handshake options can be set as follows: cfsetspeed(&options, B19200); // Set 19200 baud options.c_cflag |= (CS8); // RTS flow control of input printf("Input baud rate changed to %d\n", (int) cfgetispeed(&options)); printf("Output baud rate changed to %d\n", (int) cfgetospeed(&options)); // Cause the new options to take effect immediately. if (tcsetattr(fileDescriptor, TCSANOW, &options) == -1) { printf("Error setting tty attributes %s - %s(%d).\n", "/dev/tty.iap", strerror(errno), errno); goto error; } // Success return fileDescriptor; // Failure "/dev/tty.iap" error: if (fileDescriptor != -1) { close(fileDescriptor); } return -1; } static int ActualFunc(NWOViewController *hogehogeController) { int fd; char somechar[8]; fd=OpenSerialPort(); // Open tty.iap with no hardware control, 8 bit, BLOCKING and at 19200 baud if(fd>-1) { write(fd,"*",1); // Write handshaking message over serial /////////////////////////////////////////////////////////////////////////////////////////////////// // After this, our device or our PC program should be strobing serial ground to gain access to the Iphone Serial Line ////////////////////////////////////////////////////////////////////////////////////////////////// read(fd,&somechar[0],1); // Read 1 byte over serial. This will block (wait) untill the byte has been received if(somechar[0]=='*') // Check if this byte is a "handshaking" message { printf("Serial connection established!\n"); // If it is, we have established a connection to the device and can freely read/write over serial! while(1) // Do this forever or untill someone presses CTRL+C { read(fd,&somechar[0],1); // Read a character over serial! putchar(somechar[0]); // Write the character to the Terminal!! //moji = somechar[0]; //グローバル変数 //[[NSString alloc]init]; //普通にNS系のオブジェクトを呼び出せるっぽい hogehogeController->debugConsoleHoge.text = @"hogehoge"; } } } return 0; } @end