...простите, но совсем забыл: для компиляции измените содержимое Makefile(makesrc/Makefile): Код (Text): ########################### # Simple Generic Makefile # ########################### #Это для Android (Terminal IDE) ###################### #CC=terminal-gcc ###################### #Это для всех Debian/Raspbian ###################### CC=gcc ###################### #Это для MOXA ###################### #PREFIXPATH=/usr/local/arm-linux/bin #CC=$(PREFIXPATH)/arm-linux-gcc ###################### CFLAGS=-c -Wall LDFLAGS=-lpthread -lcrypto -lm #SOURCES=*.c SOURCES=$(shell ls *.c) OBJECTS=$(SOURCES:.c=.o) EXECUTABLE=../bin/testobj all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .c.o: $(CC) $(CFLAGS) $< -o $@ install: install -m 0755 $(EXECUTABLE) $(HOME)/local/bin clean: rm -rf *o $(EXECUTABLE) Выбрав компилятор раскомментировав нужный вариант и закомментировав остальные. После выполнения: Код (Text): ./create.sh в директории work будут файлы: Код (Text): igor@debian-i:~/coding/GCC/wsobj/work$ ls -al итого 1004 drwxr-xr-x 2 igor igor 4096 Июн 11 12:18 . drwxr-xr-x 11 igor igor 4096 Июн 9 07:30 .. -rw-r--r-- 1 igor igor 7406 Июн 11 12:18 favicon.ico -rw-r--r-- 1 igor igor 6081 Июн 11 12:18 index.html -rwxr-xr-x 1 igor igor 32 Июн 11 12:18 start.sh -rwxr-xr-x 1 igor igor 58106 Июн 11 12:18 testobj -rw-r--r-- 1 igor igor 925101 Июн 11 12:18 work.bmp igor@debian-i:~/coding/GCC/wsobj/work$ ...где work.bmp шаблонный холст чёрного цвета 640х480 24бита; index.html собственно страница с JS; start.sh скрипт, который запустит testobj с параметрами. Всё должно быть скопировано в одну директорию для ВЕБ сервера. Надо запустить: Код (Text): igor@debian-i:~/coding/GCC/wsobj/work$ ./start.sh BMP filename: work.bmp Size Struct info 124 dec 7c hex Version "5" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 921738 bytes Start addr: 8a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 480 Bit in Pixel(color) 24 starting loop redraw..... res = 1 cnt buttons = 7 Видно, что программа определила холст и его параметры Подключаемся браузером набрав в адресной строке браузера Код (Text): http://localhost/test/ Как видите я испытываю на локальной машине, а "test" это тестовая директория, куда я разместил всё это... и где запустил start.sh. Собственно и вопрос в "динамике" адреса. Спасибо!
Как понимаю вот это: PHP: <?php echo $_SERVER['SERVER_ADDR']; ?> Значит надо делать файл index.php с ранее указанным содержимым страницы index.html и соответственно вставлять : PHP: <?php ... $wsUri = $_SERVER['SERVER_ADDR']; ... //тут подготовленное содержимое HTML //где вместо " применяем \" $str = "............."; ... $str = $str . "var wsUri = \"ws://$wsUri/\"\;"; //вместо этого //var wsUri = "ws://127.0.0.1:4321/"; ... //ну и потом echo $str; ... ?> Или надо иначе?
Вот ковырял, ковырял... и наковырял: PHP: <?php $wsUri = $_SERVER['SERVER_ADDR']; $str1 = "<!DOCTYPE html> <html><head><meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\"><title>test4</title></head><body style=\"color: white; background-color: black;\" alink=\"#000099\" link=\"#000099\" vlink=\"#990099\"> <div style=\"text-align: center;\"><img id=\"work\" style=\"width: 640px; height: 480px;\" onclick=mouseclick() alt=\"\" src=\"work.bmp\"></div>\n\n"; $str2_1 = "<script type=\"text/javascript\"> ns4 = (document.layers)? true:false ie4 = (document.all)? true:false var X; var Y; var wx; var wY; var WX; var WY; //параметры лдля отправки var msend; //строка для отправки var Wx = 0; //координата X курсора var Wy = 0; //координата Y курсора var Wk = 0; //флаг клика function init() { if (ns4) {document.captureEvents(Event.MOUSEMOVE);} document.onmousemove=mousemove; } function mousemove(event) { var mouse_x = y = 0; if (document.attachEvent != null) { mouse_x = window.event.clientX; mouse_y = window.event.clientY; } else if (!document.attachEvent && document.addEventListener) { mouse_x = event.clientX; mouse_y = event.clientY; } var we = document.getElementById(\"work\"); X = we.clientWidth; Y = we.clientHeight; status=\"x = \" + mouse_x + \", y = \" + mouse_y; wx = mouse_x - we.getBoundingClientRect().left; wy = we.getBoundingClientRect().top - mouse_y + Y; if((wx > 0) && (wx < X) && (wy > 0) && (wy < Y)) { WX = wx.toFixed(0); WY = wy.toFixed(0); } } var wsApp = (function() { var wsApp = {}; var wsUri = \"ws://"; $str2_2 = ":4321/\"; var outputEl; var wscreen; var websocket; wsApp.init = function() { outputEl = document.getElementById(\"output\"); wscreen = document.getElementById(\"work\"); testWebSocket(); }; function testWebSocket(){ websocket = new WebSocket(wsUri); websocket.onopen = onOpen; websocket.onclose = onClose; websocket.onmessage = onMessage; websocket.onerror = onError; websocket.send } function onOpen(evt){ writeToScreen(\"CONNECTED\"); doSend(\"WebSocket rocks\"); } function onClose(evt){ writeToScreen(\"DISCONNECTED\"); } function onMessage(evt){ var ta = document.querySelector(\"#work\"); var blob = new Blob([evt.data], {type: \"image/bmp\"}); ta.src = URL.createObjectURL(evt.data); } function onError(evt){ writeToScreen('<span style=\"color: red;\">ERROR:</span> ' + evt.data); } function doSend(message){ writeToScreen(\"SENT: \" + message); websocket.send(message); } wsApp.send = function(message) { websocket.send(message); } function writeToScreen(message){ var pre = document.createElement(\"p\"); pre.style.wordWrap = \"break-word\"; pre.innerHTML = message; outputEl.appendChild(pre); } return wsApp; })(); //клик function mouseclick() { if((WX > 0) && (WX < X) && (WY > 0) && (WY < Y)) { Wx = WX; Wy = WY; Wk = 1; } msend = \"mouse_X: \" + Wx + \"\\nmouse_Y: \" + Wy + \"\\n\"; wsApp.send(msend); } init(); window.addEventListener(\"load\", wsApp.init, false); </script> </body></html>"; $str = $str1.$str2_1.$wsUri.$str2_2; echo $str; ?> Иного выдумать не вышло.
Не обязательно использовать PHP, можно и на стороне джаваскрипта использовать window.location.hostname тогда PHP тебе не нужен вообще. Код (Javascript): var wsUri ="ws://" + window.location.hostname + ":4321/"; Ну это в том случае, если у тебя сам веб-сервер и сервер веб-сокетов на одном хосте, разумеется, но у тебя вроде так и есть.
Доброго времени суток! И вот: это результат этого: wsobj.zip Это в main: Код (C++): ... buttonsINIT(); buttonCREATE(10, 10, 80, 20, "circle\0", 255, 127, 127, 0,0,0, &test1); buttonCREATE(100, 10, 80, 20, "circlef\0", 127, 255, 127, 0,0,0, &test2); buttonCREATE(190, 10, 80, 20, "rect\0", 127, 127, 255, 0,0,0, &test3); buttonCREATE(280, 10, 80, 20, "reectf\0", 192, 192, 192, 0,0,0, &test4); buttonCREATE(370, 10, 80, 20, "triangle\0", 192, 0, 0, 0,0,0, &test5); buttonCREATE(460, 10, 80, 20, "clear\0", 255, 255, 255, 0,0,0, &test8); BMP_textout("1234567890...ABCDEFGH... Font 881", 10, 35, 255,255,255, 0,0,0, 0); //setfont(571); //BMP_textout("1234567890...ABCDEFGH... Font 571", 10, 45, 255,255,255, 0,0,0, 0); printf("cnt buttons = %i\n", buttons.cntb); slidersINIT(); sliderCREATE(10,100,20,100, 0,255, (int16_t*)(&R), 255,255,255, 255,0,0); sliderCREATE(35,100,20,100, 0,255, (int16_t*)(&G), 255,255,255, 0,255,0); sliderCREATE(60,100,20,100, 0,255, (int16_t*)(&B), 255,255,255, 0,0,255); printf("cnt sliders = %i\n", sliders.cntslrd); while(work) { BMP_textoutV("RED Color", 25, 210, 255,0,0, 0,0,0, 0); BMP_textoutV("GREEN Color", 50, 210, 0,255,0, 0,0,0, 0); BMP_textoutV("BLUE Color", 75, 210, 0,0,255, 0,0,0, 0); buttonCTRL(mX, mY, 0); sliderCTRL(mX, mY, 0); if(scnt < 100) scnt++; else scnt = 0; usleep(300000); ... } Теперь созданы объекты "кнопка" и "слайдер"... работают как надо. Что для одного объекта, что для другого задаются координаты, размер, цвет... но для кнопки задаётся адрес вызываемой функции, а для слайдера адрес параметра. При нажатии на кнопку вызывается функция, а при клике на слайдер изменяется параметр. Для слайдера так же задаетя минимальное и максимальное значение. При выполнении create.sh происходит компиляция и копирование в директорию work. Оттуда надо скопировать всё содержимое в рабочую директорию web сервера. После чего запустить скрипт start.sh. После этого браузером войти на страницу web сервера. Ну и послушная картинка. Если прикрутить OpenCV и отображать данные с камеры на картинку... и поверх рисовать(обновлять) элементы управления то выйдет панель управления в браузере... ну допустим машинкой с камерой и малиной. Можно управлять по wifi с мобильника(смартфона) без какого-нибудь ПО на смартфоне... кроме браузера. Один только минус - при меняющейся картинке увеличивается объём занятого озу браузером. Но если картинка не меняется память освобождается. Сделал так, что бы картинка не передавалась клиенту, если она соответствует ранее переданной. по всей видимости что объём картинки 1Мб... и в BMP формате.
Доброго времени суток! ...но странное дело... кому-то надо "видео" по HTTP(websocket), управление там же, и много ещё чего. И главное - "ЭТО НИИИИКОМУУУУУУ НЕ НАДО". Но задаются вопросы именно по этой теме. --- Но ведь так нельзя! Может есть решения? Извините! Спасибо!
Доброго времени суток! ...для продолжения работы надо ршить проблему с утечкой памяти со стороны клиента (баузера). Пока остановился на такой форме: Код (Text): <!DOCTYPE html> <html><head><meta content="text/html; charset=utf-8" http-equiv="content-type"><title>test4</title></head><body style="color: white; background-color: black;" alink="#000099" link="#000099" vlink="#990099"> <div style="text-align: center;"><img id="work" style="width: 640px; height: 480px;" onclick=mouseclick() alt="" src=""></div> <script type="text/javascript"> ns4 = (document.layers)? true:false ie4 = (document.all)? true:false var X; var Y; var wx; var wY; var WX; var WY; //параметры лдля отправки var msend; //строка для отправки var Wx = 0; //координата X курсора var Wy = 0; //координата Y курсора var Wk = 0; //флаг клика function init() { if (ns4) {document.captureEvents(Event.MOUSEMOVE);} document.onmousemove=mousemove; } function mousemove(event) { var mouse_x = y = 0; if (document.attachEvent != null) { mouse_x = window.event.clientX; mouse_y = window.event.clientY; } else if (!document.attachEvent && document.addEventListener) { mouse_x = event.clientX; mouse_y = event.clientY; } var we = document.getElementById("work"); X = we.clientWidth; Y = we.clientHeight; status="x = " + mouse_x + ", y = " + mouse_y; wx = mouse_x - we.getBoundingClientRect().left; wy = we.getBoundingClientRect().top - mouse_y + Y; if((wx > 0) && (wx < X) && (wy > 0) && (wy < Y)) { WX = wx.toFixed(0); WY = wy.toFixed(0); } } var wsApp = (function() { var wsApp = {}; var wsUri = "ws://" + window.location.hostname + ":4321/"; var outputEl; var wscreen; var websocket; // var ta; wsApp.init = function() { outputEl = document.getElementById("output"); wscreen = document.getElementById("work"); testWebSocket(); ta = document.querySelector("#work"); var blob = new Blob([evt.data], {type: "image/bmp"}); }; function testWebSocket(){ websocket = new WebSocket(wsUri); websocket.onopen = onOpen; websocket.onclose = onClose; websocket.onmessage = onMessage; websocket.onerror = onError; } function onOpen(evt){ writeToScreen("CONNECTED"); doSend("WebSocket rocks"); } function onClose(evt){ writeToScreen("DISCONNECTED"); } function onMessage(evt){ ta.src = URL.createObjectURL(evt.data); } function onError(evt){ writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); } function doSend(message){ writeToScreen("SENT: " + message); websocket.send(message); } wsApp.send = function(message) { websocket.send(message); } function writeToScreen(message){ var pre = document.createElement("p"); pre.style.wordWrap = "break-word"; pre.innerHTML = message; outputEl.appendChild(pre); } return wsApp; })(); //клик function mouseclick() { if((WX > 0) && (WX < X) && (WY > 0) && (WY < Y)) { Wx = WX; Wy = WY; Wk = 1; } msend = "mouse_X: " + Wx + "\nmouse_Y: " + Wy + "\n"; wsApp.send(msend); } init(); window.addEventListener("load", wsApp.init, false); </script> </body></html> И всё равно в процессе работы объём кэша (занятого озу) растёт. Обновление страницы помогает, но при этом теряется связь (потом конечно возобновляется) по websocket. Есть ли какие-нибудь решения? Спасибо!
Доброго времени суток! Вот начало тестирования загрузки браузера... Начало тестирования 08:35 Отчёт о занятой памяти (free): Код (Text): kto@debian:~$ free total used free shared buffers cached Mem: 3971052 1693876 2277176 79912 105032 613848 -/+ buffers/cache: 974996 2996056 Swap: 4106236 0 4106236 Код HTML+JS: HTML: <!DOCTYPE html> <html><head> <meta content="text/html; charset=utf-8" http-equiv="content-type"> <meta http-equiv='cache-control' content='no-cache'> <meta http-equiv='expires' content='0'> <meta http-equiv='pragma' content='no-cache'> <title>test4</title></head><body style="color: white; background-color: black;" alink="#000099" link="#000099" vlink="#990099"> <div style="text-align: center;"><img id="work" style="width: 640px; height: 480px;" onclick=mouseclick() alt="" src=""></div> <script type="text/javascript"> ns4 = (document.layers)? true:false ie4 = (document.all)? true:false var X; var Y; var wx; var wY; var WX; var WY; //параметры лдля отправки var msend; //строка для отправки var Wx = 0; //координата X курсора var Wy = 0; //координата Y курсора var Wk = 0; //флаг клика function init() { if (ns4) {document.captureEvents(Event.MOUSEMOVE);} document.onmousemove=mousemove; } function mousemove(event) { var mouse_x = y = 0; if (document.attachEvent != null) { mouse_x = window.event.clientX; mouse_y = window.event.clientY; } else if (!document.attachEvent && document.addEventListener) { mouse_x = event.clientX; mouse_y = event.clientY; } var we = document.getElementById("work"); X = we.clientWidth; Y = we.clientHeight; status="x = " + mouse_x + ", y = " + mouse_y; wx = mouse_x - we.getBoundingClientRect().left; wy = we.getBoundingClientRect().top - mouse_y + Y; if((wx > 0) && (wx < X) && (wy > 0) && (wy < Y)) { WX = wx.toFixed(0); WY = wy.toFixed(0); } } var wsApp = (function() { var wsApp = {}; var wsUri = "ws://" + window.location.hostname + ":4321/"; var outputEl; var wscreen; var websocket; // var ta; var blob; wsApp.init = function() { outputEl = document.getElementById("output"); wscreen = document.getElementById("work"); testWebSocket(); ta = document.querySelector("#work"); blob = new Blob([evt.data], {type: "image/bmp"}); }; function testWebSocket(){ websocket = new WebSocket(wsUri); websocket.onopen = onOpen; websocket.onclose = onClose; websocket.onmessage = onMessage; websocket.onerror = onError; } function onOpen(evt){ writeToScreen("CONNECTED"); doSend("WebSocket rocks"); } function onClose(evt){ writeToScreen("DISCONNECTED"); } function onMessage(evt){ ta.src = window.URL.createObjectURL(evt.data); window.URL.revokeObjectURL(ta.src); cache.delete('work.bmp'); cache.clear(); } function onError(evt){ writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); } function doSend(message){ writeToScreen("SENT: " + message); websocket.send(message); } wsApp.send = function(message) { websocket.send(message); } function writeToScreen(message){ var pre = document.createElement("p"); pre.style.wordWrap = "break-word"; pre.innerHTML = message; outputEl.appendChild(pre); } return wsApp; })(); //клик function mouseclick() { if((WX > 0) && (WX < X) && (WY > 0) && (WY < Y)) { Wx = WX; Wy = WY; Wk = 1; } msend = "mouse_X: " + Wx + "\nmouse_Y: " + Wy + "\n"; wsApp.send(msend); } init(); window.addEventListener("load", wsApp.init, false); </script> </body></html> В качестве HTTP/WS сервера MOXA UC-7112-LX-Plus. Количество отображаемых элементов на холсте принципиально не нагружают память клиента (браузера). Передаётся весь холст. Картинка непрерывно подвижная. Время 10:59 подряд две проверки Код (Text): kto@debian:~$ free total used free shared buffers cached Mem: 3971052 2012388 1958664 80704 109300 627724 -/+ buffers/cache: 1275364 2695688 Swap: 4106236 0 4106236 kto@debian:~$ free total used free shared buffers cached Mem: 3971052 1967332 2003720 62712 110040 609728 -/+ buffers/cache: 1247564 2723488 Swap: 4106236 0 4106236 Время 12:01 две проверки подряд Код (Text): kto@debian:~$ free total used free shared buffers cached Mem: 3971052 2197392 1773660 63220 112504 612280 -/+ buffers/cache: 1472608 2498444 Swap: 4106236 0 4106236 kto@debian:~$ free total used free shared buffers cached Mem: 3971052 2197908 1773144 63220 112504 612280 -/+ buffers/cache: 1473124 2497928 Swap: 4106236 0 4106236 Время 13:31 lдве проверки подряд: Код (Text): kto@debian:~$ free total used free shared buffers cached Mem: 3971052 1899212 2071840 64596 115988 645280 -/+ buffers/cache: 1137944 2833108 Swap: 4106236 0 4106236 kto@debian:~$ free total used free shared buffers cached Mem: 3971052 1997876 1973176 64596 116296 645280 -/+ buffers/cache: 1236300 2734752 Swap: 4106236 0 4106236 Время 15:27 две проверки подряд: Код (Text): kto@debian:~$ free total used free shared buffers cached Mem: 3971052 1952040 2019012 64716 120280 661560 -/+ buffers/cache: 1170200 2800852 Swap: 4106236 0 4106236 kto@debian:~$ free total used free shared buffers cached Mem: 3971052 1952264 2018788 64716 120280 661560 -/+ buffers/cache: 1170424 2800628 Swap: 4106236 0 4106236
Доброго времени суток! кстати ври компиляции именно для малины... новой такое: Код (Text): www-data@pi02:~/src/wsobj$ ./create.sh >>> формирование набора файлов в директории work <<< ...очистка work копирование исходников в src... ...копирование Makefile ...копирование из wssrc ...копирование из bmpsrc ...копирование из obsrc ...копирование из gpsrc ...копирование из src ...компиляция в bin gcc -c -Wall bar.c -o bar.o gcc -c -Wall base64.c -o base64.o gcc -c -Wall bmp.c -o bmp.o gcc -c -Wall bmpfunc.c -o bmpfunc.o gcc -c -Wall buttons.c -o buttons.o gcc -c -Wall gpsect.c -o gpsect.o gcc -c -Wall main.c -o main.o gcc -c -Wall slider.c -o slider.o gcc -c -Wall workfunc.c -o workfunc.o gcc -c -Wall wsfunc.c -o wsfunc.o wsfunc.c:21:25: fatal error: openssl/sha.h: No such file or directory #include <openssl/sha.h> ^ compilation terminated. Makefile:33: recipe for target 'wsfunc.o' failed make: *** [wsfunc.o] Error 1 ...копирование в work cp: cannot stat ‘bin/*’: No such file or directory Очистка srcw... ...очистка после комптляции rm -rf *o ../bin/testobj ...очистка srcw ...копирование элементов HTML в work ...копироапние BASH скриптов в work www-data@pi02:~/src/wsobj$ помогло вот это (apt-get install libssl-dev): Код (Text): root@pi02:/home/httpd# apt-get install libssl-dev Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libssl-doc The following NEW packages will be installed: libssl-dev libssl-doc 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 2,263 kB of archives. After this operation, 6,481 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libssl-dev armhf 1.0.1t-1+deb8u9 [1,095 kB] Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libssl-doc all 1.0.1t-1+deb8u9 [1,167 kB] Fetched 2,263 kB in 5s (390 kB/s) Selecting previously unselected package libssl-dev:armhf. (Reading database ... 141113 files and directories currently installed.) Preparing to unpack .../libssl-dev_1.0.1t-1+deb8u9_armhf.deb ... Unpacking libssl-dev:armhf (1.0.1t-1+deb8u9) ... Selecting previously unselected package libssl-doc. Preparing to unpack .../libssl-doc_1.0.1t-1+deb8u9_all.deb ... Unpacking libssl-doc (1.0.1t-1+deb8u9) ... Processing triggers for man-db (2.7.5-1~bpo8+1) ... Setting up libssl-dev:armhf (1.0.1t-1+deb8u9) ... Setting up libssl-doc (1.0.1t-1+deb8u9) ... root@pi02:/home/httpd# И после этого: Код (Text): www-data@pi02:~/src/wsobj$ ./create.sh >>> формирование набора файлов в директории work <<< ...очистка work копирование исходников в src... ...копирование Makefile ...копирование из wssrc ...копирование из bmpsrc ...копирование из obsrc ...копирование из gpsrc ...копирование из src ...компиляция в bin gcc -c -Wall bar.c -o bar.o gcc -c -Wall base64.c -o base64.o gcc -c -Wall bmp.c -o bmp.o gcc -c -Wall bmpfunc.c -o bmpfunc.o gcc -c -Wall buttons.c -o buttons.o gcc -c -Wall gpsect.c -o gpsect.o gcc -c -Wall main.c -o main.o gcc -c -Wall slider.c -o slider.o gcc -c -Wall workfunc.c -o workfunc.o gcc -c -Wall wsfunc.c -o wsfunc.o gcc -c -Wall wsserver.c -o wsserver.o gcc -lpthread -lcrypto -lm bar.o base64.o bmp.o bmpfunc.o buttons.o gpsect.o main.o slider.o workfunc.o wsfunc.o wsserver.o -o ../bin/testobj ...копирование в work Очистка srcw... ...очистка после комптляции rm -rf *o ../bin/testobj ...очистка srcw ...копирование элементов HTML в work ...копироапние BASH скриптов в work www-data@pi02:~/src/wsobj$ Ну и при установки на малину apache2 + PHP, запустив что надо получаем на экране браузера Firefox:
Простите, но это: wsobj3_02_11_2018.zip проба по переходу на PNG вместо BMP. Но пока, что в BMP. Оставил специально, для того, что бы продолжить на работе в обед. Облачный диск с работы пока не организовал. Простите! Это временно. Тут только начало! Рабочего PNG нет. Не понятен метод сжатия данных картинки. Фактически будет на сервере BMP(тут умеем рисовать) ---> PNG. Поделитесь про метод сжатия!
Доброго времени суток: Вот конвертация BMP в PNG: tst3.zip Тут в Makefile выбран компилятор: Код (Text): ###################### PREFIXPATH=/usr/local/arm-linux/bin CC=$(PREFIXPATH)/arm-linux-gcc ###################### для малины и PC Linux надо: Код (Text): ###################### CC=gcc ###################### Вот время исполнения на UC-7112-Lx-Plus: Код (Text): www-data@Moxa:~/ramdisk$ ./test.sh BMP filename: 2.bmp Size Struct info 108 dec 6c hex Version "4" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 768122 bytes Start addr: 7a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 400 Bit in Pixel(color) 24 *w:640 ---stsrt encoding--- PNG_encode - bKGD ---stop encoding--- time start:1541415973 time stop:1541415981 time:8 www-data@Moxa:~/ramdisk$ www-data@Moxa:~/ramdisk$ www-data@Moxa:~/ramdisk$ ./test.sh BMP filename: 2.bmp Size Struct info 108 dec 6c hex Version "4" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 768122 bytes Start addr: 7a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 400 Bit in Pixel(color) 24 *w:640 ---stsrt encoding--- ---stop encoding--- time start:1541416038 time stop:1541416049 time:11 www-data@Moxa:~/ramdisk$ Тут две попытки! На ноутбуке Debian: Код (C++): igor@debian-i:~/coding/RPi3/wsobj3_02_11_2018/doc/tst3$ ./test.sh BMP filename: 2.bmp Size Struct info 108 dec 6c hex Version "4" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 768122 bytes Start addr: 7a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 400 Bit in Pixel(color) 24 *w:640 ---stsrt encoding--- ---stop encoding--- time start:1541417333 time stop:1541417333 time:0 igor@debian-i:~/coding/RPi3/wsobj3_02_11_2018/doc/tst3$ ./test.sh BMP filename: 2.bmp Size Struct info 108 dec 6c hex Version "4" --- step x 3 --- step y 1920 --------------------------------------------------------------------------------- Type : 4d42 Size : 768122 bytes Start addr: 7a hex --------------------------------------------------------------------------------- Widht : 640 Haight : 400 Bit in Pixel(color) 24 *w:640 ---stsrt encoding--- ---stop encoding--- time start:1541417336 time stop:1541417336 time:0 igor@debian-i:~/coding/RPi3/wsobj3_02_11_2018/doc/tst3$ Думаю и на малине будет 0 - это секунды. А MOXA и памяти с гулькин нос и тактовая частота до 200МГц. Так, что в сравнении с передачей BMP ощутимо. В браузере по удалёнке к MOXA сравнивал передачу BMP и PNG. Кстати тестовая программа имеет много мусора - надо чистить.
Доброго времени суток! Исходя из: Подобных элементов интерфейса, который применён и в: http://forum.amperka.ru/threads/ras...-и-вопрос-в-последнем-сообщении.10001/page-14 делается рабочий вариант (есть необходимость и на работе) без применения web сервера apache. Его функцию заменит socat - испытано. Проблема в том, что создавать интерфейс, вставляя координаты элементов, размеры и т.п. вручную как-то не очень. Это легко реализуется в QtCreator в редакторе форм. На выходе файл *.ui в формате xml. Вопрос: Есть ли готовое решение для разбора этого файла, для формирования файлов *.c и *.h с цклью облегчения задачи. Сейчас на подходе самодельный скрипт на bash, который должен сформировать файлы mainwidow.c и mainwindow.h с шаблоном параметров исходя из файла mainwindow.ui (файла формы). Может уже есть что-то? Спасибо!
И что совсем ничего? И что вариант построения рабочего стола программы в WEB не применялось? Что надо делать своё? Будет ли ответ? Описание: создаём некую форму, она имеет элементы управления... ну там кнопки, слайдеры и т.п. как в QtCreator. А некий скрипт превращает это всё в шаблоны Си файлов, куда только надо вписать изменения согласно задаче. Вот только для её выполнения будет создана программа работающая на удалённом ПК и с доступом через браузер. И никаких JSON и т.п. Тупо JS на странице передаёт событие клавиатуры/мышки на сервер. И он в свою очередь выполняет то, что нужно. Ведь идеальная отвязка от платформы, да реального времени! Может есть решение включить это в QtCreator (Visual Studio, как красивый но всё-таки покойник - сервера на windows это отстой) как шаблон для сервера по усмотрению - для потребителя (точно не apache и mysql и т.п.) Если готовые решения есть скажите! Ведь блин через мать такую и водку делаю велосипед, где некую форму готовлю в QtCreator, а потом их этой формы формирую набор Си файлов для компиляции. Кстати что в VS, что QtCreator делаются заготовки для заполнения событий в шаблоны функций при выполнении нажатий на кнопки и т.п. Это всё есть - понятно. Но Вот есть для WEBsocket? Не дайте родить ещё одного покойника(проект). Спасибо!
Вот кстати: Код (Bash): #!/bin/bash # wwwport=1111 wsport=4321 #запуск рабочей программы #./work $wsport & socat \ -vv \ TCP-LISTEN:$wwwport,crlf,reuseaddr,fork \ SYSTEM:" echo HTTP/1.1 200; echo Content-Type\: text/html\; charset-utf-8; echo; cat index.html; " Сервер... простой Web сервер - на одну страницу. Замысел в том, что бы принять браузером некую страницу с этого сервера. А уж она потом получит доступ к WS. Что бы он(сервер) работал по стандартному порту(80) запускать надо от ROOT и он(порт) должен быть не занят(обычным веб сервером - например apache). Иначе как говорилось надо некий другой порт. И требуется установленый socat в системе. По этой схеме занятых рессурсов горааааздо меньше.