Изменение имен файлов и добавление сборки для Windows

This commit is contained in:
Иван Мокротоваров 2019-01-31 19:43:49 +03:00
parent b10c418fc2
commit b51338f60a
6 changed files with 462 additions and 399 deletions

80
.gitignore vendored Normal file
View File

@ -0,0 +1,80 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/

View File

@ -1,9 +1,10 @@
# tibbo_uploader # tibbo_uploader
ПО для программирования устройств tibbo из линукса. ПО для программирования устройств tibbo из линукса.
Скачивать по ссылке - https://github.com/awarm/tibbo_uploader/raw/master/exec/tibbo_uploader Скачивать по ссылке:
wget -c https://github.com/awarm/tibbo_uploader/raw/master/exec/tibbo_uploader * Linux - https://github.com/awarm/tibbo_uploader/raw/master/exec/tibbo_uploader
* Windows - https://github.com/awarm/tibbo_uploader/raw/master/exec/tibbo_uploader.exe
После скачивания выполнить комманду После скачивания выполнить комманду

18
package-lock.json generated
View File

@ -219,19 +219,6 @@
"es5-ext": "~0.10.2" "es5-ext": "~0.10.2"
} }
}, },
"debug": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
"integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
"requires": {
"ms": "^2.1.1"
}
},
"dgram": {
"version": "1.0.1",
"resolved": "http://registry.npmjs.org/dgram/-/dgram-1.0.1.tgz",
"integrity": "sha1-N/OyAPgDOl/3WTAwicgc42G2UcM="
},
"engine.io": { "engine.io": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
@ -570,11 +557,6 @@
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
}, },
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"mute-stream": { "mute-stream": {
"version": "0.0.7", "version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",

BIN
tibbo_uploader Normal file

Binary file not shown.

BIN
tibbo_uploader.exe Normal file

Binary file not shown.

View File

@ -1,379 +1,379 @@
//var net_addr = "192.168.123.255"; var net_addr = "192.168.123.255";
net_addr = "10.0.50.255"; //net_addr = "10.0.50.255";
const files_path = "./"; const files_path = "./";
const dgram = require('dgram'), const dgram = require('dgram'),
clui = require('clui'), clui = require('clui'),
// clc = require('cli-color'), // clc = require('cli-color'),
// Line = clui.Line, // Line = clui.Line,
Spinner = clui.Spinner, Spinner = clui.Spinner,
Progress = clui.Progress, Progress = clui.Progress,
inquirer = require('inquirer'), inquirer = require('inquirer'),
fs = require('fs'); fs = require('fs');
const shortSearch = 2, longSearch = 8; const shortSearch = 2, longSearch = 8;
const countdown = new Spinner('Поиск устройств. Найдено [0] Осталось 10 секунд... ', ['|', '/', '-', ' ']);// ['⣾','⣽','⣻','⢿','⡿','⣟','⣯','⣷']); const countdown = new Spinner('Поиск устройств. Найдено [0] Осталось 10 секунд... ', ['|', '/', '-', ' ']);// ['⣾','⣽','⣻','⢿','⡿','⣟','⣯','⣷']);
const m2 = [ const m2 = [
"Загрузка прошивки" , "Загрузка прошивки" ,
{ name: "Загрузка firmware" }, { name: "Загрузка firmware" },
"Перезагрузка", "Перезагрузка",
new inquirer.Separator(), new inquirer.Separator(),
"Выход", "Выход",
]; ];
// const confirmMenu = [ // const confirmMenu = [
// "Да", "Нет" // "Да", "Нет"
// ] // ]
const client = dgram.createSocket('udp4'); const client = dgram.createSocket('udp4');
var number = shortSearch; var number = shortSearch;
var mode = 1; // work mode - 1: search devices, 2 - uploading var mode = 1; // work mode - 1: search devices, 2 - uploading
var devices = []; // device list var devices = []; // device list
var progressbar; var progressbar;
var step = 1; //upload step var step = 1; //upload step
var stopTimer; var stopTimer;
var mac=""; // current device mac address var mac=""; // current device mac address
var fdata =[]; // uploading file content var fdata =[]; // uploading file content
var pageNumber = 0; // page of uploading file var pageNumber = 0; // page of uploading file
var session = (Math.random() * 0xFFFFFFFF).toString(16); // work session var session = (Math.random() * 0xFFFFFFFF).toString(16); // work session
var pr; var pr;
var firmvare = 0; var firmvare = 0;
// ** // **
// Get work network interface // Get work network interface
// used for create disable stoofing filter command // used for create disable stoofing filter command
// ** // **
function getInterface(){ function getInterface(){
var net = require('os').networkInterfaces(); var net = require('os').networkInterfaces();
for (var ifs in net) { for (var ifs in net) {
var res = net[ifs].find(ip => { var res = net[ifs].find(ip => {
return ip.address.includes(net_addr.substring(0,net_addr.length-3)) return ip.address.includes(net_addr.substring(0,net_addr.length-3))
}); });
if (res) if (res)
return ifs; return ifs;
} }
return "unknown"; return "unknown";
} }
// function confirm(message){ // function confirm(message){
// var deferred = Q.defer(); // var deferred = Q.defer();
// showMenu(confirmMenu, message, (choice)=>{ // showMenu(confirmMenu, message, (choice)=>{
// console.log(choice) // console.log(choice)
// if (choice == "Да") // if (choice == "Да")
// deferred.resolve(true); // deferred.resolve(true);
// else // else
// deferred.reject(false); // deferred.reject(false);
// }) // })
// return deferred.promise; // return deferred.promise;
// } // }
function toBytesInt16(num){ function toBytesInt16(num){
return [(num & 0xff00) >> 8,(num & 0x00ff)]; return [(num & 0xff00) >> 8,(num & 0x00ff)];
} }
// ** // **
// Send command to device // Send command to device
// ** // **
function send(cmd,addr,msg,result){ function send(cmd,addr,msg,result){
var mess = "_"+addr+cmd+ (msg? "|"+msg :""); var mess = "_"+addr+cmd+ (msg? "|"+msg :"");
client.send(mess,0,mess.length,65535,net_addr,result); client.send(mess,0,mess.length,65535,net_addr,result);
} }
// ** // **
// process error result // process error result
// ** // **
function result(err,bytes) { function result(err,bytes) {
if (err) throw err; if (err) throw err;
}; };
function getFilesInDirectory (path,ext) { function getFilesInDirectory (path,ext) {
let dir = fs.readdirSync( path ); let dir = fs.readdirSync( path );
return dir.filter( elm => elm.match(new RegExp(`.*\.(${ext})$`, 'ig'))); return dir.filter( elm => elm.match(new RegExp(`.*\.(${ext})$`, 'ig')));
} }
function getFile(path){ function getFile(path){
return fs.readFileSync(path); return fs.readFileSync(path);
} }
console.log("") console.log("")
console.log("Программа обновления прошивки для устройств Tibbo"); console.log("Программа обновления прошивки для устройств Tibbo");
console.log("") console.log("")
// attach events // attach events
client.on('listening', () =>{ // udp net binding client.on('listening', () =>{ // udp net binding
client.setBroadcast(1); client.setBroadcast(1);
startSearch(); startSearch();
}); });
var tm; var tm;
client.on('message',(msg,rinfo) => { // udp message recived client.on('message',(msg,rinfo) => { // udp message recived
var m = msg.toString(); // message string from Buffer var m = msg.toString(); // message string from Buffer
var addr = msg.toString().substring(0,25); // device mac address var addr = msg.toString().substring(0,25); // device mac address
switch (mode){ switch (mode){
case 1:{ // поиск устройств case 1:{ // поиск устройств
var d = devices.find(obj => { return obj.mac === addr }); var d = devices.find(obj => { return obj.mac === addr });
if (!d){ if (!d){
devices.push({mac: addr, ip: rinfo.address}); devices.push({mac: addr, ip: rinfo.address});
// get device information // get device information
client.send("_"+addr+ "X",65535,net_addr); client.send("_"+addr+ "X",65535,net_addr);
}else }else
{ {
if (m.indexOf('/') >0){ if (m.indexOf('/') >0){
if (m.indexOf('/')==m.lastIndexOf('/')){ if (m.indexOf('/')==m.lastIndexOf('/')){
d.platform = m.substr(26,m.length-27); d.platform = m.substr(26,m.length-27);
d.app_version = "" d.app_version = ""
}else{ }else{
d.platform = m.substr(27,m.indexOf('/')-28); d.platform = m.substr(27,m.indexOf('/')-28);
d.app_version = m.substr(m.lastIndexOf('/')+1); d.app_version = m.substr(m.lastIndexOf('/')+1);
} }
}else }else
if ( !d.platform || d.app_version){ // requery if information not full if ( !d.platform || d.app_version){ // requery if information not full
client.send("_"+addr+ "X",65535,net_addr); client.send("_"+addr+ "X",65535,net_addr);
} }
} }
countdown.message ("Поиск устройств. Найдено [" + devices.length + "] Осталось "+number+" секунд... "); countdown.message ("Поиск устройств. Найдено [" + devices.length + "] Осталось "+number+" секунд... ");
break; break;
} }
case 2:{ // Программирование case 2:{ // Программирование
switch (step){ switch (step){
case 1: // switch device to update mode case 1: // switch device to update mode
if (m.indexOf(session)<=0) if (m.indexOf(session)<=0)
return; return;
if (addr == mac){ if (addr == mac){
step=2; // send first data blocks step=2; // send first data blocks
var cmdd="Q"; var cmdd="Q";
if (firmware==1) if (firmware==1)
cmdd="QF"; cmdd="QF";
send(cmdd,mac,session); send(cmdd,mac,session);
tm = setInterval(function(){ tm = setInterval(function(){
var cmdd="Q"; var cmdd="Q";
if (firmware==1) if (firmware==1)
cmdd="QF"; cmdd="QF";
send(cmdd,mac,session); send(cmdd,mac,session);
},500); // resend every 0.5 sec },500); // resend every 0.5 sec
}else{ }else{
console.log("ERROR - wrong reply",) console.log("ERROR - wrong reply",)
} }
break; break;
case 2: // sending first block case 2: // sending first block
if (pageNumber == 0 && addr == mac && m.indexOf(session>0)) if (pageNumber == 0 && addr == mac && m.indexOf(session>0))
if (tm){ if (tm){
clearInterval(tm); clearInterval(tm);
} }
progressbar = new Progress(20); progressbar = new Progress(20);
process.stdout.write("\u001b[1000D"+progressbar.update(pageNumber,fdata.length/128)) process.stdout.write("\u001b[1000D"+progressbar.update(pageNumber,fdata.length/128))
stopTimer = setTimeout(()=>{ stopTimer = setTimeout(()=>{
// clearInterval(pr); // clearInterval(pr);
console.log(); console.log();
console.log("ОШИБКА: Ответ от устройства не получен!"); console.log("ОШИБКА: Ответ от устройства не получен!");
console.log("Возможно включена защита от Spoofing'а"); console.log("Возможно включена защита от Spoofing'а");
console.log("Для отключения выполните комманду : "); console.log("Для отключения выполните комманду : ");
console.log("\tsudo sysctl net.ipv4.conf.all.rp_filter=0 && sudo sysctl net.ipv4.conf." +getInterface()+ ".rp_filter=0"); console.log("\tsudo sysctl net.ipv4.conf.all.rp_filter=0 && sudo sysctl net.ipv4.conf." +getInterface()+ ".rp_filter=0");
console.log(); console.log();
process.exit(); process.exit();
},15000) },15000)
sendFilePage(); sendFilePage();
break; break;
case 3: // wait confirm block recieved switch to this mode in sendFilePage() case 3: // wait confirm block recieved switch to this mode in sendFilePage()
var b = toBytesInt16(pageNumber); var b = toBytesInt16(pageNumber);
if (pageNumber >= 0 && addr == mac) if (pageNumber >= 0 && addr == mac)
{ {
if (stopTimer) { // stop wrong net config check timer if (stopTimer) { // stop wrong net config check timer
clearTimeout(stopTimer); clearTimeout(stopTimer);
stopTimer=null; stopTimer=null;
} }
var b11 = Buffer.from([0x41,b[0],b[1]]) // number of confirmed block var b11 = Buffer.from([0x41,b[0],b[1]]) // number of confirmed block
if (msg.compare(b11,0,3,25)==0){ if (msg.compare(b11,0,3,25)==0){
pageNumber++; // change current block number pageNumber++; // change current block number
process.stdout.write("\u001b[1000D"+progressbar.update(pageNumber,fdata.length/128)) process.stdout.write("\u001b[1000D"+progressbar.update(pageNumber,fdata.length/128))
if (((pageNumber)*128) >= fdata.length-1){ // if last block confirmed if (((pageNumber)*128) >= fdata.length-1){ // if last block confirmed
step = 4; // switch to final step step = 4; // switch to final step
if (firmware==1) if (firmware==1)
send("N",mac,session); // switch device to normal mode send("N",mac,session); // switch device to normal mode
else else
send("T",mac,session); // switch device to normal mode send("T",mac,session); // switch device to normal mode
} }
else else
sendFilePage(); sendFilePage();
} }
} }
break; break;
case 4: // get last success message and switch to search mode case 4: // get last success message and switch to search mode
if (addr == mac && msg[25]==0x41){ if (addr == mac && msg[25]==0x41){
clearTimeout(stopTimer); clearTimeout(stopTimer);
send("E",mac,session); // send reboot command to device (if it id not auto reboot) send("E",mac,session); // send reboot command to device (if it id not auto reboot)
console.log(""); console.log("");
console.log("Загрузка завершена успешно"); console.log("Загрузка завершена успешно");
console.log(""); console.log("");
mode = 1; mode = 1;
step = 1; step = 1;
number = longSearch; // long time search for wait to device reboot and network ready number = longSearch; // long time search for wait to device reboot and network ready
fdata = []; // clear file content buffer fdata = []; // clear file content buffer
startSearch(); startSearch();
} }
} }
} }
} }
}); });
client.on('close', function() { client.on('close', function() {
console.log('Соединение неожиданно было закрыто. Проверьте сетевое подключение.'); console.log('Соединение неожиданно было закрыто. Проверьте сетевое подключение.');
console.log(); console.log();
process.exit(); process.exit();
}); });
client.bind(45535); // bind socket client.bind(44515); // bind socket
//** //**
// Get file names and show in menu // Get file names and show in menu
//** //**
function select_file(ext){ function select_file(ext){
console.log(""); console.log("");
var filelist = getFilesInDirectory(files_path,ext); var filelist = getFilesInDirectory(files_path,ext);
filelist.push(new inquirer.Separator()); filelist.push(new inquirer.Separator());
filelist.push("Отмена"); filelist.push("Отмена");
showMenu(filelist,'Выберите файл для загрузки в '+mac,item =>{ showMenu(filelist,'Выберите файл для загрузки в '+mac,item =>{
if (item.result == "Отмена"){ if (item.result == "Отмена"){
process.exit(); process.exit();
} }
console.log("OK"); console.log("OK");
upload_application(mac,item.result); upload_application(mac,item.result);
}); });
} }
function upload_application(mac, filename){ function upload_application(mac, filename){
console.log("upload_application("+mac+","+filename+")" ); console.log("upload_application("+mac+","+filename+")" );
var d = devices.find(obj => { return obj.mac === mac }); var d = devices.find(obj => { return obj.mac === mac });
var platform = d.platform.substring(1,d.platform.lastIndexOf('.')); var platform = d.platform.substring(1,d.platform.lastIndexOf('.'));
console.log("Начинается загрузка"); console.log("Начинается загрузка");
fdata = getFile(files_path+filename); fdata = getFile(files_path+filename);
var fst = fdata.indexOf(String.fromCharCode(0)+"<FD>")+5; var fst = fdata.indexOf(String.fromCharCode(0)+"<FD>")+5;
var fen = fdata.indexOf(String.fromCharCode(0)+String.fromCharCode(0)+String.fromCharCode(0),fst); var fen = fdata.indexOf(String.fromCharCode(0)+String.fromCharCode(0)+String.fromCharCode(0),fst);
var line = fdata.toString('ascii',fst+1,fen-1); var line = fdata.toString('ascii',fst+1,fen-1);
var finfo = line.split(String.fromCharCode(0)); var finfo = line.split(String.fromCharCode(0));
if (firmware==0 && fdata.indexOf(platform)<0){ if (firmware==0 && fdata.indexOf(platform)<0){
console.log("Выбрана неподходящая платформа :"); console.log("Выбрана неподходящая платформа :");
console.log("Устройство: "+platform+", файл:" +finfo[2]); console.log("Устройство: "+platform+", файл:" +finfo[2]);
select_file(firmware==0?"tpc":"bin"); select_file(firmware==0?"tpc":"bin");
return; return;
} }
mode = 2; //switch to uploading mode mode = 2; //switch to uploading mode
step=1; // init device step step=1; // init device step
pageNumber = 0; pageNumber = 0;
// init sending // init sending
send("X",mac,session); // switch device to program mode send("X",mac,session); // switch device to program mode
} }
function sendFilePage(){ function sendFilePage(){
step = 3; step = 3;
clearTimeout(stopTimer); // clear resend timer clearTimeout(stopTimer); // clear resend timer
var bmac = Buffer.from("_"+mac); var bmac = Buffer.from("_"+mac);
var n = toBytesInt16(pageNumber); var n = toBytesInt16(pageNumber);
var cmd = Buffer.from([0x44,n[0],n[1]]); var cmd = Buffer.from([0x44,n[0],n[1]]);
var f = Buffer.from(fdata.slice(128*pageNumber,128*(pageNumber+1))); var f = Buffer.from(fdata.slice(128*pageNumber,128*(pageNumber+1)));
var mess = Buffer.concat([bmac,cmd,f]); var mess = Buffer.concat([bmac,cmd,f]);
client.send(mess,0,mess.length,65535,net_addr,result); client.send(mess,0,mess.length,65535,net_addr,result);
if (fdata.length/128 >pageNumber) if (fdata.length/128 >pageNumber)
stopTimer = setTimeout(sendFilePage,500); // resend every 0.5 sec stopTimer = setTimeout(sendFilePage,500); // resend every 0.5 sec
} }
function startSearch(){ function startSearch(){
if (number<=0) if (number<=0)
number = shortSearch; number = shortSearch;
devices = []; devices = [];
session = (Math.random() * 0xFFFFFFFF).toString(16); // change session session = (Math.random() * 0xFFFFFFFF).toString(16); // change session
countdown.start(); countdown.start();
// get device list; // get device list;
pr = setInterval(()=>{ pr = setInterval(()=>{
send("","?",""); send("","?","");
countdown.message( "Поиск устройств. Найдено [" + devices.length + "] Осталось "+number+" секунд... "); countdown.message( "Поиск устройств. Найдено [" + devices.length + "] Осталось "+number+" секунд... ");
if (number == 0){ if (number == 0){
clearInterval(pr); clearInterval(pr);
countdown.stop(); countdown.stop();
proc(); proc();
} }
number--; number--;
},1000); },1000);
send("","?",""); send("","?","");
} }
function proc(){ function proc(){
if (devices.length == 0){ if (devices.length == 0){
console.log("ОШИБКА: Устройства не найдены!"); console.log("ОШИБКА: Устройства не найдены!");
console.log("Возможно включена защита от Spoofing'а"); console.log("Возможно включена защита от Spoofing'а");
console.log("Для отключения выполните комманды : "); console.log("Для отключения выполните комманды : ");
console.log("\tsudo sysctl net.ipv4.conf.all.rp_filter=0 && sudo sysctl net.ipv4.conf." +getInterface()+ ".rp_filter=0"); console.log(); console.log("\tsudo sysctl net.ipv4.conf.all.rp_filter=0 && sudo sysctl net.ipv4.conf." +getInterface()+ ".rp_filter=0"); console.log();
process.exit(); process.exit();
} }
var m = []; var m = [];
var mlip = 0; var mlip = 0;
var mlpl = 0; var mlpl = 0;
for (var i = 0; i < devices.length ; i++){ for (var i = 0; i < devices.length ; i++){
if (mlip < devices[i].ip.length) if (mlip < devices[i].ip.length)
mlip = devices[i].ip.length; mlip = devices[i].ip.length;
if (mlpl < devices[i].platform.length) if (mlpl < devices[i].platform.length)
mlpl = devices[i].platform.length; mlpl = devices[i].platform.length;
} }
for (var i = 0; i < devices.length ; i++) { for (var i = 0; i < devices.length ; i++) {
m.push({ value: devices[i].mac, m.push({ value: devices[i].mac,
name: devices[i].mac.replace("[",'').replace("]",'') + " | " name: devices[i].mac.replace("[",'').replace("]",'') + " | "
+ devices[i].ip.padStart(mlip," ") + " | " + devices[i].ip.padStart(mlip," ") + " | "
+ devices[i].platform.padEnd(mlpl," ") + " | " + devices[i].platform.padEnd(mlpl," ") + " | "
+ devices[i].app_version }); + devices[i].app_version });
} }
m.push(new inquirer.Separator()); m.push(new inquirer.Separator());
m.push({ key:'0', value: "Выход" }); m.push({ key:'0', value: "Выход" });
showMenu(m,"Выберите устройство",function(item) { showMenu(m,"Выберите устройство",function(item) {
if (item){ if (item){
if (item.result == "Выход") if (item.result == "Выход")
process.exit(); process.exit();
else else
mac = item.result; mac = item.result;
console.log(""); console.log("");
showMenu(m2,"Выберите действие",(select)=>{ showMenu(m2,"Выберите действие",(select)=>{
//console.log(select); //console.log(select);
if (select.result=="Выход"){ if (select.result=="Выход"){
process.exit(); process.exit();
} }
if (select.result == 'Загрузка прошивки'){ if (select.result == 'Загрузка прошивки'){
//console.log("select file"); //console.log("select file");
firmware=0; firmware=0;
select_file("tpc"); select_file("tpc");
} }
if (select.result == 'Загрузка firmware'){ if (select.result == 'Загрузка firmware'){
firmware=1; firmware=1;
select_file("bin"); select_file("bin");
} }
if (select.result == "Перезагрузка"){ if (select.result == "Перезагрузка"){
send("E",mac,session); send("E",mac,session);
number = longSearch; number = longSearch;
startSearch(); startSearch();
} }
}) })
}else }else
{ {
console.log("cancel") console.log("cancel")
} }
//process.exit(); //process.exit();
}); });
}; };
function showMenu(m,title,select){ function showMenu(m,title,select){
var q = { var q = {
type: 'list', type: 'list',
name: 'result', name: 'result',
message: title, message: title,
choices: m choices: m
}; };
inquirer.prompt(q) inquirer.prompt(q)
.then(select); .then(select);
} }