• Как использовать QtSerialPort?

    peleron
    @peleron
    Веду кружки по робототехнике
    Как отметил Армянское Радио - нужно проверить в первую очередь код возврата.
    Во-вторых, возможно вызов процедуры bool QSerialPort::waitForBytesWritten(int msecs) может помочь.
    Ответ написан
    Комментировать
  • Qt не получается передать массив между формами. Похоже на то, что сигнал не доходит до слота. В чем может быть проблема?

    peleron
    @peleron
    Веду кружки по робототехнике
    А при запуске приложения в консоль не выводятся уведомления о невозможности создать коннект или что-то типа того?
    в connect не надо писать наименование переменных. Т.е. надо
    connect(this, SIGNAL(sendData(int, double)), form, SLOT(recieveData(int, double)));

    И ещё - для отладки лучше выводите сообщения в консоль с помощью qDebug() << "";
    Ответ написан
  • MinGW или MSVC: какой компилятор выбрать для приложений на Qt под Windows?

    peleron
    @peleron
    Веду кружки по робототехнике
    Не знаю как для Андроида, но MSVC компилятор стоит использовать только если нужно статически линковаться с библиотеками, им собранными. В остальных случаях удобнее использовать MinGW.
    В нём и поддержка C++11 гораздо шире. И под Андроида возможно используется компилятор на базе gcc, т.е. схожий с MinGW.
    А насчёт страха использования GDB - то в QtCreator не заметно какой отладчик используется.
    Ответ написан
    Комментировать
  • Какие выбрать телефоны для sip-телефонии?

    peleron
    @peleron
    Веду кружки по робототехнике
    Если рабочие места компьютеризированные и уже включены в общую сеть ) то достаточно на компьютер установить любую SIP-звонилку и подключить микрофон с наушниками - больше ничего не требуется.
    с wi-fi могут быть проблемы, если вокруг очень много wi-fi точек доступа.
    Ответ написан
    Комментировать
  • Какие есть утилиты для тестирования SIP-телефонии?

    peleron
    @peleron
    Веду кружки по робототехнике
    Была похожая задача и у нас на проекте. Никаких альтернатив sipp мы тогда не нашли.
    Более-менее разобрались с ним - удалось написать сценарий для осуществления звонка, но дальше этого мы не продвинулись - у нас решилось это ручным тестированием (максимум 5 параллельных званков устройство держало).
    Ответ написан
    Комментировать
  • Как создать ярлык средствами winapi на C++?

    peleron
    @peleron
    Веду кружки по робототехнике
    Линковщик не находит реализаций указанных процедур - CoInitialize, CoCreateInstance и т.д.
    1. Вариант: Вам надо в опции компилятора добавить пути к библиотеке Ole32.lib
    Но насколько я понимаю, в случае с mingw компилятором статически вы не сможете прилинковать эту библиотеку, поэтому вариант 2 либо собирайте в Visual Studio
    2. Сделайте динамическую компиляцию и во время запуска приложения подсуньте ему библиотеку Ole32.dll
    Ответ написан
  • Как определить гудок начала записи автоответчика?

    peleron
    @peleron
    Веду кружки по робототехнике
    Вам поможет Цифровая Обработка Сигналов - она же DSP
    Что вам нужно:
    1. постоянно вести запись звука и выполнять операции выделения "гудка"
    2. если гудок появляется, то DSP это покажет через резкое увеличение какого-то параметра - нп. амплитуды какой-то частоты.
    Самое сложное - определить характеристику гудка - частоту(ы), минимальную длительность. Тип гудка не стандартизирован, но нужно проверять - возможно они чем-то похожи. Проанализировать сигнал можно в программе ru.wikipedia.org/wiki/Audacity
    Из DSP процедур посмотрите в сторону FFT(БПФ) и алгоритма Герцеля (Goertzel algorithm)
    Ответ написан
    Комментировать
  • Как интегрировать в приложение SIP-телефонию на базе Linphone?

    peleron
    @peleron
    Веду кружки по робототехнике
    SIP-телефония, это не очень сложно.
    Но тут главный нюанс - Linphone написан на С или C++, а вы я так понимаю думаете на Андроиде это запускать, а там по моему на Java надо приложения.
    Но даже если вам надо на С приложение, то смотрите те классы Linphone, которые отвечают за GUI - какие процедуры вызываются по нажатию на кнопки звонка.
    Ещё могу посоветовать отличную библиотеку с кучей примеров и хорошей документацией - www.pjsip.org Правда она тоже на С написана
    Ответ написан
  • Подключение субтитров QT

    peleron
    @peleron
    Веду кружки по робототехнике
    Вам нужно просто отображать QLabel поверх виджета с проигрыванием видео.
    Во время проигрывания видео, можно подключиться к сигналу positionChanged у класса QMediaPlayer - т.о. можно синхронизировать видео и отображение субтитров.
    При открытии в середине фильма - главное промотать субтитры до нужной позиции, а дальше всё как описано выше.
    Ответ написан
    Комментировать
  • Какая есть программа расчета LC фильтра 3 порядка?

    peleron
    @peleron
    Веду кружки по робототехнике
    Помнится рассчитывали цифровые фильтры в Matlab'e - там можно посчитать любого порядка и любого типа. Там даже есть компоненты, не помню точное название - ToolBox'ы что или, где вбиваешь параметры - и на выходе получаешь значения для построения фильтров.
    А вот насчёт аналоговых LC - не знаю, гляньте, может что-то там есть
    Ответ написан
  • Избавление от экспонентной записи ответа и упрощение кода

    peleron
    @peleron
    Веду кружки по робототехнике
    а ещё лучше
    printf("%-20s %.3f\n", "фунт стерлингов", dollar/funt);
    Ответ написан
  • Где найти описание константных типов в с++/com?

    peleron
    @peleron
    Веду кружки по робототехнике
    Посмотрите в разделе "Указатели" на сайте www.codenet.ru/db/vfp/winapi
    В вашем случае:
    LPDATAOBJECT - указатель на какой-то объект
    LPCITEMIDLIST - указатель на константный список из ITEMID
    Ответ написан
    1 комментарий
  • Как лучше организовать взаимодействие с настольным Qt/C++ Application через интернет?

    peleron
    @peleron
    Веду кружки по робототехнике
    Предложу три варианта взаимодействия через Web:
    1. Соединение "клиент-сервер-клиент". в интернете организовывается простейший HTTP сервер. На него ложится CGI-скрипт, который принимает запросы от управляющего устройства и складывает их в файл. Второе (управляемого) устройство периодически скачивает с сервера запросы и отвечает на них - ответы также складируются на сервере. А затем управляющее устройство выгребает их. Это классический случай, в принципе тут ничего сложного и страшного нет. Но главный минус - real-time'a не получится. Задержки будут в пару секунд
    2. Соединение "клиент-клиент через IPv4". Управляющий и управляемый компьютер каким-то образом договариваются о соединении между собой - с целью преодоления всевозможных NAT'ов и файрволлов. А затем обмениваются данными между собой. Плюс - real-time, минус - сложные решения для организации начального соединения. Причём минус жирный - для embedded устройств, особенно без полноценной поддержки сетевого стека и сторонних утилит для сети это организовать очень сложно.
    3. Соединение "клиент-клиент через IPv6". Поскольку сеть - IPv6, то не нужно заморачиваться о преодолении NAT'ов - в IPv6 к любому устройству можно достучаться напрямую. Код совсем минимальный. Минус - IPv6 пока не сильно развит, но есть много сервисов, позволяющих пробросить IPv6 через IPv4. Но это требует установки дополнительного софта.
    Так что решайте - стоит ли мучаться с Arduino, или же проще взять что-то помощнее, нп. тот же RaspberryPi и ему подобных товарищей
    Ответ написан
    5 комментариев
  • IP трубка Grandstream и дект менеджер Gigaset

    peleron
    @peleron
    Веду кружки по робототехнике
    DECT - это чисто маркетинговое название, основанное только на том что трубка беспроводная и работает в определённом диапазоне частот. То что трубка DECT - это абсолютно ничего не говорит о их совместимости и взаимозаменяемости. Поэтому каждый производитель изобретает свой протокол общения базовой станции (дект менеджер) и трубок.
    Но в последнее время производители начали всё-таки сплочаться - был придуман стандарт GAP - т.е. если трубка GAP совместима, то по идее она должна подойти к другой станции, если та тоже GAP совместима. На практике это также работает не всегда.
    Особенно в этом отличаются Панасоники.
    В итоге бывают разные случаи - работают только исходящие, или только входящие звонки, или вообще работает только дозвон, а потом идёт обрыв. А бывает что только зарегистрировать трубку можно на станции.

    Итого: общего правила, по которому можно определить - совместимы ли базовая станция со сторонней трубкой - нет. Только путём подбора можно это проверить. А то что написано в мануалах к трубкам - справедливо только если трубка и базовая станция входят в один комплект.

    Могу ещё добавить, что есть стандарт CAT.Iq для DECT трубок - с его вариациями - 1.1, 2.0 и т.п. Так вот это тоже не является гарантией, что трубки с одинаковыми версиями CAT.Iq взаимозаменяемы. Хотя если CAT.Iq 2.0 и выше, то вероятность совместимости довольно высока.
    Ответ написан
    Комментировать
  • Какой есть простой и информативный Linux Benchmark?

    peleron
    @peleron
    Веду кружки по робототехнике
    www.phoronix-test-suite.com
    Сам не пробовал, но на хабре была статья о тестировании двух железок где использовалась эта утилита
    Ответ написан
  • Возможно ли реализовать видеонаблюдение на Raspberry Pi со звуком (одна камера)?

    peleron
    @peleron
    Веду кружки по робототехнике
    Посмотрите в сторону GStreamer - он позволяет передавать и видео и звук, нужно только собрать правильную цепочку - и на выходе можно получить broadcast или unicast трансляцию по разным протоколам - UDP, RTP и разных кодеков
    Ответ написан
    Комментировать
  • Как правильно выносить код в разные файлы?

    peleron
    @peleron
    Веду кружки по робототехнике
    Выносить код в отдельную dll имеет смысл только если нужно запускать несколько экземпляров вашей программы, либо в dll можно вынести какой-то специфичный код, который зависит от типа Операционной системы или других факторов (нп. создание тестовой библиотеки и полноценной)
    Про разбиение одного файла на несколько - тут @KOLANICH верно описал. Добавлю, что в заголовочные файлы (.h) желательно не размещать ничего, кроме определения типов и классов, а также описания сигнатур функций: т.е. ни глобальных переменных, ни тел реализаций функций тут быть не должно, в общем - ни какой логики.
    А также стараться поменьше включать заголовочные файлы друг в друга - потом на грабли с очерёдностью компиляции наткнётесь.
    Ответ написан
    Комментировать
  • Как загрузить картинку в IplImage с ip камеры без предварительного сохранения ее на диск?

    peleron
    @peleron
    Веду кружки по робототехнике
    Преобразование IplImage в JPG реализуется с помощью процедуры cvEncodeImage - на выходе получаем полностью готовый JPG - со всеми атрибутами и мета-информацией.
    Обратная процедура делается с помощью функции cvDecodeImage
    Официальная документация н...
    Пример, но для древнего opencv
    Мой код для кодирования в JPG - к сожалению обратной процедуры не нашёл, но главное - понять JPG картинки передаются через CvMat структуры, главные поля которой - data.ptr и cols
    #define MAX_JPEG_IMAGE_SIZE	1000000
    int jpeg_params[] = { CV_IMWRITE_JPEG_QUALITY, 50, 0 };
    CvMat* encodedMat;
    IplImage* frame = 0;
    CvCapture *capture;
    int image_length;
    unsigned char jpeg_image[MAX_JPEG_IMAGE_SIZE];
    {
    		cvWaitKey(100);
    		frame = cvQueryFrame(capture);
    		if (frame == NULL) {
    			printf("ERROR %s() Can't query frame from camera.\n", __FUNCTION__);
    			break;
    		}
    		encodedMat = cvEncodeImage(".jpeg", frame, jpeg_params);
    		if (encodedMat == NULL) {
    			printf("ERROR %s() Can't encode frame.\n", __FUNCTION__);
    			break;
    		}
    		if (encodedMat->cols > MAX_JPEG_IMAGE_SIZE) {
    			printf("ERROR %s() Size of encoded image (%d) exceeded maximum buffer size (%d).\n",
    					__FUNCTION__, encodedMat->cols, MAX_JPEG_IMAGE_SIZE);
    			break;
    		}
    		image_length = encodedMat->cols;
    		memcpy(jpeg_image, encodedMat->data.ptr, image_length);
    		cvReleaseMat(&encodedMat);
    }
    Ответ написан
    Комментировать
  • Как отправить USSD запрос (через 3g модем) с помощью программирование на C?

    peleron
    @peleron
    Веду кружки по робототехнике
    1й момент - модем должен создать виртуальный COM порт для управления посредством АТ команд
    2й - под какую ОС пишется приложение?
    Если нужно под Linux - то достаточно открыть файл устройства соответствующий 3G модему - т.е. COM порт. А затем записать в этот файл AT команду с USSD запросом.
    Если под Windows - с помощью WinAPI или сторонней библиотеки получить доступ к COM порту и затем писать в него АТ команды и парсить ответы.
    Ответ написан
    2 комментария