2011-05-06 11 views
15

todo lo que quiero hacer es enviar/recibir datos a través del puerto USB. Con el SDK oficial no es posible, aparte de MFi.USB-Programming en el iPhone

¿Qué otros métodos para comunicarse con otros dispositivos son posibles y lo propondrías?

¡Muchas gracias de antemano!

GD

Respuesta

15

membresía IMF no es necesario para los desarrolladores de software necesarios para su único desarrollador de hardware. ¿A qué puerto USB te refieres? ¿Estás refiriendo al conector de 32 pines del iPhone? Siempre puede enviar datos al dispositivo de hardware usando bluetooth.

Update 1 -

Ante todo momento el código puede parecer compleja estoy pegando esto desde mi proyecto actual. Publique un comentario si quiere un proyecto de muestra.

primero que hay que registrar las notificaciones a la vista qué load-

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil]; 
[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; 

, entonces debería buscar los accesorios conectados -

 _accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]]; 

A continuación, compruebe este es el accesorio correcto que busca -

for(EAAccessory *obj in _accessoryList) 
    { 
     if ([[obj protocolStrings] containsObject:@"com.bluebamboo.p25i"])//if find the accessory(p25) record it 
     { 
      [accessoryLabel setText:@"P25mi connected"]; // yup this is correct accessory! 
      [obj release]; 
      break; 
     } 
    } 

a continuación, abra una sesión -

//if accessory not null 
if(accessory) 
{ 
    session = [[EASession alloc] initWithAccessory:accessory forProtocol:@"com.bluebamboo.p25i"];//initial session that pair with protocol string 
    [[session outputStream] setDelegate:self];//set delegate class for output stream 
    [[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; //set outputstream loop 
    [[session outputStream] open]; //open session 
    [[session inputStream] setDelegate:self]; 
    [[session inputStream] open]; 
    [[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 


} 

A continuación, el delegado corriente se llamará -

//this is a stream listener function that would actived by system while steam has any event 
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent 
{ 



    switch(streamEvent) 
    { 
     case NSStreamEventOpenCompleted: 
      if(theStream==[session outputStream])//to identify which stream has been opend 
      { 
       [self addLabel:@"outputNSStream open;"]; 
      } 
      else 
      { 
       [self addLabel:@"inputNSStream open:"]; 
      } 


      break; 
     case NSStreamEventHasBytesAvailable: 
      //if system has stream data comes in 
      [self addLabel:@"receiving Data;"]; 

      uint8_t buf2[100];//create a buffer 
      unsigned int len = 0; 
      //read buffer commands return actuall length of return data 
      len = [[session inputStream] read:buf2 maxLength:100]; 

      if (len>0) 
      { 
       if (buf2[4]==0x03&&buf2[5]==0x00)//if two bytes are 0x03 and 0x00, that means print success 
       { 
        //display success message 
        alertMessage = [[UIAlertView alloc] initWithTitle:@"SUCCESS:" message:@"P25i have printed Text successfully" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
        [alertMessage show]; 
        [alertMessage release]; 

        [self addLabel:@"received success"]; 
       } 

      } 


      [self enableButton]; 
      //operation finished then close all streams and session 
      [[session outputStream] close]; 
      [[session outputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
      [[session outputStream] setDelegate:nil]; 
      [[session inputStream] close]; 
      [[session inputStream] removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
      [[session inputStream] setDelegate:nil]; 
      [session release]; 
      session = nil; 
      //[self connectSession]; 
      //switcher2=TRUE; 

      break; 
     case NSStreamEventHasSpaceAvailable: 

      [self addLabel:@" NSStreamEventHasSpaceAvailable"]; 
      if (switcher2)//we send loop mode so application would keep sending data to p25, the switcher2 identify the data has send to P25m 
      { 


         //[self addLabel:@"buffer is selected"]; 
       int contentLength=[printContent.text length]; 
       unsigned char buffer[contentLength+7]; 
       buffer[0] = 0X55; 
         buffer[1]=0x66; 
         buffer[2]=0x77; 
         buffer[3]=0x88; 
         buffer[4]=0x44;//print command 
       for (int i=5;i<contentLength+5;i++)//add print content 
       { 
       buffer[i] =[printContent.text characterAtIndex:i-5]; 
        } 
       buffer[contentLength+5]=0x0A; 
       buffer[contentLength+6]=0x0A; 
       [[session outputStream] write:(const uint8_t *)buffer maxLength:contentLength+7];//send print package 



       switcher2 =FALSE; 
      } 



      break; 
     case NSStreamEventErrorOccurred: 
      alertMessage = [[UIAlertView alloc] initWithTitle:@"ERROR:" message:@"NSSTream Error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alertMessage show]; 
      [alertMessage release]; 

      [self enableButton]; 
      [self addLabel:@"NSSTream error"]; 
      break; 
     default: 

      break; 
    } 
} 
+0

gracias por la respuesta - sí, remito el conector de 32 pines del iphone y deseo enviar y recibir datos a través de esta conexión. todas las posibilidades inalámbricas están fuera de cuestión. – user741330

+0

Mi pregunta es cómo puedo escribir datos y leer flujos de datos entrantes desde el conector de 32 pines del iphone. – user741330

+0

check edited answer – Saurabh

6

la salida http://redpark.com

que venden un cable USB y iOS SDK para los datos de lectura/escritura a un dispositivo conectado a través de USB.

lo he utilizado con éxito para conectar el iPad a varios dispositivos.

+1

¿Alguna vez obtuvo una aplicación aprobada? en la App Store con esta funcionalidad incluida? – elsurudo

+2

¿Estás seguro de que redpark.com vende cable USB? – CAMOBAP