//-.-.-.-.-.-.-.-.-.-.-.-.- PathAppendSettingsSerialPortCategory -.-.-.-.-.-.-.-.-.-.-.-.- // DtStatus PathAppendSettingsSerialPortCategory( DtString* pPath, UInt64 DvcSerial, Int Port, Char* pCategory) { DtStatus Status = DT_STATUS_OK; DT_STRING_DECL(SettingsStr, "Settings\\"); DT_STRING_DECL(PortStr, "\\Port"); // Registry path starts with <\Settings\> Status = DtStringAppendDtString(pPath, &SettingsStr); if (DT_SUCCESS(Status)) { // Convert serial to unicode string and append to path Status = DtStringUInt64ToDtStringAppend(pPath, 10, DvcSerial); } if (DT_SUCCESS(Status)) { // Append port if provided if (Port >= 0) { Status = DtStringAppendDtString(pPath, &PortStr); if (DT_SUCCESS(Status)) { // Convert Port to unicode string Status = DtStringUIntegerToDtStringAppend(pPath, 10, Port); } } if (DT_SUCCESS(Status)) { if (pCategory != NULL) { // Append category Status = DtStringAppendChars(pPath, "\\"); if (DT_SUCCESS(Status)) Status = DtStringAppendChars(pPath, pCategory); } } } return Status; }
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtaPropertiesInit -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- // DtStatus DtaPropertiesInit(DtaDeviceData* pDvcData) { DtString DtStrType; DtStringChar DtStrTypeBuffer[9]; DtPropertyData* pPropData = &pDvcData->m_PropData; DtEvtLog* pEvtObject = &pDvcData->m_Device.m_EvtObject; DtStatus Status; // Connect DtStrTypeBuffer to DtStrType DT_STRING_INIT(DtStrType, DtStrTypeBuffer, sizeof(DtStrTypeBuffer)/sizeof(DtStringChar)); // Init properties failed? Status = DtPropertiesInit(pPropData); if (Status != DT_STATUS_OK) { // Use event to report driver errors DtStringAppendChars(&DtStrType, "DTA-"); DtStringUIntegerToDtStringAppend(&DtStrType, 10, pPropData->m_TypeNumber); DtEvtLogReport(pEvtObject, DTA_LOG_PROP_STORE_NOT_FOUND, &DtStrType, NULL, NULL); } return Status; }
//.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtNonVolatileManufSettingsRead -.-.-.-.-.-.-.-.-.-.-.-.-.-. // // Read a registry key from the manufacturing section, e.g. from // ../Dta/Parameters/Settings/Manuf/2137/ForcedHardwareRevision // DtStatus DtNonVolatileManufSettingsRead( DtDrvObject* pSalDrvObj, Int Type, Char* pName, Int64* pBinValue) { DtStatus Status = DT_STATUS_OK; #ifdef WINBUILD // Windows uses the registry to store non volatile settings NTSTATUS NtStatus; DtString RegKeyName; DtString ValueName; // Allocate RegKeyName buffer Status = DtStringAlloc(&RegKeyName, 150); if (DT_SUCCESS(Status)) { Status = DtStringAlloc(&ValueName, 40); if (DT_SUCCESS(Status)) { // Create registry path string DT_STRING_DECL(SettingsStr, "Settings\\Manuf\\"); // Registry path starts with <\Settings\Manuf\> Status = DtStringAppendDtString(&RegKeyName, &SettingsStr); if (DT_SUCCESS(Status) && Type!=-1) // Convert type to unicode string and append to path Status = DtStringUIntegerToDtStringAppend(&RegKeyName, 10, (UInt)(Type)); if (DT_SUCCESS(Status)) { // Convert value name to DtString Status = DtStringAppendChars(&ValueName, pName); if (DT_SUCCESS(Status)) { // Read register binary value NtStatus = DriverParametersKeyRead(pSalDrvObj->m_WdfDriver, &RegKeyName, &ValueName, pBinValue, NULL); if (!NT_SUCCESS(NtStatus)) { Status = DT_STATUS_FAIL; // Be more specific if object name was not found if (NtStatus == STATUS_OBJECT_NAME_NOT_FOUND) Status = DT_STATUS_NOT_FOUND; } } } // Free ValueName DtStringFree(&ValueName); } // Free RegKeyName DtStringFree(&RegKeyName); } #else // Not yet implemented in Linux. Status = DT_STATUS_NOT_FOUND; #endif return Status; }