#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; }