title: Connect the Accessory to my JailBreak iPhone Device
body: <p>I am using serial programming for get connected serial cable to my iPhone</p>
  
  <p>my code is as under</p>
  
  <pre><code>#include &lt;stdio.h&gt;   /* Standard input/output definitions */
  #include &lt;string.h&gt;  /* String function definitions */
  #include &lt;unistd.h&gt;  /* UNIX standard function definitions */
  #include &lt;fcntl.h&gt;   /* File control definitions */
  #include &lt;errno.h&gt;   /* Error number definitions */
  #include &lt;termios.h&gt; /* POSIX terminal control definitions */
  
  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, &amp;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(&amp;options));
      printf("Current output baud rate is %d\n", (int) cfgetospeed(&amp;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(&amp;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(&amp;options, B19200);    // Set 19200 baud    
      options.c_cflag |= (CS8);  // RTS flow control of input
  
  
      printf("Input baud rate changed to %d\n", (int) cfgetispeed(&amp;options));
      printf("Output baud rate changed to %d\n", (int) cfgetospeed(&amp;options));
  
      // Cause the new options to take effect immediately.
      if (tcsetattr(fileDescriptor, TCSANOW, &amp;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;
  }
  
  int main(int args, char *argv[])
  {
      int fd;
      char somechar[8];
      fd=OpenSerialPort(); // Open tty.iap with no hardware control, 8 bit, BLOCKING and at 19200 baud
      if(fd&gt;-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,&amp;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,&amp;somechar[0],1);  // Read a character over serial!
                  putchar(somechar[0]); // Write the character to the Terminal!!
              }
          }
      }
      return 0;
  }
  </code></pre>
  
  <p>but when i am going to check the  cable is connected or not i got one Error like this</p>
  
  <blockquote>
    <p>Error opening serial port /dev/tty.iap - Operation not permitted(1).</p>
  </blockquote>
  
  <p>is there any one know the solution and please give me suggestion if i am going in wrong way
  actually i am a new in iOS development so more confused.</p>
  
  <p>Thanks </p>