From 5eec0d3ac68eb6b9ceccbd093f9ee76163f0f0d0 Mon Sep 17 00:00:00 2001 From: YejinChoi <715jin@naver.com> Date: Tue, 21 Mar 2023 21:49:08 +0900 Subject: [PATCH] [20230321]Change the Packet and firmware --- .../iCOBOT_Entry/iCOBOT_firmwares_Use_KUP.zip | Bin 2076610 -> 2077386 bytes app/modules/iCOBOT.js | 374 ++++++++++-------- 2 files changed, 216 insertions(+), 158 deletions(-) diff --git a/app/firmwares/examples/iCOBOT_Entry/iCOBOT_firmwares_Use_KUP.zip b/app/firmwares/examples/iCOBOT_Entry/iCOBOT_firmwares_Use_KUP.zip index 2650a218f8c2a0fc378f3fae31c71acda7d328a2..438d80d449d15a28a6b85f90c2afd7e96a617c17 100644 GIT binary patch delta 21892 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 diff --git a/app/modules/iCOBOT.js b/app/modules/iCOBOT.js index 6a1c3ea46b..0fcbd504b5 100644 --- a/app/modules/iCOBOT.js +++ b/app/modules/iCOBOT.js @@ -66,6 +66,7 @@ function Module() this.lastTime = 0; this.lastSendTime = 0; this.isDraing = false; + } var sensorIdx = 0; @@ -137,106 +138,189 @@ Module.prototype.getDataByBuffer = function(buffer) // 해당 코드 내에서 ff 55 idx size data a */ // 3. Hardware +var show_turn = 0; Module.prototype.handleLocalData = function(data) { // 하드웨어에서 보내준 정보를 가공합니다. 여기선 하드웨어에서 정보를 읽어서 처리하지 않습니다. var self = this; - var datas = this.getDataByBuffer(data); + var datas = this.getDataByBuffer(data); + + value_show_new_time = new Date().getTime(); datas.forEach(function (data) { + // console.log(data); if(data.length <= 4 || data[0] !== 255 || data[1] !== 85) { return; - } + } var readData = data.subarray(2, data.length); var type = readData[readData.length - 1]; - var port = readData[readData.length - 2]; - - var value; + var value; + var pre = 0; - switch(readData[0]) { - case self.sensorValueSize.FLOAT: //2 - { - value = new Buffer(readData.subarray(1, 5)).readFloatLE(); - value = Math.round(value * 100) / 100; - //console.log(value, " : ", port); - break; - } - case self.sensorValueSize.SHORT: { //3 - value = new Buffer(readData.subarray(1, 3)).readInt16LE(); - break; - } - case self.sensorValueSize.STRING: { //4 - value = new Buffer(readData[1] + 3); - value = readData.slice(2, readData[1] + 3); - value = value.toString('ascii', 0, value.length); - break; - } - default: { - value = 0; - break; - } - } - - switch(type) { - case self.sensorTypes.SENSOR: { - self.sensorData.SENSOR[port] = value; + for (var i = 0; i < 11; i++) { + value = new Buffer(readData.subarray(pre,(pre+4))).readFloatLE(); + value = Math.round(value * 100) / 100; + pre = pre+4; - switch(port){ - case 0: { - self.sensorData.Brightness = value; - break; - } - case 1: { - self.sensorData.BLeft_IR = value; - break; - } - case 2: { - self.sensorData.Front_IR = value; - break; - } - case 3: { - self.sensorData.BRight_IR = value; - break; - } - case 4: { - self.sensorData.Sound = value; - break; - } - case 5: { - self.sensorData.Right_IR = value; - break; - } - case 6: { - self.sensorData.BMid_IR = value; - break; - } - case 7: { - self.sensorData.Left_IR = value; - break; - } - case 8: { - self.sensorData.Real_T = value; - break; - } - case 9: { - self.sensorData.Real_H = value; - break; - } - default: { - break; + switch(type) { + case self.sensorTypes.SENSOR: { + self.sensorData.SENSOR[i] = value; + switch(i){ + case 0: { + self.sensorData.Brightness = value; + break; + } + case 1: { + self.sensorData.BLeft_IR = value; + break; + } + case 2: { + self.sensorData.Front_IR = value; + break; + } + case 3: { + self.sensorData.BRight_IR = value; + break; + } + case 4: { + self.sensorData.Sound = value; + break; + } + case 5: { + self.sensorData.Right_IR = value; + break; + } + case 6: { + self.sensorData.BMid_IR = value; + break; + } + case 7: { + self.sensorData.Left_IR = value; + break; + } + case 8: { + self.sensorData.Real_T = value; + break; + } + case 9: { + self.sensorData.Real_H = value; + break; + } + default: { + break; + } } } - break; - } - default: { - break; + default: { + break; + } } + } }); }; +// Module.prototype.handleLocalData = function(data) +// { +// // 하드웨어에서 보내준 정보를 가공합니다. 여기선 하드웨어에서 정보를 읽어서 처리하지 않습니다. +// var self = this; +// var datas = this.getDataByBuffer(data); + +// datas.forEach(function (data) +// { +// if(data.length <= 4 || data[0] !== 255 || data[1] !== 85) { +// return; +// } +// var readData = data.subarray(2, data.length); + +// var type = readData[readData.length - 1]; +// var port = readData[readData.length - 2]; + +// var value; + +// switch(readData[0]) { +// case self.sensorValueSize.FLOAT: //2 +// { +// value = new Buffer(readData.subarray(1, 5)).readFloatLE(); +// value = Math.round(value * 100) / 100; +// //console.log(value, " : ", port); +// break; +// } +// case self.sensorValueSize.SHORT: { //3 +// value = new Buffer(readData.subarray(1, 3)).readInt16LE(); +// break; +// } +// case self.sensorValueSize.STRING: { //4 +// value = new Buffer(readData[1] + 3); +// value = readData.slice(2, readData[1] + 3); +// value = value.toString('ascii', 0, value.length); +// break; +// } +// default: { +// value = 0; +// break; +// } +// } + +// switch(type) { +// case self.sensorTypes.SENSOR: { +// self.sensorData.SENSOR[port] = value; + +// switch(port){ +// case 0: { +// self.sensorData.Brightness = value; +// break; +// } +// case 1: { +// self.sensorData.BLeft_IR = value; +// break; +// } +// case 2: { +// self.sensorData.Front_IR = value; +// break; +// } +// case 3: { +// self.sensorData.BRight_IR = value; +// break; +// } +// case 4: { +// self.sensorData.Sound = value; +// break; +// } +// case 5: { +// self.sensorData.Right_IR = value; +// break; +// } +// case 6: { +// self.sensorData.BMid_IR = value; +// break; +// } +// case 7: { +// self.sensorData.Left_IR = value; +// break; +// } +// case 8: { +// self.sensorData.Real_T = value; +// break; +// } +// case 9: { +// self.sensorData.Real_H = value; +// break; +// } +// default: { +// break; +// } +// } +// break; +// } +// default: { +// break; +// } +// } +// }); +// }; // 4. Module.prototype.requestRemoteData = function(handler) @@ -256,21 +340,6 @@ Module.prototype.requestRemoteData = function(handler) }) }; -var Motor_loop_turn = true; -var One_Buzzer_loop_turn = true; -var One_Tone_loop_turn = true; -var LED_loop_turn = true; -var pre_data_time_tone = 0; -var pre_data_value_tone = 0; -var pre_data_value_buzzer = 0; -var pre_port_motor = 0; -var pre_data_mode_motor = 0; -var pre_data_value_motor = 0; -var pre_data_n_led = 0; -var pre_data_r_led = 0; -var pre_data_g_led = 0; -var pre_data_b_led = 0; - // 5. Module.prototype.handleRemoteData = function(handler) { @@ -355,60 +424,8 @@ Module.prototype.handleRemoteData = function(handler) } //console.log("data.type: ", data.type); //console.log("data.data: ", data.data); - //console.log("loop_turn: ", Motor_loop_turn); - //buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); + buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); - switch(data.type) - { - case 2: // 모터제어 - if((port != pre_port_motor) || (data.data.value != pre_data_value_motor) || (data.data.mode != 4) || (data.data.mode != pre_data_mode_motor)) - { - //console.log("Motor: ", port, pre_port_motor, data.data.value, pre_data_value_motor, data.data.mode, pre_data_mode_motor); - buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); - pre_port_motor = port; - pre_data_mode_motor = data.data.mode; - pre_data_value_motor = data.data.value; - } - else{} - break; - case 3: // Buzzer제어 - if(!One_Tone_loop_turn || (data.data != pre_data_value_buzzer)) - { - //console.log("Buzzer: ", data.data, pre_data_value_buzzer); - buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); - pre_data_value_buzzer = data.data; - pre_data_value_tone = 0; - pre_data_time_tone = 0; - One_Tone_loop_turn = true; - } - else{} - break; - case 4: // RGB제어 - if((data.data.n != pre_data_n_led) || (data.data.r != pre_data_r_led) || (data.data.g != pre_data_g_led) || (data.data.b != pre_data_b_led)) - { - //console.log("LED: ", data.data.n, pre_data_n_led, data.data.r, pre_data_r_led, data.data.g, pre_data_g_led, data.data.b, pre_data_b_led); - buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); - pre_data_n_led = data.data.n; - pre_data_r_led = data.data.r; - pre_data_g_led = data.data.g; - pre_data_b_led = data.data.b; - } - else{} - break; - case 5: // Tone 제어 - //console.log("Tone: ", data.data.value, pre_data_value_tone, data.data.duration, pre_data_time_tone); - if((data.data.value != pre_data_value_tone) || (7 != pre_data_time_tone)) - { - buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); - pre_data_value_tone = data.data.value; - pre_data_time_tone = data.data.duration; - } - else{} - break; - default: - buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); - break; - } } /// 전송 패킷 생성하여 버퍼에 저장 } } @@ -445,21 +462,63 @@ Module.prototype.requestLocalData = function() // 하드웨어에 명령을 전 return null; }; - +var prePort = 0; Module.prototype.isRecentData = function(port, type, data) { var isRecent = false; if(port in this.recentCheckData) { - if(type != this.sensorTypes.TONE && this.recentCheckData[port].type === type && this.recentCheckData[port].data === data) - // 톤 명령이 아니고 타입과 데이터가 같고 같은 자료형 이면 - { - isRecent = true; + + switch(type) + { + case 2: // 모터제어 + if(port >=1 && port <= 3) + { + if(port === prePort && this.recentCheckData[port].data.mode === data.mode && this.recentCheckData[port].data.value === data.value && (data.mode != 4 && data.mode != 5)) + { + isRecent = true; + } + else{ + // console.log("isRecent : ", isRecent,"port : ", port,"port : ", prePort,"data : ", this.recentCheckData[port].data,"data : ", data); + } + + prePort = port; + } + break; + case 3: // Buzzer제어 + if(this.recentCheckData[port].data === data) + { + isRecent = true; + } + else{ + // console.log("isRecent : ", isRecent,"type : ", type,"type : ", this.recentCheckData[port].type,"data : ", this.recentCheckData[port].data,"data : ", data); + } + break; + case 4: // RGB제어 + if(this.recentCheckData[port].data.n === data.n && this.recentCheckData[port].data.r === data.r && this.recentCheckData[port].data.g === data.g && this.recentCheckData[port].data.b === data.b) + { + isRecent = true; + } + else{ + // console.log("isRecent : ", isRecent,"type : ", type,"type : ", this.recentCheckData[port].type,"data : ", this.recentCheckData[port].data,"data : ", data); + } + break; + case 5: // Tone 제어 + //console.log("Tone: ", data.data.value, data.data.duration); + if(this.recentCheckData[port].data.value === data.value && this.recentCheckData[port].data.duration === 7) + { + isRecent = true; + } + else{ + // console.log("isRecent : ", isRecent,"type : ", type,"type : ", this.recentCheckData[port].type,"data : ", this.recentCheckData[port].data,"data : ", data); + } + break; + default: + break; } } // isRecent = true; 참 들어가면 통신 데이터 무조건 안 보냄. - return isRecent; } @@ -510,20 +569,20 @@ Module.prototype.makeOutputBuffer = function(device, port, data) /// 출력 value.writeInt16LE(data.value); buffer = new Buffer([255, 85, 9, sensorIdx, this.actionTypes.SET, device, port]); buffer = Buffer.concat([buffer, mode, value, dummy]); - console.log("MOTOR: ", buffer); + // console.log("MOTOR: ", buffer); break; case this.sensorTypes.BUZZER: // 스피커 제어 // value.writeInt16LE(data); //writeFloatLE//!@#$ buffer = new Buffer([255, 85, 6, sensorIdx, this.actionTypes.SET, device, port, data]); buffer = Buffer.concat([buffer, dummy]); - console.log("Buzzer : ", buffer); + // console.log("Buzzer : ", buffer); break; case this.sensorTypes.RGBLED: buffer = new Buffer([255, 85, 9, sensorIdx, this.actionTypes.SET, device, port, data.n, data.r, data.g, data.b]); buffer = Buffer.concat([buffer, dummy]); - console.log("RGBLED: ", buffer); + // console.log("RGBLED: ", buffer); break; case this.sensorTypes.TONE: // 스피커 제어 @@ -540,8 +599,7 @@ Module.prototype.makeOutputBuffer = function(device, port, data) /// 출력 } buffer = new Buffer([255, 85, 9, sensorIdx, this.actionTypes.SET, device, port]); buffer = Buffer.concat([buffer, value, time, dummy]); - console.log("Tone : ", buffer); - One_Tone_loop_turn = false; + // console.log("Tone : ", buffer); break; } return buffer;