172 lines
3.6 KiB
Plaintext
172 lines
3.6 KiB
Plaintext
#include "net.th"
|
|
#include "relay.th"
|
|
#include "config_work.th"
|
|
#include "braker.th"
|
|
|
|
int num_sdf = 0;
|
|
#define IP_STR "ip="
|
|
|
|
string buff[4];
|
|
|
|
void (*net_handlers[4])(string);
|
|
|
|
void net_openSocket(unsigned char socket,unsigned int port, bool cmd, void (*handler)(string)){
|
|
|
|
d("Сеть ["+str(socket)+"]: Открытие "+ (cmd? "коммандного ":"") +"порта #"+str(port));
|
|
sock.num = socket;
|
|
//net_handlers[socket] = handler;
|
|
sock.protocol = PL_SOCK_PROTOCOL_TCP;
|
|
sock.localportlist = port;
|
|
sock.rxbuffrq(1);
|
|
sock.txbuffrq(1);
|
|
if (cmd){
|
|
sock.cmdbuffrq(2);
|
|
sock.rplbuffrq(2);
|
|
sock.tx2buffrq(5);
|
|
sock.inbandcommands= YES;
|
|
sock.escchar = '@';
|
|
sock.endchar = '&';
|
|
}
|
|
sys.buffalloc();
|
|
sock.reconmode = PL_SOCK_RECONMODE_1;
|
|
sock.inconmode = PL_SOCK_INCONMODE_ANY_IP_ANY_PORT;
|
|
|
|
}
|
|
void net_init(){
|
|
|
|
// string ip = get_parameter("IP");
|
|
net.ip=validate_id(config.IP);
|
|
d("Network initialized");
|
|
}
|
|
|
|
void net_start(){
|
|
|
|
net_openSocket(0,1000,false);//, &net_sensor_handle); // sensors
|
|
net_openSocket(1,999,false);//, &net_relay_handle); // relay
|
|
net_openSocket(2,998,true);//, &net_diag_handle); // diag
|
|
net_openSocket(3,997,true);//, &net_config_handle); // config
|
|
net_openSocket(4,996,false);//, &net_config_handle); // config
|
|
}
|
|
|
|
string validate_id(string ip){
|
|
unsigned char x;
|
|
string _ip = ddval(ip);
|
|
|
|
// first number can't be 0 or >223
|
|
x = asc(left(_ip,1));
|
|
if (x==0 || x>223){
|
|
insert(_ip,1,chr(1));
|
|
}
|
|
|
|
// last number can't 0 or 255
|
|
x = asc(right(_ip,1));
|
|
if (x == 0 || x == 255){
|
|
insert(_ip,4,chr(1));
|
|
}
|
|
return ddstr(_ip);
|
|
}
|
|
|
|
void add_buff(int num, string message){
|
|
buff[num]+= message;
|
|
}
|
|
|
|
string get_line(int num){
|
|
int pos;
|
|
string line;
|
|
pos = instr(1,buff[num],chr(13)+chr(10),1);
|
|
if (pos>0){
|
|
line = left(buff[num],pos-1);
|
|
buff[num] = right(buff[num],(len(buff[num])-pos)-1);
|
|
}else
|
|
line = "";
|
|
return line;
|
|
}
|
|
|
|
string relay_buff;
|
|
void net_relay_handle(string message){
|
|
add_buff(0, message);
|
|
string line = get_line(0);
|
|
while (len(line)>0){
|
|
string relay;
|
|
if (len(line)==3)
|
|
relay = left(line,2);
|
|
else
|
|
relay = left(line,1);
|
|
int state = val(right(line,1));
|
|
if (relay=="G" || relay == "B")
|
|
braker_set(line);
|
|
else
|
|
relay_set(val(relay),state>0);
|
|
line = get_line(0);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void net_diag_handle(string message){
|
|
|
|
}
|
|
|
|
void net_config_handle(string message){
|
|
|
|
}
|
|
|
|
void net_sensor_handle(string message){
|
|
|
|
}
|
|
|
|
void send_sensor(int number, bool state){
|
|
sock.num = 0;
|
|
if (sock.statesimple == PL_SSTS_EST){
|
|
if (config.debug.SensorsLook)
|
|
d("Send sensor "+str(number)+" : "+(state?"1":"0"));
|
|
sock.setdata(str(number)+(state?"1":"0")+chr(13)+chr(10));
|
|
sock.send();
|
|
}
|
|
}
|
|
void send_encoder_tick(int number, unsigned long count){
|
|
int n = sock.num;
|
|
sock.num = 0;
|
|
if (sock.statesimple == PL_SSTS_EST){
|
|
if (config.debug.SensorsLook)
|
|
d("Send encoder tick "+str(number)+" : "+stri(count));
|
|
sock.setdata("enc="+str(number)+":"+(lstri(count))+chr(13)+chr(10));
|
|
sock.send();
|
|
}
|
|
sock.num = n;
|
|
}
|
|
|
|
|
|
void net_send_data(int sock_num,string data){
|
|
int n = sock.num;
|
|
sock.num = sock_num;
|
|
sock.setdata(data);
|
|
sock.send();
|
|
sock.num = n;
|
|
}
|
|
void on_sock_data_arrival()
|
|
{
|
|
t("sock_start");
|
|
switch (sock.num){
|
|
case 0:
|
|
net_sensor_handle(sock.getdata(sock.rxlen));
|
|
break;
|
|
case 1:
|
|
t("relay_start");
|
|
net_relay_handle(sock.getdata(sock.rxlen));
|
|
t("relay_end");
|
|
break;
|
|
case 2:
|
|
net_diag_handle(sock.getdata(sock.rxlen));
|
|
break;
|
|
case 3:
|
|
t("relay_start");
|
|
//net_config_handle(sock.getdata(sock.rxlen));
|
|
net_relay_handle(sock.getdata(sock.rxlen));
|
|
t("relay_end");
|
|
break;
|
|
default:
|
|
sock.getdata(sock.rxlen);
|
|
}
|
|
t("sock_end");
|
|
} |