Список изменений в SDK 2.1 (C++)

1           Файлы и папки

1.1       Каждый класс RshAPI теперь имеет собственный набор файлов RshClass.cpp/RshClass.h.

Сохранена совместимость со старым кодом в том виде, что файл RshApi.h включает в себя все заголовочные файлы всех классов, а файл RshApi.cpp – все *.cpp файлы всех классов.

1.2       Cписок констант RshConsts.h разбит на отдельные файлы:

1.2.1    RshConsts_Common.h – общие константы

1.2.2    RshConsts_ConnectModes.h – дополнительные флаги метода Connect()

1.2.3    RshConsts_InitModes.h - дополнительные флаги метода Init()

1.2.4    RshConsts_GetDataModes.h - дополнительные флаги метода GetData()

1.2.5    RshConsts_Language.h – перечисление со списком языков

1.2.6    RshConsts_RshDataTypes.h – перечисление с константами типов данных RshAPI

1.2.7    RshConsts_GetCodes.hсписок Get кодов.

1.2.8    RshConsts_CapsCodes.hсписок CAPS кодов

1.2.9    RshConsts_StatusCodes.hсписок статус-кодов (коды ошибок)

1.2.10   RshConsts_DeviceInterfaceTypes.hсписок интерфейсов устройств

 

Сам файл RshConsts.h просто включает в себя другие заголовочные файлы, он оставлен для сохранения совместимости со старым кодом.

 

1.3       Файлы с названиями веток в реестре Windows REGKEY\VT_Drivers.ri и REGKEY\VT_Library.ri объединены в один файл REGKEY\RSH_RegistryPaths.ri.

1.3.1    Исключены индивидуальные константы для названия компании и версии, теперь они общие для всех библиотек.

1.3.2    Новые названия продуктов:

1.3.2.1 ProductNameDRV

1.3.2.2 ProductNameLibrary

1.3.3    Константы с полными путями:

1.3.3.1 RSH_KEY_PATH_DRV - библиотеки абстракции устройств;

1.3.3.2 RSH_KEY_PATH_LIBRARY – библиотеки;

1.3.3.3 RSH_KEY_PATH_DPA - библиотеки DPA;

Эти изменения не должны отразиться на существующем коде, если для загрузки библиотек использовался класс RshDllClient.

1.4       Определения типов для системных типов данных (U8, S32 и т.д.) перенесены в файл RshDefChk.h

1.5       Файл RshTypes.h теперь просто включает в себя заголовочные файлы других типов, он оставлен для совместимости со старым кодом. В новом коде желательно включать только те типы, которые нужны, например: #include <RshBufferType.h>

1.6       Заголовочные файлы библиотеки DPA перемещены в закрытую часть SDK.

1.6.1    Константы RSH_GET, связанные с библиотекой DPA перемещены в закрытую часть SDK.

1.7       RshErrorDescription.h

Сообщения об ошибках обновлены. Выполнено описание всех кодов на русском и английском языках.


 

2          Дополнительные определения

2.1       Тип компилятора

Определяются в файлe RshDefChk.h.

2.1.1    RSH_COMPILER_MINGW - MinGW

2.1.2    RSH_COMPILER_GNUC – GNU совместимый (g++)

2.1.3    RSH_COMPILER_BORLANDC – Borland (или Embarcadero) c++ Builder

2.1.4    RSH_COMPILER_MSVC – Microsoft visual c++

Если при сборке не удалось определить компилятор, будет выставлена ошибка #error (см. файл RshDefChk.h)


 

3          Классы

3.1       RshBaseType

3.1.1    Базовый класс RshBaseType теперь содержит только константные поля, которые задаются в конструкторе. Все производные классы должны явно передавать параметры инициализации для конструктора базового класса.

3.1.2    Метод GetTypeName() разбит на две части: статический GetTypeName() с явно заданным параметром typeCode и GetTypeName() без параметра, который получает название типа класса, из которого он вызывается.

3.2       RshScalarType (бывший RshType)

3.2.1    Шаблонный класс RshType переименован в RshScalarType. Так как в SDK его использование в основном шло через typedef’ы вида RSH_U32 это изменение не должно отразиться на существующем коде, только если не были созданы собственные типы данных на основании этого шаблона.

3.2.2    Добавлен метод operator T(), теперь можно использовать переменные этого типа напрямую в выражениях:

RSH_U32 rshSerialNumber = 12345;

Int mySerial = rshSerialNumber;

3.2.3    Добавлена дружественная операция-функция operator<<(), чтобы можно было использовать объекты класса со стандартными потоками ввода-вывода.

3.3       RshBufferType

3.3.1    Рефакторинг методов сортировки SortAscending() и SortDescending(). Для сортировки используется STL алгоритм std::sort.

3.3.2    Методы записи буфера в файл/чтения буфера из файла переименованы в WriteBufferToFile() и ReadBufferFromFile().

Новые реализации методов используют платформонезависимый код для проведения операций чтения и записи файлов.

Добавлены дополнительные перегруженные варианты методов, которые принимают на вход std::string&, std::wstring&, const char*, const wchar_t* в качестве имени файла.

3.3.3    Добавлена реализация дополнительных шаблонных функций RshCopyStringToBuffer() и RshFillBufferWithRandomNumbers().

Данные функции работают только для специфических конкретных шаблонов (специализация) – RshCopyStringToBuffer для «строковых» типов S8 и U8, RshFillBufferWithRandomNumbers – для численных типов S16, U32, double и т.д. При необходимости, можно добавить свою реализацию для нужного типа (см. RshFunctions.h, RshFunctions.cpp)

3.3.4    Добавлена дружественная операция-функция operator<<()

3.3.5    Добавлена частичная совместимость с STL. Есть возможность использовать обобщенные алгоритмы с контейнерами типа RshBufferType<>. Пример такого использования есть в документации по c++.

3.4       RshDBufferType

Шаблонный класс RshDBufferType (двумерный буфер) удален из SDK.

3.5       RshBoardPortInfo

3.5.1    Добавлен новый конструктор, который принимает в качестве параметров размеры списков цифровых и конфигурационных портов. По умолчанию размер списка в объектах RshBoardPortInfo будет равен RSH_MAX_LIST_SIZE.

3.6       RshChannel

3.6.1    Добавлены дополнительные методы для манипулирования битами контрольного слова вида void SetUsed(bool on = true), bool IsSynchroSource() const и др.

3.6.2    Новый конструктор с параметрами, каждый из которых имеет дефолтное значение.

3.6.3    Новый метод void SetDefaultPatameters(), который устанавливает значения настроек канала по умолчанию.

3.6.4    Существующие перегруженные операции сравнения получили спецификаторы const.

3.6.5    Добавлена дружественная операция-функция operator<<()

 

3.7       RshDeviceBaseInfo

3.7.1    Существующие перегруженные операции сравнения получили спецификаторы const.

3.7.2    Добавлена дружественная операция-функция operator<<()

3.8       RshDeviceFullInfo

3.8.1    Добавлена документация полей и методов класса

3.8.2    Строковые поля класса получили спецификатор const (т.е. теперь это const S8* libraryName; и т.д.)

3.8.3    Существующие перегруженные операции сравнения получили спецификаторы const.

3.8.4    Добавлена дружественная операция-функция operator<<()

3.9       RshDeviceKey

3.9.1    Поля value_S8P и value_U16P получили спецификатор const.

3.9.2    Добавлены новые конструкторы

3.9.3    Существующие перегруженные операции сравнения получили спецификаторы const.

3.9.4    Добавлена дружественная операция-функция operator<<()

3.9.5    Добавлены операции сравнения operator==() и operator!=().

3.10  RshDeviceActiveList

Класс удален за ненадобностью.

3.11  RshDllClient

3.11.1   Рефакторинг закрытых методов, используемых для чтения информации из реестра и загрузки кода из dll (Windows).

3.11.2   Изменена сигнатура метода GetRegisteredList() – теперь в качестве параметра принимается ссылка на std::vector<std::string> (раньше был указатель)

3.12  RshDllInterfaceKey

3.12.1   Добавлен новый конструктор, который позволяет более просто сформировать ключ для загрузки интерфейса управления устройствами. Данный конструктор используется во всех новых примерах работы с устройствами.

3.13  RshError

3.13.1   Cообщения об ошибках теперь хранятся в std::map (логарифмическое время поиска вместо линейного).

3.13.2    Дополнительные методы получения описаний ошибок, работающие с std::string и std::wstring.

3.13.3    Устранена потенциальная возможность возникновения утечек памяти.

3.14  RshEventManager

3.14.1   Класс перемещен в закрытую часть SDK (также перемещены связанные классы – RshEventObject и RshCriticalSectionObject).

3.15  RshInitADC

3.15.1   Добавлены дополнительные методы для управления битами контрольного слова вида SetBit() и IsBitSet().

3.15.2   Добавлена дружественная операция-функция operator<<().

3.15.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.16  RshInitDAC

3.16.1   Добавлен новый конструктор

3.16.2   Добавлена дружественная операция-функция operator<<().

3.16.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.17  RshInitDMA

3.17.1   Добавлены дополнительные методы для управления битами контрольного слова вида SetBit() и IsBitSet().

3.17.2   Добавлена дружественная операция-функция operator<<().

3.17.3   Существующие перегруженные операции сравнения получили спецификаторы const.

 

3.18  RshInitGSPF

3.18.1   Добавлены дополнительные методы для управления битами контрольного слова вида SetBit() и IsBitSet().

3.18.2   Добавлена дружественная операция-функция operator<<().

3.18.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.19  RshInitMemory

3.19.1   Добавлены дополнительные методы для управления битами контрольного слова вида SetBit() и IsBitSet().

3.19.2   Добавлена дружественная операция-функция operator<<().

3.19.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.20  RshInitPacket

3.20.1   Структура инициализации RshInitPacket перемещена в закрытую часть SDK.

3.21  RshInitPort

3.21.1   Добавлен новый конструктор

3.21.2   Добавлена дружественная операция-функция operator<<().

3.21.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.22  RshInitTimer

3.22.1   Добавлена дружественная операция-функция operator<<().

3.22.2   Существующие перегруженные операции сравнения получили спецификаторы const.

3.23  RshInitVoltmeter

3.23.1   Добавлена документация методов и полей класса.

3.23.2   Добавлена дружественная операция-функция operator<<().

3.23.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.24  RshPortInfo

3.24.1   Поле name получило дополнительный спецификатор const (const wchar_t* name;)

3.24.2   Добавлена дружественная операция-функция operator<<().

3.24.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.25  RshRegister

3.25.1   Добавлен новый конструктор.

3.25.2   Добавлена дружественная операция-функция operator<<().

3.25.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.26  RshSynchroChannel

3.26.1   Добавлены дополнительные методы для манипулирования битами контрольного слова вида void SetUsed(bool on = true), bool IsSynchroSource() const и др.

3.26.2   Новый метод void SetDefaultPatameters(), который устанавливает значения настроек канала по умолчанию.

3.26.3   Существующие перегруженные операции сравнения получили спецификаторы const.

3.26.4   Добавлена дружественная операция-функция operator<<()

3.27  RshTime

3.27.1   Добавлены новые конструкторы.

3.27.2   Поля класса сделаны закрытыми, добавлены новые методы для установки значений

3.27.3   Добавлены перегруженные операции-функции сравнения.

3.27.4   Добавлена дружественная операция-функция operator<<()

3.27.5   Добавлен статический метод currentTime(), который заполняет структуру текущим значением системного времени.

3.27.6   Добавлены методы форматированного преобразования в строку, toString() и toWString().

4          Другие изменения

4.1       Макросы

4.1.1    Макросы проверки входных параметров функций перемещены в закрытую часть SDK.

4.1.2    Cut переименован в RshCut

4.1.3    CutV переименован в RshCutV

4.1.4    MiMa переименован в RshMiMa

4.1.5    Удален макрос swap, используйте STL аналог std::swap

4.1.6    RshCut, RshCutV и RshMiMa перенесены в RshFunctions.h

 

4.2       Функции

4.2.1    Новые шаблонные функции для работы с буферами (описывались выше, См. RshBufferType)

4.2.2    Функции, связанные со временем и RshTime стали частью класса RshTime.

4.3       Документация

4.3.1    Многие константы, перечисления, функции, классы, методыи  поля структур получили обновленные описания.

4.3.2    Добавлены недостающие описания на английском языке.

4.4       Примеры

4.4.1    Все примеры работы с устройствами переделаны с учетом изменений SDK 2.1.

4.4.2    Примеры сделаны максимально платформонезависимыми.

4.4.3    Ввод-вывод осуществляется через стандартные потоки ввода-вывода (<iostream>).

4.4.4    При возникновении ошибок в процессе выполнения теперь указывается функция, вызов которой завершился с ошибкой.