bool HIDDeviceManager::Enumerate(HIDEnumerateVisitor* enumVisitor) { if (!initializeManager()) { return false; } CFSetRef deviceSet = IOHIDManagerCopyDevices(HIDManager); CFIndex deviceCount = CFSetGetCount(deviceSet); // Allocate a block of memory and read the set into it. IOHIDDeviceRef* devices = (IOHIDDeviceRef*) OVR_ALLOC(sizeof(IOHIDDeviceRef) * deviceCount); CFSetGetValues(deviceSet, (const void **) devices); // Iterate over devices. for (CFIndex deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++) { IOHIDDeviceRef hidDev = devices[deviceIndex]; if (!hidDev) { continue; } HIDDeviceDesc devDesc; if (getPath(hidDev, &(devDesc.Path)) && initVendorProductVersion(hidDev, &devDesc) && enumVisitor->MatchVendorProduct(devDesc.VendorId, devDesc.ProductId) && initUsage(hidDev, &devDesc)) { initStrings(hidDev, &devDesc); initSerialNumber(hidDev, &devDesc); // Construct minimal device that the visitor callback can get feature reports from. OSX::HIDDevice device(this, hidDev); enumVisitor->Visit(device, devDesc); } } OVR_FREE(devices); CFRelease(deviceSet); return true; }
/* ------------------------------------------------------------------------- */ int main(void) { uchar i; uchar calibrationValue; calibrationValue = eeprom_read_byte(0); /* calibration value from last time */ if(calibrationValue != 0xff){ OSCCAL = calibrationValue; } initSerialNumber(); i2c_init(); // i2c_scan(); usbDeviceDisconnect(); for(i=0;i<20;i++){ /* 300 ms disconnect */ _delay_ms(15); } usbDeviceConnect(); wdt_enable(WDTO_1S); usbInit(); sei(); pinMode(B,1,OUTPUT); pinMode(B,5,INPUT); internalPullup(B,5,DISABLE); for(;;) { wdt_reset(); usbPoll(); } return 0; }
bool HIDDeviceManager::getFullDesc(IOHIDDeviceRef device, HIDDeviceDesc* desc) { if (!initVendorProductVersion(device, desc)) { return false; } if (!initUsage(device, desc)) { return false; } if (!initSerialNumber(device, desc)) { return false; } initStrings(device, desc); return true; }
bool HIDDeviceManager::Enumerate(HIDEnumerateVisitor* enumVisitor) { if (!initializeManager()) { return false; } CFSetRef deviceSet = IOHIDManagerCopyDevices(HIDManager); if (!deviceSet) return false; CFIndex deviceCount = CFSetGetCount(deviceSet); // Allocate a block of memory and read the set into it. IOHIDDeviceRef* devices = (IOHIDDeviceRef*) OVR_ALLOC(sizeof(IOHIDDeviceRef) * deviceCount); CFSetGetValues(deviceSet, (const void **) devices); // Iterate over devices. for (CFIndex deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++) { IOHIDDeviceRef hidDev = devices[deviceIndex]; if (!hidDev) { continue; } HIDDeviceDesc devDesc; if (getPath(hidDev, &(devDesc.Path)) && initVendorProductVersion(hidDev, &devDesc) && enumVisitor->MatchVendorProduct(devDesc.VendorId, devDesc.ProductId) && initUsage(hidDev, &devDesc)) { initStrings(hidDev, &devDesc); initSerialNumber(hidDev, &devDesc); // Look for the device to check if it is already opened. Ptr<DeviceCreateDesc> existingDevice = DevManager->FindHIDDevice(devDesc, true); // if device exists and it is opened then most likely the CreateHIDFile // will fail; therefore, we just set Enumerated to 'true' and continue. if (existingDevice && existingDevice->pDevice) { existingDevice->Enumerated = true; continue; } // open the device temporarily for startup communication if (IOHIDDeviceOpen(hidDev, kIOHIDOptionsTypeSeizeDevice) == kIOReturnSuccess) { // Construct minimal device that the visitor callback can get feature reports from. OSX::HIDDevice device(this, hidDev); enumVisitor->Visit(device, devDesc); IOHIDDeviceClose(hidDev, kIOHIDOptionsTypeSeizeDevice); } } } OVR_FREE(devices); CFRelease(deviceSet); return true; }
/*---------------------------------------------------------------------------*/ int main(void) { uint8_t rv; uint8_t i = 0; uint8_t mcp3421_addr; uint8_t mcp9800_addr; uint8_t tmpReadout[4]; /* Variables for cold junction moving average filter */ int16_t movAvg_read; int8_t movAvg_ind = 0; int32_t movAvg_sum = 0; uint8_t movAvg_stabil = 0; int16_t movAvg_mem[8] = {0,0,0,0,0,0,0,0}; gainSetting = 0; timer0_counter = 0; initSerialNumber(); usb_init(); I2C_Init(); timer_init(); pinMode(B,1,OUTPUT); /*-----------------------------------------------------------------------*/ /* Search for viable MCP3421 address options */ /*-----------------------------------------------------------------------*/ for(i=0x68;i<0x70;i++) { I2C_Start(); rv = I2C_Write(write_address(i)); I2C_Stop(); if(rv == 0) { mcp3421_addr = i; } } /*-----------------------------------------------------------------------*/ /* Search for viable MCP9800 address options */ /*-----------------------------------------------------------------------*/ I2C_Start(); rv = I2C_Write(write_address(0x48)); I2C_Stop(); if(rv == 0) { mcp9800_addr = 0x48; } else { mcp9800_addr = 0x4D; } /*-----------------------------------------------------------------------*/ /* Set MCP9800 to 12 bit resolution */ /*-----------------------------------------------------------------------*/ I2C_Start(); I2C_Write(write_address(mcp9800_addr)); I2C_Write(0x01); I2C_Write((1<<7)|(1<<6)|(1<<5)); I2C_Stop(); /*-----------------------------------------------------------------------*/ /* Set MCP9800 Register Pointer to Ambient Temperature */ /*-----------------------------------------------------------------------*/ I2C_Start(); I2C_Write(write_address(mcp9800_addr)); I2C_Write(0x00); I2C_Stop(); while(1) { /*-------------------------------------------------------------------*/ /* MCP9800: Cold junction channel */ /*-------------------------------------------------------------------*/ usbPoll(); I2C_Start(); debug[0] = I2C_Write(read_address(mcp9800_addr)); tmpReadout[0] = I2C_Read(ACK); tmpReadout[1] = I2C_Read(NO_ACK); I2C_Stop(); movAvg_read = ((int16_t)tmpReadout[0] << 8) + ((int16_t)tmpReadout[1]); movAvg_sum -= movAvg_mem[movAvg_ind]; movAvg_sum += movAvg_read; movAvg_mem[movAvg_ind] = movAvg_read; if(movAvg_ind == 7) { movAvg_ind = 0; movAvg_stabil = 1; } else { movAvg_ind++; } if(movAvg_stabil == 1) { movAvg_read = movAvg_sum >> 3; } usbPoll(); cli(); coldJunctionReadout[0] = movAvg_read >> 8; coldJunctionReadout[1] = movAvg_read & 0xFF; sei(); /*-------------------------------------------------------------------*/ /* MCP3421: 3.75 SPS + 18 Bits + Initiate new conversion /*-------------------------------------------------------------------*/ usbPoll(); I2C_Start(); I2C_Write(write_address(mcp3421_addr)); I2C_Write((1<<7)|(1<<3)|(1<<2)|gainSetting); I2C_Stop(); /*-------------------------------------------------------------------*/ /* Small delay ... /*-------------------------------------------------------------------*/ timer0_counter = 250; while(timer0_counter) { usbPoll(); } /*-------------------------------------------------------------------*/ /* MCP3421 /*-------------------------------------------------------------------*/ usbPoll(); I2C_Start(); I2C_Write(read_address(mcp3421_addr)); tmpReadout[0] = I2C_Read(ACK); tmpReadout[1] = I2C_Read(ACK); tmpReadout[2] = I2C_Read(ACK); tmpReadout[3] = I2C_Read(NO_ACK); I2C_Stop(); usbPoll(); cli(); thermocoupleReadout[0] = tmpReadout[0]; thermocoupleReadout[1] = tmpReadout[1]; thermocoupleReadout[2] = tmpReadout[2]; thermocoupleReadout[3] = tmpReadout[3]; sei(); }