DrvRsrce

Класс DrvRsrce предоставляет интерфейс для ресурсов (файл конфигурации). Сам он унаследован он класса Resources и реализует драйвер-ориентированные функции, главным образом, связанные со внутренними точками данных драйвера. Для общего драйвера существуют 4 внутренних точки данных, по одной на драйвер. Их привязка к соответствующим именам точек данных осуществляется в файле конфигурации (см. пример ниже).
В файле конфигурации для каждого менеджера драйверов существует отдельный раздел, начинающийся с драйвер-ориентированного имени (между [ и ]). Кроме того, каждый драйвер также может работать в системе циклически (для связи с разными компонентами периферии, связывающимися через те же протоколы с «КАСКАД Цифра»), в этом случае каждый из них должен запускаться с уникальным номером, который указывается с помощью опции «-num x». Для каждого из драйверов в файле конфигурации может быть дополнительно задан отдельный раздел, в этом случае к названию раздела добавляется номер. В следующем примере раздел [myDrv] обрабатывает все драйверы типа myDrv, а раздел [myDrv_2] — только драйвер myDrv с номером 2.
Каждая ресурсная запись задается в отдельной строке, начинающейся с имени ресурса, после которого указывается символ «=» и соответствующие параметры. Строки комментариев начинаются с символа «#».
IconПРИМЕР КОНФИГУРАЦИОННОГО ФАЙЛА # Раздел, относящийся ко всем драйверам типа myDrv
#(это также может быть запись WCCOAmyDrv)
[myDrv]
instantGA = «Yes»
# Раздел настроек для myDrv с
# номером 2
[myDrv_2]
drvGQ = «_Driver2.GQ:_original.._value»
drvSQ = «_Driver2.SQ:_original.._value»
drvSmoothMode = «_Driver2.SM:_original.._value»
drvErrorMode = «_Driver2.EM:_original.._value»
# Должна быть создана точка данных _Driver2 типа CommonDriver
Метод readSection() должен быть перезаписан в специальном драйвере для обработки следующих записей: mydrvRsrce::readSection()
{
static char line[200];
if (!isSection(«mydrv»)) return PVSS_FALSE;
   getNextEntry();
   while (cfgState != CFG_STATE_START && cfgState != CFG_EOF)
   {
        if (keyWord == «instantGA») cgfStream >> instantGA;
        else if (!commonKeyWord())
    // проверьте, что keyWord принадлежит
  //ресурсам ComDrv (drv..)
cerr << «unknown keyWord» << endl; // Сообщение об ошибке
    cfgStream.get(line,200,´/n´);
    getNextEntry();
   }
 return PVSS_TRUE;
Функция getNextEntry() выбирает соответствующую следующую запись из файла конфигурации (следующую строку), проверяет правильность синтаксиса и записывает имя ресурса в переменную keyWord.
Класс DrvRsrce объявляет enum InternalDpIdType для передачи заданных перечислений enum для следующих типов внутренних точек данных общего драйвера. Это объявление и описание одиночных значений приведены в файле заголовка ComDrv/DrvRsrce.hxx.
тип точки данныхЗадача
NOT_INTERNAL_DPIDдля обратной связи
INTERNAL_GQ_DPIDвнутренняя точка данных для общего запроса (drvGQ)
INTERNAL_SQ_DPIDвнутренняя точка данных для одиночного запроса (drvSQ)
INTERNAL_SMOOTHMODE_DPIDвнутренняя точка данных для сглаживания (drvSmoothMode)
INTERNAL_ERRMSGMODE_DPIDвнутренняя точка данных для (drvErrorMode)
INTERNAL_DPIDдополнительная внутренняя точка данных (для собственных целей)
Сглаживание может иметь одно из следующих значений:
modeЗадачаИсполнение
SMOOTH_MODE_ALWAYSСглаживание выполняется всегдазапись во внутреннюю точку данных drvSmoothMode значения 0
SMOOTH_MODE_NOTGQСглаживание только в случае произвольных изменений значениязапись во внутреннюю точку данных drvSmoothMode значения 1
SMOOTH_MODE_NEVERСглаживание не выполняетсязапись во внутреннюю точку данных drvSmoothMode значения 2
Приведенные выше значения в общем случае касаются только точек данных, для которых было настроено сглаживание.
Класс DrvRsrce также предоставляет интерфейс для привязки внутренних точек данных с помощью виртуальных функций:
int getNumberOfDpNames() — функция для возврата номера внутренней точки данных.
CharString& getDpName4Query(int index) — эта функция предназначена для получения имени индексированной точки данных (нужно получить соответствующий идентификатор точки данных из менеджера данных).
void setDpIdentifier(CharString& name, DpIdentifier& dpId) — эта функция вызывается для раскрытия идентификатора точки данных с именем«name».
PVSSboolean allIdsGot() — должна вернуть PVSS_TRUE, если идентификатор точки данных был раскрыт для всех внутренних точек данных.
int getNumberOfIds2Connect() — эта функция предназначена для возврата числа идентификаторов точек данных, которые драйвер должен регистрировать с помощью менеджера событий.
DpIdentifier& getId2Connect(int index) — эта функция предназначена для возврата идентификатора индексированной точки данных, которую драйвер должен регистрировать с помощью менеджера событий.
InternalDpIdType isInternalDpId(DpIdentifier& dpId) — общий драйвер проверяет, является ли DPID, для которой была получена прямая ссылка, внутренней точкой данных. Это значит, что данная функция должна вернуть INTERNAL_DPID, если dpId является внутренней точкой данных спец. драйвера. Если dpId не является внутренней точкой данных, функция должна вернуть NOT_INTERNAL_DPID.
void answer4DpId(const DpIdentifier& dpId, Variable * varPtr) — вызывается в случае немедленного ответа на dpCponnect внутренней точки данных в менеджере событий. Новое значение передается в переменной varPtr. Функция должна переработать это изменение в значение. Произвольные прямые ссылки (информация) на внутренние точки данных передаются через объект HWService.
Для сопоставления имени и идентификатора DpIdentifier, регистрации исходных значений определены различные функции, позволяющие драйверу иметь внутренние точки данных для хранения собственной информации (без регистрации с помощью менеджера событий).
Класс, унаследованный от DrvRsrce, должен быть реализован в функции main() специального драйвера!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *