Тango сайт – платформа для стримеров. Получила популярность у потребителей благодаря инструментам и монетизации вовлеченной аудитории. Об особенностях платформы поговорим в статье.
Функции и особенности сайта Танго
Танго приложение для стрима, общения, новых знакомств в онлайне. Доступно для скачивания на телефонные платформы. м своим друзьям.
8. Танго-сюрпризы — это уникальная особенность танго, которая позволяет вам выполнять забавные эффекты в разговоре. Обратите внимание, что этот предмет содержит функцию покупки. Поддержка Tango поддерживает только несколько бесплатных пакетов.
9. Вы можете слушать музыку или отправить музыку другу.
Выше приведены некоторые основные операции, которые помогут вам познакомиться с танго. Желаю успехов!
Источник: ru.webtech360.com
Приложение Tango. Что важно помнить?
Tango Controls
Это система для управления различным оборудованием и программным обеспечением.
TANGO поддерживает 4 платформы на данный момент: Linux, Windows NT, Solaris и HP-UX.
Здесь будет описана работа с Linux(Ubuntu 18.04)
Для чего нужно?
Упрощает работу с различным оборудованием и софтом.
- Вам не нужно думать о том как хранить данные в БД, это уже сделано за Вас.
- Нужно только описать механизм опроса датчиков.
- Сводит весь Ваш код к одному стандарту.
Где взять?
Из исходников не смог ее запустить, для работы использовал готовый образ TangoBox 9.3.
В инструкции описано как ставить из пакетов.
Из чего она состоит?
- JIVE — служит для просмотра и редактирования базы данных TANGO.
- POGO — генератор кода для серверов устройств TANGO.
- Astor — программный менеджер для системы TANGO.
Нас будут интересовать только первые два компонента.
Поддерживаемые языки программирования
Я работал с ней на python New.
Наше устройство(под устройством в дальнейшем будет иметься ввиду программная часть) пустое и имеет две команды управления: State /dev/ttyUSB0″ и скорость com порта baudrade=9600
Commands — команды управления нашим устройством, им можно задать аргументы и возвращаемое значение.
- STATE — возвращает текущее состояние, из States
- STATUS — возвращает текущий статус, это строковое дополнение к STATE
- GPSArray — возвращает gps строку в виде DevVarCharArray
Далее задаются атрибуты устройства которые можно читать/писать в/из него.
Что такое Tango Live?
Scalar Attributes — простые атрибуты (char, string, long и т.п.)
Spectrum Attributes — одномерные массивы
Image Attributes — двумерные массивы
States — состояния в котором находится наше устройство.
Пример добавления атрибута gps_string:
Polling period время в мс, как часто будет обновляться значение gps_string. Если время обновления не задать, то атрибут будет обновляться только по запросу.
Теперь нужно с генерировать код File->Generate
По умолчанию Makefile не генерируется, в 1-ый раз нужно поставить галочку что бы его создать. Это сделано для того что бы внесенные в него правки не удалялись при новой генерации. Создав его единожды и настроив под свой проект(прописать ключи компиляции, доп. файлы) можно забыть про него.
Теперь переходим непосредственно к программированию. pogo с генерировал нам следующее:
Нас будут интересовать NEO6M.cpp s) : TANGO_BASE_CLASS(cl, s.c_str()) < /*—— PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START ——*/ init_device(); /*—— PROTECTED REGION END ——*/ // NEO6M::constructor_1 >
Что здесь есть и что здесь главное? В функции init_device() происходит выделение памяти для наших атрибутов: gps_string void read_attr_hardware(vector void read_gps_string(Tango::Attribute void read_gps_array(Tango::Attribute
Когда мы захотим прочитать значение атрибута gps_string, будут вызваны функции в следующем порядке: always_executed_hook, read_attr_hardware и read_gps_string. В read_gps_string произойдет заполнение gps_string значением.
void NEO6M::read_gps_string(Tango::Attribute DEBUG_STREAM attr_gps_string_read = Tango::string_dup(this->gps.c_str()); attr.set_value(attr_gps_string_read); /*—— PROTECTED REGION END ——*/ // NEO6M::read_gps_string >
Компиляция
Заходим в папку с исходниками и:
make
Программа скомпилируется в папку ~/DeviceServers.
JIVE
jive
В БД уже есть какие-то устройства, создадим теперь наше Edit->Create Server
Теперь попробуем подключиться к нему:
Ни чего не выйдет, сначала надо запустить нашу программу:
sudo ./NEO6M neo6m -v2
Подключиться к com порту у меня можно только с правами root-а. v — уровень логирования.
Как запустить несколько устройств.
Для того что бы запустить несколько таких устройств, необходимо создать нужное количество Devices в Jive:
NEO6M/neo6m/2 . NEO6M/neo6m/N
Для каждого задать свои Properties. Адрес устройства и скорость подключения.
Теперь запускаем:
sudo ./NEO6M neo6m -v2
У нас запуститься два устройства сразу.
Теперь можем подключиться:
Клиент
В графике смотреть на картинки конечно хорошо, но нужно что-то более полезное. Напишем клиент который будет подключаться к нашему устройству и забирать с него показания.
#include using namespace Tango; int main(int argc, char **argv) < try < // // create a connection to a TANGO device // DeviceProxy *device = new DeviceProxy(«NEO6M/neo6m/1»); // // Ping the device // device->ping(); // // Execute a command on the device and extract the reply as a string // vector gps_array; DeviceData cmd_reply; cmd_reply = device->command_inout(«GPSArray»); cmd_reply >> gps_array; for (int i = 0; i < gps_array.size(); i++) < printf(«%c», gps_array[i]); >puts(«»); // // Read a device attribute (string data type) // string spr; DeviceAttribute att_reply; att_reply = device->read_attribute(«gps_string»); att_reply >> spr; cout << spr << endl; vectorspr2; DeviceAttribute att_reply2; att_reply2 = device->read_attribute(«gps_array»); att_reply2.extract_read(spr2); for (int i = 0; i < spr2.size(); i++) < printf(«%c», spr2[i]); >puts(«»); // // Пример записи абстрактного атрибута доступного на запись. // DeviceAttribute value; value = DeviceAttribute(«attr_double», 32.3233); device->write_attribute(value); // // Пример записи абстрактного spectrum атрибута доступного на запись. // vector array(5); DeviceAttribute attr_in; attr_in.set_name(«attr_array»); attr_in write_attribute(attr_in); > catch (DevFailed Except::print_exception(e); exit(-1); >>
g++ gps.cpp -I/usr/local/include/tango -I/usr/local/include -std=c++0x -Dlinux -L/usr/local/lib -ltango -lomniDynamic4 -lCOS4 -lomniORB4 -lomnithread -llog4tango -lzmq -ldl -lpthread -lstdc++
Получили результат в качестве возврата команды, взятия атрибутов строки и массива символов.
Ссылки
Статью писал для себя, потому что спустя некоторое время начинаю забывать как и что делать.
Источник: habr.com