views:

646

answers:

3

Hi,

I am having big trouble to communicate through USB, from a Mac to an external HID device. The hardware has been proven fine when running under the Windows XP platform, but I can't find a GOOD exemple of programming the HID with Cocoa / objective-C. Several exemples are available in the Apple center, but they are either poorly documented, or too much complex ( in term of software with mixed objective-C and C, making the file difficult to understand), or not up to date. Well, I must say that I am more an hardware electronic engineer than a software specialist ! So far, I can enumerate the USB port, identify my device using the HID Apple's tools ( I read PID and VID ), but I miserably fail to send a report and/or to read a report back from the external device. I would certainelly appreciate if one of you has used the new Apple's HID API and can share some know how. On the other hand, is there any "USB spy" tool operating with the Apple's OSX ? Thank you so much for your help

Michael

A: 

You are not going to find an Objective-c interface for the HID. At least, not anything more than a wrapper. Because of dynamic binding and delayed messaging, Objective-c is poorly suited to programming time dependent task like device drivers or for communicating with same. You're going to have to work in C.

The Apple resources: Accessing Hardware From Applications,the HID Class Device Interface Guide are going to be your best resources. This tech note offers a good overview as well.

The Apple System profiler will scan you USB chain to see what devices are visible to the hardware itself.

Edit01:

Can't believe I forgot about /Developer/Applications/Utilities/IORegistryExplorer. It gives you a detailed breakdown of the entire hardware tree.

TechZen
A: 

So yes, you're going to have to dive down and write C, not Objective-C, to do your thing.

Luckily, there's an additional Apple resource to make the USB/HID Manager MUCH easier.

See the HID Utilities Sample/Library from Apple

RyanWilcox
Hi,Thank a lot to you gentlemen: your answers save a lot of useless "search and try " time.Based on your comments, a new code gives a better access to my HID device: the external MCU acknoledge some report (checked with the SCL/SDA signals), but the operation is not as expected. Base on Apple's informations, it turns out that the API dedicated to the HID do not support the pipe concept defined by the USB. Consequently, ReadPipe and WritePipe functions must be used instead of the HID high level API. Leaving aside the files provided byApple, do you have any exemple to use such functions ?
Michael
I'm afraid I can't help. Device level stuff is not my bailiwick. The last time I tried I was pursued by a mob of pitchfork waving QA engineers. I just know that if it involves hardware, the code is always going to be in plain C.
TechZen
IOKit is actually a subset of C++.
Azeem.Butt
A: 

what is the objectives of the USB port?

abdale