IPM10,PM8000,PM9000,GEDAsh4000,Philips 等
function getData() { //console.log(_buffer.length) // if(!_buffer.length<_headsize){ //缓冲区长度小于头部长度 // return ; // } //读取数据长度 while(_buffer.length>=_headsize){ //console.log('while') // console.log(_buffer) const headLenBuf=Buffer.alloc(2) //数据长度四个字节 _buffer.copy(headLenBuf,0,6,8) // console.log(headLenBuf) let totallen=headLenBuf.readUInt16BE() // let buflen=headLenBuf.readUInt32BE()-_headsize //实际数据长度 // console.log(totallen+'/'+_buffer.length) // console.log(_buffer) if(totallen>_buffer.length-_headsize){ break; } //完事帧数据 let rawData=_buffer.slice(0,totallen+_headsize) // parseDataEx(rawData) // console.log(rawData) // console.log('bz:'+bzValue+",len:"+totallen)/console.log(rawData) // parsePackage(rawData) // console.log('---------------') _event.emit('data',rawData) // console.log('buflen:'+_buffer.length) parsePackage(_buffer) _buffer=_buffer.slice(totallen+_headsize) if(_buffer.length>40960) { _buffer=_buffer.slice(_buffer.length) } } //console.log('getData') } function CheckPollPacketActionType(packetbuff) { const actionBuf=Buffer.alloc(2) packetbuff.copy(actionBuf,0,20,22) let action_type=actionBuf.readUInt16BE() switch (action_type) { case ActionType.NOM_ACT_POLL_MDIB_DATA: PollPacketDecoder(packetbuff,44) break case ActionType.NOM_ACT_POLL_MDIB_DATA_EXT: PollPacketDecoder(packetbuff,46) break default: break } } //解析数据 function PollPacketDecoder(buffer,offset) { // let packetbuffer=Buffer.alloc(buffer.length-headsize) let head=buffer.slice(0,offset) const actionBuf=Buffer.alloc(2) buffer.copy(actionBuf,0,20,22) let action_type=actionBuf.readUInt16BE() let timestamp=getTimeStamp(action_type,head) console.log('timestamp:'+timestamp) let packetbuffer=buffer.slice(offset,buffer.length) DecodePollObjects(packetbuffer,function (count,pollobjects) { if(count>0){ let binReader=pollobjects.scpollarray let offset=0 for(let i=0;i<count;i++){ //DecodeSingleContextPollObjects let scpoll=new SingleContextPoll() scpoll.context_id=binReader.readUInt16BE() scpoll.count=binReader.readUInt16BE(2) if(scpoll.count>0) scpoll.length=binReader.readUInt16BE(4) if(scpoll.length>0) scpoll.obpollobjectsarray=binReader.slice(6,scpoll.length+6) binReader=binReader.slice(6+scpoll.length) if(scpoll.count>0){ let binReader3=scpoll.obpollobjectsarray //DecodeObservationPollObjects for(let j=0;j<scpoll.count;j++){ let obpollobject=new ObservationPoll() obpollobject.obj_handle=binReader3.readUInt16BE() let attributeliststruct=new AttributeList() attributeliststruct.count=binReader3.readUInt16BE(2) if(attributeliststruct.count>0) attributeliststruct.length=binReader3.readUInt16BE(4) if(attributeliststruct.length>0) obpollobject.avaobjectsarray=binReader3.slice(6,6+attributeliststruct.length) binReader3=binReader3.slice(6+attributeliststruct.length) // fs.writeFile('./philips_attributeliststruct.txt', bytesToHex(obpollobject.avaobjectsarray)+'\r\n\r\n', { 'flag': 'a' }, function(err) { // if (err) { // throw err; // } // }) if(attributeliststruct.count>0){ let binreader4=obpollobject.avaobjectsarray //DecodeAvaObjects for(let k=0;k<attributeliststruct.count;k++){ let avaObject=new Ava() avaObject.attribute_id=binreader4.readUInt16BE() avaObject.length=binreader4.readUInt16BE(2) if(avaObject.length>0){ let avaattribobjects=binreader4.slice(4,4+avaObject.length) binreader4=binreader4.slice(4+avaObject.length) switch ( avaObject.attribute_id) { case AttributeType.NOM_ATTR_ID_LABEL: break; case AttributeType.NOM_ATTR_NU_CMPD_VAL_OBS: ReadCompoundNumericObsValue(avaattribobjects) break; case AttributeType.NOM_ATTR_NU_VAL_OBS: ReadNumericObservationValue(avaattribobjects) break; case AttributeType.NOM_ATTR_METRIC_SPECN: break; case AttributeType.NOM_ATTR_ID_LABEL_STRING: // ReadIDLabelString(avaattribobjects) break; default: break; } } } } } } } } }) } function ReadIDLabelString(buffer) { let strmp = new StringMP() strmp.length=buffer.readUInt16BE() strmp.value1=buffer.slice(2,strmp.length+2).toString() // console.log('STRMP:') // console.log(strmp) } function ReadNumericObservationValue(buffer) { // console.log('bufferlen:'+buffer.length) if(buffer.length<10) return let NumObjectValue=new NuObsValue() NumObjectValue.physio_id=buffer.readUInt16BE() NumObjectValue.state=buffer.readUInt16BE(2) NumObjectValue.unit_code=buffer.readUInt16BE(4) NumObjectValue.value=buffer.readUInt32BE(6) let valuestr='-' if(NumObjectValue.value!=FLOATTYPE_NAN){ NumObjectValue.value=FloattypeToValue(NumObjectValue.value) } else{ NumObjectValue.value=-1 } switch (NumObjectValue.physio_id) { case 19384:{ datavalue.spo2=NumObjectValue.value // console.log(datavalue) break } case 18466:{ datavalue.ecg=NumObjectValue.value // console.log(datavalue) break } case 20490:{ datavalue.resp=NumObjectValue.value break } case 18949:{ datavalue.nibp_max=NumObjectValue.value // console.log(datavalue) break } case 18950:{ datavalue.nibp_min=NumObjectValue.value // console.log(datavalue) break } default: break } _event.emit('package',datavalue) // // console.log('NumObjectValue:') // console.log(NumObjectValue) } function ReadCompoundNumericObsValue(avaattribobjects){ let NumObjectValueCmp=new NuObsValueCmp() let binreader6 =avaattribobjects; NumObjectValueCmp.count=binreader6.readUInt16BE() NumObjectValueCmp.length=binreader6.readUInt16BE(2) binreader6=binreader6.slice(4) if(NumObjectValueCmp.count>0){ for(let j=0;j<NumObjectValueCmp.count;j++){ let cmpnumericarrayobject=binreader6.slice(0,10) binreader6=binreader6.slice(10) ReadNumericObservationValue(cmpnumericarrayobject) } } } function DecodePollObjects(packetbuffer,callback) { pollObject.count=packetbuffer.readUInt16BE() if(pollObject.count>0) pollObject.length=packetbuffer.readUInt16BE(2,4) if(pollObject.count>0) pollObject.scpollarray=packetbuffer.slice(4) callback(pollObject.count,pollObject) } function CheckLinkedPollPacketActionType(packetbuff) { const actionBuf=Buffer.alloc(2) packetbuff.copy(actionBuf,0,22,24) let action_type=actionBuf.readUInt16BE() switch (action_type) { case ActionType.NOM_ACT_POLL_MDIB_DATA: PollPacketDecoder(packetbuff,46) break case ActionType.NOM_ACT_POLL_MDIB_DATA_EXT: PollPacketDecoder(packetbuff,48) break default: break } } function ParseMDSCreateEventReport(packetbuff){ } function parsePackage(buffer) { let obj={ dataType: -1, dataLen: buffer.length, dataJson: JSON.stringify(Buffer.from(buffer)), waveType: -1, //默认为非波形 //dataJsonAfter:JSON.stringify(data) } _event.emit('dataCms',obj) const data=Buffer.from(buffer) // fs.writeFile('./philips2.txt', bytesToHex(data)+'\r\n\r\n', { 'flag': 'a' }, function(err) { // if (err) { // throw err; // } // }) const ropdu_type=Buffer.alloc(2) //数据长度四个字节 data.copy(ropdu_type,0,4,6) let pdutype=ropdu_type.readUInt16BE() switch (pdutype) { case ROType.ROIV_APDU: //sendmdscreateevent ParseMDSCreateEventReport(data) break case ROType.RORS_APDU: CheckPollPacketActionType(data) break case ROType.ROLRS_APDU: CheckLinkedPollPacketActionType(data) break case ROType.ROER_APDU: break default: break } }