!!! ИНФОРМАЦИЯ
RI_SDK - библиотека Robo Intellect Software Development Kit
connector - название группы устройств коннекторов
i2c - название устройства i2c адаптера
SetBus - название метода установки номера шины i2c вручную.
Сигнатура функции
- Shared object
RI_SDK_connector_i2c_SetBus(descriptor, bus, nextBus, prevBus, errorText):errorCode
Описание метода
Позволяет программисту в коде своей программы определить номер шины, на которой в дальнейшем будет открыто соединение с компонентом при вызове функции связывания RI_SDK_LinkPWMToController.
Если не вызывать эту функцию, то номер шины будет определён автоматически, причем для Linux на архитектуре aarch64 номер шины всегда будет равен 1.
Функцию RI_SDK_connector_i2c_SetBus необходимо вызывать ДО связывания (вызов RI_SDK_LinkPWMToController), так как если на заданной шине уже открыто соединение, RI_SDK_connector_i2c_SetBus вернёт ошибку.
Если номер шины необходимо изменить, нужно сперва закрыть все открытые с помощью заданного I2C адаптера соединения с помощью функции RI_SDK_connector_i2c_CloseAll или функции RI_SDK_connector_i2c_Close, вызванной для каждого открытого соединения.
Внимание! Вызов RI_SDK_connector_i2c_SetBus определяет номер шины только на ОС Linux. На ОС Windows номер шины определяется автоматически независимо от результатов выполнения RI_SDK_connector_i2c_SetBus.
Ошибки, возвращаемые RI SDK при вызове функции RI_SDK_connector_i2c_SetBus
Код ошибки | Описание ошибки | Рекомендуемые действия |
---|---|---|
211011 | Значение шины отрицательное. | Измените номер шины на положительное число или 0. |
211012 | Существуют открытые соединения | Закройте перед вызовом функции все открытые соединения (RI_SDK_connector_i2c_Close или RI_SDK_connector_i2c_CloseAll). |
Параметры и возвращаемые значения
Параметр | Тип для Shared object | Тип для Golang gRPC | Описание |
---|---|---|---|
descriptor | int (тип C) | int64 | Дескриптор компонента, у которого будет открыто соединение |
bus | int (тип C) | int64 | Номер шины, на котором должно быть открыто соединение |
nextBus | *int (тип C) | int64 | Указатель на установленный номер шины |
prevBus | *int (тип C) | int64 | Указатель на предыдущий номер шины |
errorText | char[1000] (тип C) | string | Текст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки) |
errorCode | int (тип C) | int64 | Код ошибки |
Примеры
Пример №1 - Определение номера шины I2C вручную.
Выполняется определение номера шины вручную, затем вызывается функция мерцания подключенного на заданном порту светодиода.
- Python
# Установка номера шины i2c вручную.
nextBus = c_int() # Установеленный номер шины.
prevBus = c_int() # Предыдущий номер шины.
errCode = lib.RI_SDK_connector_i2c_SetBus(i2c, 11, nextBus, prevBus, errTextC)
# Обработка ошибки.
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
print("Задан номер шины: ", nextBus, "Предыдущий номер шины: ", prevBus)
Полный текст примера
- Python
# Мерцание светодиода после установки номера шины i2c вручную.
import sys
from ctypes import *
# Подключаем внешнюю библиотеку для работы с SDK
lib = cdll.LoadLibrary("./librisdk.so")
# Указываем типы аргументов для функций библиотеки RI_SDK
lib.RI_SDK_InitSDK.argtypes = [c_int, c_char_p]
lib.RI_SDK_CreateModelComponent.argtypes = [c_char_p, c_char_p, c_char_p, POINTER(c_int), c_char_p]
lib.RI_SDK_LinkPWMToController.argtypes = [c_int, c_int, c_uint8, c_char_p]
lib.RI_SDK_LinkLedToController.argtypes = [c_int, c_int, c_int, c_int, c_int, c_char_p]
lib.RI_SDK_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_connector_i2c_SetBus.argtypes = [c_int, c_int, POINTER(c_int), POINTER(c_int), c_char_p]
lib.RI_SDK_exec_RGB_LED_FlashingWithFrequency.argtypes = [c_int, c_int, c_int, c_int, c_int, c_int, c_bool, c_char_p]
def main():
errTextC = create_string_buffer(1000) # Текст ошибки. C type: char*
i2c = c_int()
pwm = c_int()
led = c_int()
# Инициализация библиотеки RI SDK с уровнем логирования 3
errCode = lib.RI_SDK_InitSDK(3, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Создание компонента i2c адаптера модели ch341
errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "i2c_adapter".encode(), "ch341".encode(), i2c, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Создание компонента ШИМ модели pca9685
errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "pwm".encode(), "pca9685".encode(), pwm, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Создание компонента светодиода модели ky016
errCode = lib.RI_SDK_CreateModelComponent("executor".encode(), "led".encode(), "ky016".encode(), led, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Установка номера шины i2c вручную.
nextBus = c_int() # Установеленный номер шины.
prevBus = c_int() # Предыдущий номер шины.
errCode = lib.RI_SDK_connector_i2c_SetBus(i2c, 11, nextBus, prevBus, errTextC)
# Обработка ошибки.
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
print("Задан номер шины: ", nextBus, "Предыдущий номер шины: ", prevBus)
# Связывание i2c с ШИМ
errCode = lib.RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Связывание ШИМ со светодиодом
errCode = lib.RI_SDK_LinkLedToController(led, pwm, 15, 14, 13, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Мигание светодиода зеленым цветом с частотой 5 мигание в секунду.
# Количество миганий - 2. Яркость красного цвета - 255. Яркость остальных цветов - 0.
errCode = lib.RI_SDK_exec_RGB_LED_FlashingWithFrequency(led, 255, 0, 0, 5, 2, False, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
# Удаление библиотеки со всеми компонентами
errCode = lib.RI_SDK_DestroySDK(True, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
print("Success")
main()