2011-09-02 38 views
12

Tôi muốn viết một ứng dụng iPhone/iPad có thể giao tiếp thông qua kết nối USB với chương trình Mac hoặc PC (mà tôi cũng sẽ viết). Có ai biết làm thế nào tôi có thể đi về việc này? (Tôi nhận ra rằng tôi có thể phải bẻ khóa iPad của mình)Giao tiếp USB giữa iPad và Mac hoặc PC

+1

Nếu có thể, bạn chắc chắn sẽ phải bẻ khóa: Tôi biết bạn không thể làm điều này với SDK thông thường. –

+0

Một ý tưởng sẽ là thử sử dụng cổng nối tiếp (UART hoặc /dev/tty.iap). Tôi không chắc chắn nếu bạn có thể làm điều đó mà không có bất kỳ phần cứng bổ sung, nhưng đây là một số liên kết về chủ đề: http://devdot.wikispaces.com/Iphone+Serial+Port+Tutorial http://hcgilje.wordpress.com/2010/02/15/iphone-serial-communication/ – adig

Trả lời

-1

Nó có phải là kết nối USB không?

Nếu không, thì GCDAsyncSocket của Robbie Hanson rất phù hợp để kết nối tất cả các loại thiết bị Apple. Tôi đã sử dụng nó vào năm ngoái để kết nối một loạt các iPad với một ứng dụng duy nhất chạy trên Mac mini.

5

Truyền thông qua cổng USB (USBMux) có thể đáp ứng nhu cầu của bạn. Khi một iPad hoặc iPhone cắm vào máy Mac, sẽ có một mô tả thiết bị/var/run/usbmuxd. Bạn có thể tạo một socket và kết nối nó với/var/run/usbmuxd và gửi/nhận dữ liệu đóng gói đến/hoặc từ thiết bị iOS. Dữ liệu nên được bao bọc.

Dưới đây là tham khảo ngắn gọn từiphonewiki http://theiphonewiki.com/wiki/index.php?title=Usbmux. Những gì tôi có thể cung cấp là mã mẫu để kết nối với usbmuxd.

struct sockaddr_un endpoint; 
size_t size; 

_usbMuxSocket = socket(PF_LOCAL, SOCK_STREAM, 0); 

endpoint.sun_family = AF_LOCAL; 
strncpy(endpoint.sun_path, "/var/run/usbmuxd", 17); 
size = (offsetof (struct sockaddr_un, sun_path) 
     + strlen (endpoint.sun_path) + 1); 

connect(_usbMuxSocket, (struct sockaddr *) &endpoint, size); 

Sau đó bạn phải "kết nối" với cổng mà ứng dụng của bạn nghe trên iPad. Quá trình "kết nối" được thảo luận trong danh sách trang wiki ở trên trong phần Chuỗi sự kiện. Sau khi hoàn thành công việc chuẩn bị, bạn có thể sử dụng ổ cắm để gửi và đọc dữ liệu.

+0

Có lý do gì mà bạn không thể gọi là 'open' và sử dụng kết quả fd đó không? – Dustin

Các vấn đề liên quan