From d3b4a8b4bc1c91a47c2e340a0b58e5716c4ed64c Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Fri, 18 Feb 2022 12:34:07 +0300 Subject: [PATCH] Make simplest web-interface for serialsockCANmanage --- serialsockCANmanage/sersock.c | 73 ++++++++++++++++------- serialsockCANmanage/www/bin/acc | 4 ++ serialsockCANmanage/www/bin/runSpeedCtrl | 11 ++++ serialsockCANmanage/www/fans.html | 63 +++++++++++++++++++ serialsockCANmanage/www/favicon.ico | Bin 0 -> 2238 bytes 5 files changed, 129 insertions(+), 22 deletions(-) create mode 100644 serialsockCANmanage/www/bin/acc create mode 100755 serialsockCANmanage/www/bin/runSpeedCtrl create mode 100644 serialsockCANmanage/www/fans.html create mode 100644 serialsockCANmanage/www/favicon.ico diff --git a/serialsockCANmanage/sersock.c b/serialsockCANmanage/sersock.c index 5bccef4..bfc0201 100644 --- a/serialsockCANmanage/sersock.c +++ b/serialsockCANmanage/sersock.c @@ -75,6 +75,49 @@ static int CANsend(int sock, char *cmd){ return TRUE; } +typedef union{ + uint8_t b[4]; + int32_t i32; +} _4bytes; +typedef union{ + uint8_t b[2]; + uint16_t u16; +} _2bytes; + +// get motor speed & current +// @parameters addr - device address (6 bit), sock - socket fd, cmdidx - command index +static int getpars(int addr, int sock, int cmdidx){ + static char buf[BUFLEN]; + uint16_t id = 512 + (addr << 3) + 3, ansid = id + 1; + _4bytes udata; + _2bytes idx; + uint32_t tmillis, ID; + uint8_t cmd, subidx; + //uint8_t CANbuf[8] = {0}; + sprintf(buf, "s %u 0x31 0 %d %d 0 0 0 0\n", id, (cmdidx>>8), (cmdidx&0xff)); + if(CANsend(sock, buf)){ + double T0 = dtime(); + while(dtime() - T0 < TIMEOUT){ + if(1 != canberead(sock)) continue; + int n = read(sock, buf, BUFLEN-1); + DBG("Got %d (%s)", n, buf); + if(n == 0){ + WARNX("Server disconnected"); + signals(1); + } + buf[n] = 0; + if(buf[n-1] == '\n') buf[n-1] = 0; + if(10 != sscanf(buf, "%d #%x %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx", + &tmillis, &ID, &cmd, &subidx, &idx.b[1], &idx.b[0], &udata.b[3], &udata.b[2], &udata.b[1], &udata.b[0])) continue; + DBG("tmillis=%u, ID=%u, cmd=%u, idx=%u, data=%d", tmillis, ID, cmd, idx.u16, udata.i32); + if(ID != ansid) continue; + LOGMSG("RECEIVE: %s", buf); + break; + } + }else return INT_MIN; + return udata.i32; +} + int start_socket(char *path, CANcmd mesg, int par){ FNAME(); if(!path) return 1; @@ -98,8 +141,6 @@ int start_socket(char *path, CANcmd mesg, int par){ LOGERR("connect()"); ERR("connect()"); } - int Bufsiz = BUFLEN; - char *recvBuff = MALLOC(char, Bufsiz); char cmd[BUFLEN]; int setcmd = FALSE; int16_t spd; @@ -117,27 +158,15 @@ int start_socket(char *path, CANcmd mesg, int par){ break; } if(setcmd && !CANsend(sock, cmd)) return 1; - for(int i = 0; i < NMOTORS; ++i){ - uint16_t id = 512 + ((i+1)<<3) + 3, cmdidx = PARIDX_GETSPEED; - //uint8_t CANbuf[8] = {0}; - sprintf(cmd, "s %u 0x31 0 %d %d 0 0 0 0\n", id, (cmdidx>>8), (cmdidx&0xff)); - if(!CANsend(sock, cmd)) continue; - double T0 = dtime(); - while(dtime() - T0 < TIMEOUT){ - if(1 != canberead(sock)) continue; - int n = read(sock, recvBuff, Bufsiz-1); - DBG("Got %d", n); - if(n == 0){ - WARNX("Server disconnected"); - signals(1); - } - recvBuff[n] = 0; - printf("%s", recvBuff); - if(recvBuff[n-1] == '\n') recvBuff[n-1] = 0; - LOGMSG("RECEIVE: %s", recvBuff); - break; - } + int gpar = getpars(1, sock, PARIDX_GETSPEED); + if(gpar != INT_MIN){ + printf("SPEED=%.1f&", gpar/1000.); } + gpar = getpars(1, sock, PARIDX_GETCURRENT); + if(gpar != INT_MIN){ + printf("CURRENT=%.1f&", gpar/1000.); + } + printf("\n"); close(sock); signals(0); return 0; diff --git a/serialsockCANmanage/www/bin/acc b/serialsockCANmanage/www/bin/acc new file mode 100644 index 0000000..68bfe9d --- /dev/null +++ b/serialsockCANmanage/www/bin/acc @@ -0,0 +1,4 @@ +HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Content-type: text/html + diff --git a/serialsockCANmanage/www/bin/runSpeedCtrl b/serialsockCANmanage/www/bin/runSpeedCtrl new file mode 100755 index 0000000..1068021 --- /dev/null +++ b/serialsockCANmanage/www/bin/runSpeedCtrl @@ -0,0 +1,11 @@ +#!/bin/bash + +while true; do + NewVal=$((cat /home/eddy/bin/acc; /home/eddy/bin/SEWcontrol) | nc -w0 -lp 8080 | grep GET) + E=$(echo $NewVal | sed 's|.*setspeed=\([0-9\.]\+\).*|\1|' | grep "^[0-9]*[.]*[0-9]*$") +#' + if [ "x$E" != "x" ]; then + echo "SPEED=$E" + (( E > 299 )) && (( E < 1301 )) && /home/eddy/bin/SEWcontrol -s $E || /home/eddy/bin/SEWcontrol -0 + fi +done diff --git a/serialsockCANmanage/www/fans.html b/serialsockCANmanage/www/fans.html new file mode 100644 index 0000000..01efee6 --- /dev/null +++ b/serialsockCANmanage/www/fans.html @@ -0,0 +1,63 @@ + + + + + BTA primary mirror fans control + + + + +

+ New speed: +     + +

+ Set speed: + + + +
+

+

+ Current: A. Speed: rpm. +

+ + diff --git a/serialsockCANmanage/www/favicon.ico b/serialsockCANmanage/www/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..51c41ea234129baf6196887256583c9688afbbd2 GIT binary patch literal 2238 zcmeHGXHZmE7(Ew+NDC4oA*84g;)Xy%2_{s*Xn-tbL8?ZO6fqQ|h8hxJDGMwhB)GIC zyT~r=y*iFM_U?@1*vr^;>|@s%dvAH~?LJ`g!$1DWpWHX^-us<%zVq(=_FI5(&&ZMB z=AocN0Ve{4Lu(q~_jg1X#ZEay^X9s(G zdpI~az|qkWPEJm6c6Nq~iwj&`UE${D28l!hcXxMqczD3m(-U4^UhwwzhL4XAe0_c4 z=jR81e}4o71RyXl5J5pf2o4TLNJt1mLqic37KVt32t-CkLMoLaDk=)m(b0&FjfG4m zLtI=O;^X6ykdT1H#6%<|B_TOE87V0#$jZt>c6K&$a&nNHn~S`>Jmlx+qoAMwg@uJE zDk?&8aWP6tN>Ex_in6jYl$V!7E|;USvJzEQRj976hC-o0ZEY>;>gu3WD$&r;fX2o~ zG&MD$xw#oFEiF)~RA_B&MO#}N+S}XF(b0j<&Q7S+YIJpVL8H+?tJR{ryBj?{J<#cN z(ChW+?d?ThUmpwx11P0njA6lo1z5OnAr>uKgvE;&W66>wSh{p6mMvR`<;$02#flYJ zxpE~|ty+cEt5;*qnl)Ivb}iPeTZi@Q*JHzm4cNGGBQ|Z?gw2~bW6PE;*t&Hqwr$&n z?c29w$BrG?xpOCW?b?OiyLV&Ho;}#RcQ5ws+lT%8_v65U12}l_APyZmgu{mq{3%GdkA}(FJ zgv*yN({U2#*G`edGjW2-MWR_w{PRlojbUD_b%?;yNCPt@8iLP z2YC4KAs#(?gvXB`44yo;`bp=g*(x#fuks`SRtf+V_9%H7daMpg8o(y!6!6 z^t?Kqhzwe3L%a(iZ%W446Y}n)20Do1xAVr65y=&ujKe!Cl1Gy9^9Bp(9LEo5cDLk6 zgM#7<=QB3{ml2M01}qGdNq9$dnCTX-&a|B zqK(PJ`W4>_Jey6FjKzE;maBEFD41&Gdq&659;fe&0XJ(rjRI08K$J~+yQhX!_w%g8 z$V>D*)Rfv*O=@Nl;WAWRn)`D>{ny3CK|m45(%H6T+TUbW+HhX0o-~v{e+XBy-f@W> zpo!*Ue>OZV&WDTIy^O}fcdP&SQ<)>-<&Fklnar2-5)WR^dzBlt+-ya^kfk{@rVx>d zeBmdG5k8>rOr1%z?0XR*(t1VYKp}%QWTt}D(3F1uw@KobUo&fnV*apcG))92(3*j4 zka^RFbu+1(zE}jS7!4HnfK2ZuRE(+K7tK7?`DP04a)D#C(+7A~Kg#If z{g?LR0KS8oY+`g@8U+pf{X3GJ2pN^Gp|RFYd`vS*mfA-U6!I}+eJYiKu`Dvf7#d%TJ2*U6tHlLm2uZ_cvyU z*#a_mtl6hODRq=ls#E^xLB`HCHNPo?QF*up8S>dz{+|zlMR>)(SV5(cXC_8OBxcHm Njxr^hD)XN${{WWBqQn3I literal 0 HcmV?d00001