tibbo_line/command.tc

230 lines
6.5 KiB
Plaintext

#include "global.th"
#include "command.th"
#include "config_work.th"
#include "braker.th"
#include "net.th"
#include "encoder.th"
static string cmdbuffer = "";
string pars[10];
int par_num;
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} 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_set_windows"){
cmd_replay(cmd_enc_set_windows(params));
}else if (cmd == "debug_enc_level"){
cmd_replay(cmd_debug_enc_level(params));
}else if (cmd == "debug_relay_reply"){
cmd_replay(cmd_debug_relay_reply(params));
}else if (cmd == "debug_sensors"){
cmd_replay(cmd_debug_sensors(params));
}else if (cmd == "debug_showtime"){
cmd_replay(cmd_debug_showtime(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);
}
}
string cmd_debug_sensors(string params){
getParams(params);
config.debug.SensorsLook = val(pars[0])>0;
return "Debug sensors SET="+(config.debug.SensorsLook? "TRUE":"FALSE");
}
string cmd_debug_relay_reply(string params){
getParams(params);
config.debug.RelayReply = val(pars[0])>0;
return "Debug sensors SET="+(config.debug.RelayReply? "TRUE":"FALSE");
}
string cmd_debug_enc_level(string params){
getParams(params);
config.debug.EncoderDebug= val(pars[0]);
return "Debug encoder level SET="+str(config.debug.EncoderDebug);
}
string cmd_debug_showtime(string params){
getParams(params);
config.debug.ShowTime = val(pars[0])>0;
return "Debug show time SET="+(config.debug.ShowTime? "TRUE":"FALSE");
}
string cmd_enc_set_windows(string params){
getParams(params);
config.EncoderCfg.windowWidth = val(pars[0]);
return "Encoder window SET="+str(config.EncoderCfg.windowWidth);
}
void cmd_replay(string message){
d(message);
sock.setsendinband(chr(sock.escchar)+" "+message+chr(sock.endchar)+chr(13)+chr(10));
}
string cmd_setencoder(string params){
string message;
// setencoder=encoderpin,mode,interval,sensorspinoverdot
// setencoder=4,1,50,1.2
d("params: "+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);
}
string port = mid(params,n,len(params)-n+1);
d("port: "+port);
string ports;
n = 1;
p = instr(1,port,".",1);
while (p>0){
ports+=chr(val(mid(port,n,n-p)));
n = p+1;
p = instr(n,port,".",1);
}
ports += chr(val(mid(port,n,len(port)-n+1)));
config.EncoderCfg.encoderPort = vals[0];
config.EncoderCfg.encoderMode = vals[1];
config.EncoderCfg.encoderInterval = vals[2];
config.EncoderCfg.workedPorts = ports;
message = "Энкодер настроен: Порт: "+str(vals[0])+ ", Режим: "+str(vals[1])+ ", Интервал: "+str(vals[2])+ ", Рабочие порты: "+port;
encoder_init();
return message;
}
string cmd_enc_calibre(string params){
int mode = val(left(params,1));
enc_calibrate_mode(mode);
if (mode >0){
return "Запушена калибровка энкодера в режиме "+str(mode);
}
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;
}
void getParams(string params){
//d("params: "+params);
unsigned char n, p, num ;
unsigned long t;
string vals = "";
par_num = 0;
n = 1;
p = instr(1,params,",",1);
while (p>0){
pars[par_num] = mid(params,n,n-p);
n = p+1;
par_num++;
p = instr(n,params,",",1);
}
pars[par_num] = mid(params,n,len(params)-n+1);
}