136 lines
3.8 KiB
Plaintext
136 lines
3.8 KiB
Plaintext
#include "global.th"
|
|
#include "command.th"
|
|
#include "config_work.th"
|
|
#include "braker.th"
|
|
#include "net.th"
|
|
#include "encoder.th"
|
|
|
|
static string cmdbuffer = "";
|
|
void on_sock_inband() // обработка поступивших команд
|
|
{
|
|
cmdbuffer += sock.getinband();
|
|
unsigned char position = instr(1,cmdbuffer,chr(sock.endchar),1);
|
|
while (position != 0){
|
|
string cmdline = left(cmdbuffer,position);
|
|
cmdbuffer = right(cmdbuffer,len(cmdbuffer)-position);
|
|
d("{cmd} line: "+cmdline);
|
|
unsigned char cmdlen = instr(1,cmdline,chr('='),1);
|
|
if (cmdlen==0)
|
|
cmdlen = instr(1,cmdline,chr('&'),1);
|
|
string cmd = left(cmdline,cmdlen-1);
|
|
string params = mid(cmdline,cmdlen+1,position-cmdlen-1);
|
|
d("{cmd}: "+cmd);
|
|
d("{cmd}.params: "+params);
|
|
if (cmd =="systeminfo"){
|
|
cmd_replay(cmd_systeminfo());
|
|
}else if (cmd == "reset" || cmd == "reboot"){
|
|
// cmd_replay(cmd_reset());
|
|
cmd_replay("{cmd} Rebooting...");
|
|
cmd_reset();
|
|
|
|
}else if (cmd == "ip"){
|
|
cmd_replay(cmd_ip(params));
|
|
}else if (cmd == "setbraker"){
|
|
cmd_replay(cmd_setbraker(params));
|
|
}else if (cmd == "setencoder"){
|
|
cmd_replay(cmd_setencoder(params));
|
|
}else if (cmd == "enc_calibrate_start"){
|
|
cmd_replay(cmd_enc_calibre(params));
|
|
}else if (cmd == "enc_calibrate_end"){
|
|
cmd_replay(cmd_enc_calibre("0"));
|
|
}else {
|
|
d("{cmd}: Unknown command: "+cmdline);
|
|
cmd_replay("{cmd}: Unknown command - ["+cmdline+"]");
|
|
}
|
|
position = instr(1,cmdbuffer,chr(sock.endchar),1);
|
|
}
|
|
}
|
|
|
|
void cmd_replay(string message){
|
|
sock.setsendinband(chr(sock.escchar)+" "+message+chr(sock.endchar));
|
|
}
|
|
|
|
string cmd_setencoder(string params){
|
|
return "Запущен режим калибровки энкодера";
|
|
}
|
|
string cmd_enc_calibre(string params){
|
|
return "Остановлен режим калибровки энкодера. Среднее значение: " + str(enc_calibrate_result());
|
|
}
|
|
string cmd_systeminfo(){
|
|
return "{ platform='"+ PLATFORM+"', version='" + VERSION + "', uptime=" + str(sys.timercountms)+" }";
|
|
}
|
|
|
|
void cmd_reset()
|
|
{
|
|
d("{cmd} Rebooting...");
|
|
unsigned int w = sys.timercount;
|
|
while (sys.timercount - w < 2){
|
|
doevents;
|
|
}
|
|
sock.close();
|
|
w = sys.timercount;
|
|
while (sys.timercount-w < 2){
|
|
doevents;
|
|
}
|
|
sys.reboot();
|
|
}
|
|
string cmd_ip(string params)
|
|
{
|
|
string result="";
|
|
string vip = validate_id(params);
|
|
if (vip != params){
|
|
return "{cmd}.ip - Invalid IP: [ "+params+" ]";
|
|
}
|
|
|
|
unsigned char x = stor.setdata(ddval(vip),0);
|
|
doevents;
|
|
if (x == 4){
|
|
config.IP = vip;
|
|
config_save();
|
|
result = ("{cmd}.ip set to [ " + ddstr(stor.getdata(1,4))+" ] after reboot");
|
|
d(result);
|
|
doevents;
|
|
}
|
|
else
|
|
{
|
|
sock.setsendinband(chr(sock.escchar)+" ERROR STORE IP "+chr(sock.endchar));
|
|
doevents;
|
|
}
|
|
return result;
|
|
}
|
|
string cmd_setbraker(string params)
|
|
{
|
|
unsigned char n, p, num ;
|
|
unsigned long t;
|
|
string vals = "";
|
|
n = 1;
|
|
p = instr(1,params,",",1);
|
|
while (p>0){
|
|
vals+=chr(val(mid(params,n,n-p)));
|
|
n = p+1;
|
|
p = instr(n,params,",",1);
|
|
}
|
|
num = vals[0];
|
|
// BrakerConfig c = config.BRAKERS[num-1];
|
|
// c.Enable = val(vals[1]) > 0;
|
|
// string rrrr = right(params,len(params)-n+1);
|
|
// if (c.Enable){
|
|
// c.Relay= vals[1];
|
|
// c.SensPort= vals[2];
|
|
// c.DropPort= vals[3];
|
|
// c.Timeout= (strtof(right(params,len(params)-n+1))*1000);
|
|
// }
|
|
// //braker_init(unsigned char number, unsigned char sensor, unsigned char drop, unsigned char relay, unsigned long timeout);
|
|
unsigned long timeout = (strtof(right(params,len(params)-n+1))*1000);
|
|
braker_init(num,vals[2],vals[3],vals[1],timeout);
|
|
string message;
|
|
if (vals[1]>0){
|
|
message = "OK: Num="+str(num)+", Rel="+str(vals[1])+", Sens="+str(vals[2])+", Drop="+str(vals[3])+", Timeout="+ ftostr(timeout,FTOSTR_MODE_PLAIN,4)+" sec.";
|
|
}else{
|
|
message = "OK: Num="+str(num)+" DISABLED";
|
|
}
|
|
d(message);
|
|
return message;
|
|
}
|
|
|