private static void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReDatas = new byte[ComDevice.BytesToRead]; ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据 foreach (byte item in ReDatas) { RecvBuffer[RecvBufferIndex] = item; // check packet complete if (RecvBufferIndex > 2 && item == '+' && RecvBuffer[RecvBufferIndex - 1] == '+' && RecvBuffer[RecvBufferIndex - 2] == '+') { SerialType = (SERIAL_TYPE)RecvBuffer[0]; ParseContent(); SerialType = SERIAL_TYPE.SERIAL_NONE; RecvBufferIndex = 0; } else { RecvBufferIndex++; } if (RecvBufferIndex == 30) { RecvBufferIndex = 0; } } }
private static void ParseContent() { if (SerialType == SERIAL_TYPE.ADV_CONFIG_DATA && RecvBufferIndex == 29) { _advConfig.min_hall_diam1 = RecvBuffer[1]; _advConfig.min_hall_value1 = BitConverter.ToInt16(new byte[] { RecvBuffer[2], RecvBuffer[3] }, 0); _advConfig.max_hall_diam1 = RecvBuffer[4]; _advConfig.max_hall_value1 = BitConverter.ToInt16(new byte[] { RecvBuffer[5], RecvBuffer[6] }, 0); _advConfig.min_hall_diam2 = RecvBuffer[7]; _advConfig.min_hall_value2 = BitConverter.ToInt16(new byte[] { RecvBuffer[8], RecvBuffer[9] }, 0); _advConfig.max_hall_diam2 = RecvBuffer[10]; _advConfig.max_hall_value2 = BitConverter.ToInt16(new byte[] { RecvBuffer[11], RecvBuffer[12] }, 0); _advConfig.min_hall_diam3 = RecvBuffer[13]; _advConfig.min_hall_value3 = BitConverter.ToInt16(new byte[] { RecvBuffer[14], RecvBuffer[15] }, 0); _advConfig.max_hall_diam3 = RecvBuffer[16]; _advConfig.max_hall_value3 = BitConverter.ToInt16(new byte[] { RecvBuffer[17], RecvBuffer[18] }, 0); _advConfig.min_servo_angle1 = RecvBuffer[19]; _advConfig.max_servo_angle1 = RecvBuffer[20]; _advConfig.min_servo_angle2 = RecvBuffer[21]; _advConfig.max_servo_angle2 = RecvBuffer[22]; _advConfig.min_servo_angle3 = RecvBuffer[23]; _advConfig.max_servo_angle3 = RecvBuffer[24]; _advConfig.contrast_threshold = BitConverter.ToInt16(new byte[] { RecvBuffer[25], RecvBuffer[26] }, 0); // trigger adv config data received event if (advConfigDataReceived != null) { advConfigDataReceived(_advConfig); } } else if (SerialType == SERIAL_TYPE.DEVICE_DATA && RecvBufferIndex == 18) { _deviceData.hall_value1 = BitConverter.ToInt16(new byte[] { RecvBuffer[1], RecvBuffer[2] }, 0); _deviceData.hall_value2 = BitConverter.ToInt16(new byte[] { RecvBuffer[3], RecvBuffer[4] }, 0); _deviceData.hall_value3 = BitConverter.ToInt16(new byte[] { RecvBuffer[5], RecvBuffer[6] }, 0); _deviceData.pressure = BitConverter.ToInt16(new byte[] { RecvBuffer[7], RecvBuffer[8] }, 0); _deviceData.contrast = BitConverter.ToInt16(new byte[] { RecvBuffer[9], RecvBuffer[10] }, 0); _deviceData.switch1 = RecvBuffer[11]; _deviceData.switch2 = RecvBuffer[12]; _deviceData.servo_angle1 = RecvBuffer[13]; _deviceData.servo_angle2 = RecvBuffer[14]; _deviceData.servo_angle3 = RecvBuffer[15]; RecvBufferIndex = 0; SerialType = SERIAL_TYPE.SERIAL_NONE; // trigger device data received event if (deviceDataReceived != null) { deviceDataReceived(_deviceData); } } }
public static extern bool H264_DVR_SerialWrite(Int32 lLoginID, SERIAL_TYPE nType, string Buffer, int nBufLen);
public static extern bool H264_DVR_CloseTransComChannel(Int32 lLoginID, SERIAL_TYPE nType);