/// <summary> /// Get the string for log output. /// </summary> /// <param name="obj">Structure that you want to convert to a string</param> /// <returns>String for log output</returns> public static StringBuilder ConvertToLogString(LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP rsp) { StringBuilder sb = new StringBuilder(); // Profile information of the profile obtained sb.AppendLine(string.Format(@" GetBatchNo : {0}", rsp.dwGetBatchNo)); sb.AppendLine(string.Format(@" GetBatchProfCnt : {0}", rsp.dwGetBatchProfCnt)); sb.AppendLine(string.Format(@" GetBatchTopProfNo : {0}", rsp.dwGetBatchTopProfNo)); sb.Append(string.Format(@" GetProfCnt : {0}", rsp.byGetProfCnt)); return(sb); }
internal static extern int LJV7IF_GetBatchProfileAdvance(int lDeviceId, ref LJV7IF_GET_BATCH_PROFILE_ADVANCE_REQ pReq, ref LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP pRsp, ref LJV7IF_PROFILE_INFO pProfileInfo, IntPtr pdwBatchData, uint dwDataSize, [Out]LJV7IF_MEASURE_DATA[] pBatchMeasureData, [Out]LJV7IF_MEASURE_DATA[] pMeasureData);
/// <summary> /// "GetBatchProfileAdvance" button clicked. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGetBatchProfileAdvance_Click(object sender, EventArgs e) { _sendCommand = SendCommand.GetBatchProfileAdvance; using (GetBatchprofileAdvanceForm getBatchprofileAdvanceForm = new GetBatchprofileAdvanceForm()) { if (DialogResult.OK == getBatchprofileAdvanceForm.ShowDialog()) { _deviceData[_currentDeviceId].ProfileData.Clear(); _deviceData[_currentDeviceId].MeasureData.Clear(); _measureDatas.Clear(); // Set the command function LJV7IF_GET_BATCH_PROFILE_ADVANCE_REQ req = getBatchprofileAdvanceForm.Req; LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP rsp = new LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP(); LJV7IF_PROFILE_INFO profileInfo = new LJV7IF_PROFILE_INFO(); uint oneDataSize = GetOneProfileDataSize() + (uint)Utility.GetByteSize(Utility.TypeOfStruct.MEASURE_DATA) * (uint)NativeMethods.MeasurementDataCount; uint allDataSize = oneDataSize * getBatchprofileAdvanceForm.Req.byGetProfCnt; int[] profileData = new int[allDataSize / Marshal.SizeOf(typeof(int))]; LJV7IF_MEASURE_DATA[] measureData = new LJV7IF_MEASURE_DATA[NativeMethods.MeasurementDataCount]; LJV7IF_MEASURE_DATA[] batchMeasureData = new LJV7IF_MEASURE_DATA[NativeMethods.MeasurementDataCount]; using (PinnedObject pin = new PinnedObject(profileData)) { // Send the command int rc = NativeMethods.LJV7IF_GetBatchProfileAdvance(_currentDeviceId, ref req, ref rsp, ref profileInfo, pin.Pointer, allDataSize, batchMeasureData, measureData); // @Point // # When reading all the profiles from a single batch, the specified number of profiles may not be read. // # To read the remaining profiles after the first set of profiles have been read, // set the specification method (byPosMode)to 0x02, specify the batch number (dwGetBatchNo), // and then set the number to start reading profiles from (dwGetProfNo) and the number of profiles to read (byGetProfCnt) to values // that specify a range of profiles that have not been read to read the profiles in order. // # For the basic code, see "btnGetBatchProfileEx_Click." // Result output AddLogResult(rc, Resources.SID_GET_BATCH_PROFILE_ADVANCE); if (rc == (int)Rc.Ok) { _measureDatas.Add(new MeasureData(0, measureData)); AddLog(Utility.ConvertToLogString(rsp).ToString()); AddLog(Utility.ConvertToLogString(profileInfo).ToString()); for (int i = 0; i < NativeMethods.MeasurementDataCount; i++) { AddLog(string.Format(" OUT{0:00}: {1}", (i + 1), Utility.ConvertToLogString(measureData[i]).ToString())); } AnalyzeBatchData((int)rsp.byGetProfCnt, ref profileInfo, false, profileData, 0); // Profile export if (DataExporter.ExportOneProfile(_deviceData[_currentDeviceId].ProfileData.ToArray(), 0, _txtboxProfileFilePath.Text)) { AddLog(@"###Saved!!"); } } } } } }
/// <summary> /// "Get advanced mode batch profiles" button clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks> /// Read one batch worth of committed profiles that have been acquired with batch measurement in advanced mode. /// </remarks> private void btnGetBatchProfileAdvanceEx_Click(object sender, EventArgs e) { MessageBox.Show("We will start Advanced mode get batch profiles."); LJV7IF_GET_BATCH_PROFILE_ADVANCE_REQ req = new LJV7IF_GET_BATCH_PROFILE_ADVANCE_REQ(); // Get request structure req.byPosMode = (byte)BatchPos.Commited; req.dwGetBatchNo = 0; req.dwGetProfNo = 0; req.byGetProfCnt = byte.MaxValue; LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP rsp = new LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP(); LJV7IF_PROFILE_INFO profileInfo = new LJV7IF_PROFILE_INFO(); LJV7IF_MEASURE_DATA[] batchMeasureData = new LJV7IF_MEASURE_DATA[NativeMethods.MeasurementDataCount]; LJV7IF_MEASURE_DATA[] measureData = new LJV7IF_MEASURE_DATA[NativeMethods.MeasurementDataCount]; int profileDataSize = Define.MAX_PROFILE_COUNT + (Marshal.SizeOf(typeof(LJV7IF_PROFILE_HEADER)) + Marshal.SizeOf(typeof(LJV7IF_PROFILE_FOOTER))) / Marshal.SizeOf(typeof(int)); int measureDataSize = Marshal.SizeOf( typeof(LJV7IF_MEASURE_DATA) ) * NativeMethods.MeasurementDataCount / Marshal.SizeOf(typeof(int)); int[] receiveBuffer = new int[(profileDataSize + measureDataSize) * req.byGetProfCnt]; using (ProgressForm progressForm = new ProgressForm()) { Cursor.Current = Cursors.WaitCursor; progressForm.Status = Status.Communicating; progressForm.Show(this); progressForm.Refresh(); List<ProfileData> profileDatas = new List<ProfileData>(); // Get profiles. using (PinnedObject pin = new PinnedObject(receiveBuffer)) { Rc rc = (Rc)NativeMethods.LJV7IF_GetBatchProfileAdvance(Define.DEVICE_ID, ref req, ref rsp, ref profileInfo, pin.Pointer, (uint)(receiveBuffer.Length * Marshal.SizeOf(typeof(int))), batchMeasureData, measureData); // @Point // # When reading all the profiles from a single batch, the specified number of profiles may not be read. // # To read the remaining profiles after the first set of profiles have been read, set the specification method (byPosMode)to 0x02, // specify the batch number (dwGetBatchNo), and then set the number to start reading profiles from (dwGetProfNo) and // the number of profiles to read (byGetProfCnt) to values that specify a range of profiles that have not been read to read the profiles in order. // # In more detail, this process entails: // * First configure req as listed below and call this function again. // byPosMode = LJV7IF_BATCH_POS_SPEC // dwGetBatchNo = batch number that was read // byGetProfCnt = Profile number of unread in the batch // * Furthermore, if all profiles in the batch are not read,update the starting position for reading profiles (req.dwGetProfNo) and // the number of profiles to read (req.byGetProfCnt), and then call LJV7IF_GetBatchProfile again. (Repeat this process until all the profiles have been read.) if (!CheckReturnCode(rc)) return; // Output the data of each profile int unitSize = ProfileData.CalculateDataSize(profileInfo) + measureDataSize; for (int i = 0; i < rsp.byGetProfCnt; i++) { profileDatas.Add(new ProfileData(receiveBuffer, unitSize * i, profileInfo)); } // Get all profiles within the batch. req.byPosMode = (byte)BatchPos.Spec; req.dwGetBatchNo = rsp.dwGetBatchNo; do { // Update the get profile position req.dwGetProfNo = rsp.dwGetBatchTopProfNo + rsp.byGetProfCnt; req.byGetProfCnt = (byte)Math.Min((uint)(byte.MaxValue), (rsp.dwGetBatchProfCnt - req.dwGetProfNo)); rc = (Rc)NativeMethods.LJV7IF_GetBatchProfileAdvance(Define.DEVICE_ID, ref req, ref rsp, ref profileInfo, pin.Pointer, (uint)(receiveBuffer.Length * Marshal.SizeOf(typeof(int))), batchMeasureData, measureData); if (!CheckReturnCode(rc)) return; for (int i = 0; i < rsp.byGetProfCnt; i++) { profileDatas.Add(new ProfileData(receiveBuffer, unitSize * i, profileInfo)); } } while (rsp.dwGetBatchProfCnt != (rsp.dwGetBatchTopProfNo + rsp.byGetProfCnt)); } progressForm.Status = Status.Saving; progressForm.Refresh(); // Save the file SaveProfile(profileDatas, _txtSavePath.Text); } }
internal static extern int LJV7IF_GetBatchProfileAdvance(int lDeviceId, ref LJV7IF_GET_BATCH_PROFILE_ADVANCE_REQ pReq, ref LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP pRsp, ref LJV7IF_PROFILE_INFO pProfileInfo, IntPtr pdwBatchData, uint dwDataSize, [Out] LJV7IF_MEASURE_DATA[] pBatchMeasureData, [Out] LJV7IF_MEASURE_DATA[] pMeasureData);
/// <summary> /// Get the string for log output. /// </summary> /// <param name="obj">Structure that you want to convert to a string</param> /// <returns>String for log output</returns> public static StringBuilder ConvertToLogString(LJV7IF_GET_BATCH_PROFILE_ADVANCE_RSP rsp) { StringBuilder sb = new StringBuilder(); // Profile information of the profile obtained sb.AppendLine(string.Format(@" GetBatchNo : {0}", rsp.dwGetBatchNo)); sb.AppendLine(string.Format(@" GetBatchProfCnt : {0}", rsp.dwGetBatchProfCnt)); sb.AppendLine(string.Format(@" GetBatchTopProfNo : {0}", rsp.dwGetBatchTopProfNo)); sb.Append(string.Format (@" GetProfCnt : {0}", rsp.byGetProfCnt)); return sb; }