#include "prot/prot_cmdline.h" #include "base/mycfg.h" #include "QNetworkConfigurationManager" #include "QTimer" #include "QtNetwork" #include "prot/prot_slave.h" #include "prot_cmd/cmd_slave.h" #include "base/check_cfg.h" #include "QFile" #include "base/base.h" #include "cmd_cmdline.h" #include "interface/if_can.h" #include "elec/mystring.h" /* 命令行返回有三种 data:[str] rate:[rate%],[str] end:[1:ok/0:failed],[str] */ void rate_slot(int rate,mystring str) { command *c=command_start(); mystring strs("rate:%1,%2"); strs=strs.arg(rate).arg(str); c->send(strs.data()); } void end_slot(int addr,int ack,slave_data data) { // ack 0是成功,这里转化为1是成功 command *c=command_start(); mystring strs("ack:%1,%2"); strs=strs.arg(!ack).arg("end"); c->send(strs.data()); } // 获取设备基本信息 static void whos(QList args) { QString out; QString name = "local_id:%1,name:%2"; QString hostName = QHostInfo::localHostName(); command *c=command_start(); mycfg *cfg_=syscfg(); name = name.arg(cfg_->local_id).arg(hostName); out.append(name + "\n"); out.append("builed time:" + cfg_->build_date + "\n"); QList network = QNetworkInterface::allInterfaces(); foreach (QNetworkInterface net, network) { QString str = "net:%1"; QString netName = net.humanReadableName(); str = str.arg(netName); out.append(str + "\n"); QList list = net.addressEntries(); // 获取IP地址与子掩码等 foreach (QNetworkAddressEntry address, list) { QString str = "ip:%1"; if (address.ip().protocol() == QAbstractSocket::IPv4Protocol) // 获取IPv4的地址 { out.append(str.arg(address.ip().toString()) + "\n"); } } } out = "ack:1," + out; c->send(out.toLocal8Bit()); } cmdline_export(whos, whos, print device base info.); static void mcu_cmdlines_help(){ command *c=command_start(); c->send("mcu updata [addrs] [file_name] to updata slave app,for example:\n" "\tmcu updata 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 /home/root/config/checker_slave_app.pkt"); c->send("mcu upjwt [addrs] [file_name] to updata jwt app,for example:\n" "\tmcu upjwt 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 /home/root/config/jwt_app.jwt"); c->send("mcu scheme [addrs] to updata slave scheme,for example:\n" "\tmcu scheme 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"); } // mcu 升级程序及方案等 static void mcu_cmdlines(QList args) { command *c=command_start(); prot_slave *slave=protSlave(); mycfg *cfg_=syscfg(); check_cfg *ccfg_=check_plan(); if(args.size()<2){ c->send("cmd len too less."); mcu_cmdlines_help(); return ; } if(args.size()>=4){ QList addrs=str_to_nums(args[2],','); qDebug()<<"addrs:"<set_boardcast_handle(addrs,b); if(ack==false){ qWarning("handle is busy."); }else{ b->set_cbfun([=](int addr,int ack,slave_data data){ end_slot(addr,!ack,data); },[=](int rate,mystring str){ rate_slot(rate,str); }); QFile file; file.setFileName(args[3]); if(file.open(QIODevice::ReadOnly)){ myarray data=file.readAll(); b->start(data); file.close(); }else{ qWarning("open file failed."); } } } // 升级jwt程序 else if(args[1]=="upjwt"){ HandleBoardCast *b=new boardcast_updata_jwt(); bool ack=slave->set_boardcast_handle(addrs,b); if(ack==false){ qWarning("handle is busy."); }else{ b->set_cbfun([=](int addr,int ack,slave_data data){ end_slot(addr,!ack,data); },[=](int rate,mystring str){ rate_slot(rate,str); }); QFile file; file.setFileName(args[3]); if(file.open(QIODevice::ReadOnly)){ myarray data=file.readAll(); b->start(data); file.close(); }else{ qWarning("open file failed."); } } } }else if(args.size()>=3){ QList addrs=str_to_nums(args[2],','); qDebug()<<"addrs:"<set_boardcast_handle(addrs,b); if(ack==false){ qWarning("handle is busy."); }else{ b->set_cbfun([=](int addr,int ack,slave_data data){ end_slot(addr,ack,data); },[=](int rate,mystring str){ rate_slot(rate,str); }); myarray data; if(cfg_->slave_scheme_ext==0){ data=myarray((const char *)ccfg_->check_scheme()->slave_data,2048); }else{ data=myarray((const char *)ccfg_->check_scheme(),ccfg_->check_scheme_size()); } b->start(data); } } } } cmdline_export(mcu, mcu_cmdlines, mcu cmdlines` input [mcu] for detail.); static int g_slave_addr; static void mcu_tran_cmdlines(QList args){ command *c=command_start(); mycfg *cfg_=syscfg(); check_cfg *ccfg_=check_plan(); can_host *can_=static_cast(interFaceFind("can")); if(args.size()<3){ c->send("cmd len too less."); c->send("tran [addr] [cmdline],for example\n" "\ttran 1 sysinfo"); return ; } QList addrs=str_to_nums(args[1],','); qDebug()<<"addrs:"<set_irq([=](int src,myarray data){ if(str_is_print_str(data.data(),data.size())!=1){ return; } if(g_slave_addr!=src){ mystring str="src=%1"; str=str.arg(src); c->send(str.toLocal8Bit()); } c->send(data); }); can_->write(g_slave_addr,can_d); } cmdline_export(tran, mcu_tran_cmdlines, tran cmdline to slave.); static void slave_info(QList args){ command *c=command_start(); prot_slave *slave=protSlave(); mycfg *cfg_=syscfg(); HandleBoardCast *b=new slave_cmd2(); bool ack=slave->set_boardcast_handle(cfg_->calc_slave_addrs(),b); if(ack==false){ qWarning("handle is busy."); }else{ b->set_cbfun([=](int addr,int ack,slave_data data){ myarray r=myarray("data:",5); for(int i=0;islave_num;i++){ myarray t=data[i]; if(t.size()>0){ r.append("ok,"); }else{ r.append("ng,"); } } c->send(r); },nullptr); b->cmd=0x13; b->start(myarray()); } } cmdline_export(slave_info, slave_info, get slave communicat info.); #define print_item(str,data){\ myarray r=str;\ r[r.size()-1]=':';\ r.append(data);\ c->send(r);\ } static void cfginfo(QList args){ command *c=command_start(); prot_slave *slave=protSlave(); mycfg *cfg_=syscfg(); print_item("tcp_enable",cfg_->tcp_enable?"true":"false"); print_item("server_ip",cfg_->server_ip.toLocal8Bit()); print_item("server_port",mystring::number(cfg_->server_port).toLocal8Bit()); print_item("local_id",mystring::number(cfg_->local_id).toLocal8Bit()); print_item("can_bitrate",mystring::number(cfg_->can_bitrate).toLocal8Bit()); print_item("slave_num",mystring::number(cfg_->slave_num).toLocal8Bit()); print_item("moter_count",mystring::number(cfg_->moter_count).toLocal8Bit()); print_item("uart_bsp",mystring::number(cfg_->uart_bsp).toLocal8Bit()); print_item("coder_return_mode",mystring::number(cfg_->coder_return_mode).toLocal8Bit()); print_item("slave_addr_start",mystring::number(cfg_->slave_addr_start).toLocal8Bit()); print_item("slave_scheme_ext",mystring::number(cfg_->slave_scheme_ext).toLocal8Bit()) } cmdline_export(cfginfo, cfginfo, get cfg info.); static void cfgset(QList args){ command *c=command_start(); prot_slave *slave=protSlave(); mycfg *cfg_=syscfg(); if(args.size()<3){ if((args.size()<2)||(args[1]!="save")){ c->send("cmd len too less."); c->send("cfgset [item] [params],for example\n" "\tcfgset tcp_enable true"); }else{ syscfg()->save(); syscfg()->restart(); } return ; } if(args[1]=="tcp_enable"){ if(args[2]=="true"){ cfg_->tcp_enable=true; }else if(args[2]=="false"){ cfg_->tcp_enable=false; } print_item("tcp_enable",cfg_->tcp_enable?"true":"false"); }else if(args[1]=="server_ip"){ cfg_->server_ip=mystring(args[2]); print_item("server_ip",cfg_->server_ip.toLocal8Bit()); }else if(args[1]=="server_port"){ cfg_->server_port=args[2].toInt(); print_item("server_port",mystring::number(cfg_->server_port).toLocal8Bit()); }else if(args[1]=="local_id"){ cfg_->local_id=args[2].toInt(); print_item("local_id",mystring::number(cfg_->local_id).toLocal8Bit()); }else if(args[1]=="can_bitrate"){ cfg_->can_bitrate=args[2].toInt(); print_item("can_bitrate",mystring::number(cfg_->can_bitrate).toLocal8Bit()); }else if(args[1]=="slave_num"){ cfg_->slave_num=args[2].toInt(); print_item("slave_num",mystring::number(cfg_->slave_num).toLocal8Bit()); }else if(args[1]=="moter_count"){ cfg_->moter_count=args[2].toInt(); print_item("moter_count",mystring::number(cfg_->moter_count).toLocal8Bit()); }else if(args[1]=="uart_bsp"){ cfg_->uart_bsp=args[2].toInt(); print_item("uart_bsp",mystring::number(cfg_->uart_bsp).toLocal8Bit()); }else if(args[1]=="coder_return_mode"){ cfg_->coder_return_mode=args[2].toInt(); print_item("coder_return_mode",mystring::number(cfg_->coder_return_mode).toLocal8Bit()); }else if(args[1]=="slave_addr_start"){ cfg_->slave_addr_start=args[2].toInt(); print_item("slave_addr_start",mystring::number(cfg_->slave_addr_start).toLocal8Bit()); }else if(args[1]=="slave_scheme_ext"){ cfg_->slave_scheme_ext=args[2].toInt(); print_item("slave_scheme_ext",mystring::number(cfg_->slave_scheme_ext).toLocal8Bit()) } } cmdline_export(cfgset, cfgset, set cfg info.);