Esempio n. 1
0
//-.-.-.-.-.-.-.-.-.-.-.-.- 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;
}
Esempio n. 2
0
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- 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;
}
Esempio n. 3
0
//.-.-.-.-.-.-.-.-.-.-.-.-.-.- 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;
}