BOOL CReadWriteASIC::ReadSlaveIDFromASIC( BYTE *pSlaveID ) { LONG lValTmp; BYTE value; BOOL bRet = FALSE; if(NOERROR == WriteToRegister(KSPROPERTY_CLIENT_PROP_ASICREAD, &lValTmp, 0x10d1, 0, 0)) { if(NOERROR == ReadFromRegister(KSPROPERTY_CLIENT_PROP_ASICREAD, &lValTmp)) { value = (BYTE)lValTmp; bRet = TRUE; } } else { ReadFromASIC(0x10d1, &value); bRet = TRUE; } *pSlaveID = value; // add [3/11/2011 haifeng_liu] return bRet; }
BOOL CReadWriteASIC::ReadFromASIC( USHORT Addr, BYTE *pValue ) { IKsControl *pKsControl; KSP_NODE ExtensionProp; struct { USHORT Addr; USHORT Value; } ExtensionData; ULONG ulBytesReturned; HRESULT hr; TRACE0("ReadFromASIC=>\n"); if(m_pSrcFilter == NULL) return FALSE; hr = m_pSrcFilter->QueryInterface(IID_IKsControl,(LPVOID*)&pKsControl); TRACE("QueryInterface(IID_IKsControl):0x%08x\n", hr); if (hr != NOERROR) return FALSE; // dummy write for setting address ExtensionProp.Property.Set = PROPSETID_VIDCAP_EXTENSION_UNIT; ExtensionProp.Property.Id = 1;//KSPROPERTY_EXTENSION_UNIT_INFO; ExtensionProp.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY; ExtensionProp.NodeId = 1; ExtensionData.Addr = Addr; ExtensionData.Value = 0xFF00; hr = pKsControl->KsProperty( (PKSPROPERTY) &ExtensionProp, sizeof(ExtensionProp), (PVOID) &ExtensionData, sizeof(ExtensionData), &ulBytesReturned); TRACE("IKsControl->KsProperty(Set):0x%08x\n", hr); if (hr == NOERROR) { ExtensionProp.Property.Set = PROPSETID_VIDCAP_EXTENSION_UNIT; ExtensionProp.Property.Id = 1;//KSPROPERTY_EXTENSION_UNIT_INFO; ExtensionProp.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY; ExtensionProp.NodeId = 1; ExtensionData.Addr = Addr; ExtensionData.Value = 0xFF00; memset(&ExtensionData, 0, sizeof(ExtensionData)); hr = pKsControl->KsProperty( (PKSPROPERTY) &ExtensionProp, sizeof(ExtensionProp), (PVOID) &ExtensionData, sizeof(ExtensionData), &ulBytesReturned); TRACE("IKsControl->KsProperty(Get):0x%08x\n", hr); if (hr == NOERROR) *pValue = (BYTE)ExtensionData.Value; } else { // james 2007/01/03 LONG Asic_data = 0; LONG Asic_address = Addr; if(NOERROR == WriteToRegister (KSPROPERTY_CLIENT_PROP_ASICREAD, &Asic_data, Asic_address, 0, 0)) { if(NOERROR == ReadFromRegister (KSPROPERTY_CLIENT_PROP_ASICREAD, &Asic_data)) { *pValue = (BYTE)Asic_data; TRACE("ReadFromASIC Asic data = %x", Asic_data); hr = NOERROR; } } else hr = S_FALSE; } pKsControl->Release(); return (hr == NOERROR); }
int LSM303DLHC::Get_RawOutZ() { unsigned char l = ReadFromRegister(_REG_R_OUT_Z_L_A); unsigned char h = ReadFromRegister(_REG_R_OUT_Z_H_A); return (short)((h << 8) | l); }