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