#import "SerialPortDemoController.h" @implementation SerialPortDemoController -(void)awakeFromNib { int i; NSArray *portNames; serialPort = [[SerialPort alloc] init]; portNames = [serialPort availableSerialPorts]; [portList removeAllItems]; for( i=0; i<[portNames count]; i++) { [portList addItemWithTitle:[portNames objectAtIndex:i]]; } } - (IBAction)onConnect:(id)sender { bool isOpen = NO, isSetUp = NO; NSString *desiredPortName = [portList titleOfSelectedItem]; if( serialPort != NULL) { isOpen = [serialPort openPort:desiredPortName]; if( isOpen ) // we can configure the port now { isSetUp = [serialPort configurePort:9600 dataBits:8 parity:0 stopBits:0]; if( !isSetUp ) { NSLog(@"Port configuration has failed!"); } // setup the timer to read the data every second timer = [NSTimer scheduledTimerWithTimeInterval:1 target: self selector: @selector(handleTimer:) userInfo: nil repeats:YES]; [connectButton setTitle:@"Disconnect"]; [connectButton setAction:@selector( onDisconnect: )]; } } } - (IBAction)onDisconnect:(id)sender { if( serialPort != NULL ) { [timer invalidate]; [serialPort closePort]; [connectButton setAction:@selector( onConnect: )]; [connectButton setTitle:@"Connect"]; } } - (IBAction)onWrite:(id)sender { NSString *stringValue; NSData *dataToWrite; if( serialPort != NULL ) { stringValue = [writeTextField stringValue]; dataToWrite = [[NSData dataWithBytes:[stringValue cString] length:[stringValue length]] retain]; [serialPort WritePort:dataToWrite]; [dataToWrite release]; } } -(void) handleTimer: (NSTimer *) timer { NSData *serialData; char *str_data; serialData = [serialPort ReadPort]; if( serialData != NULL) { str_data = [serialData bytes]; [readTextView insertText:[NSString stringWithCString:[serialData bytes] length:[serialData length]]]; } } @end