aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/UndoOperationGroup.cs
blob: 12afe3838f72bc0c4387c3e2379fd3588424c816 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Diagnostics;
using Tango.Scripting.Editors.Utils;

namespace Tango.Scripting.Editors.Document
{
	/// <summary>
	/// This class stacks the last x operations from the undostack and makes
	/// one undo/redo operation from it.
	/// </summary>
	sealed class UndoOperationGroup : IUndoableOperationWithContext
	{
		IUndoableOperation[] undolist;
		
		public UndoOperationGroup(Deque<IUndoableOperation> stack, int numops)
		{
			if (stack == null)  {
				throw new ArgumentNullException("stack");
			}
			
			Debug.Assert(numops > 0 , "UndoOperationGroup : numops should be > 0");
			Debug.Assert(numops <= stack.Count);
			
			undolist = new IUndoableOperation[numops];
			for (int i = 0; i < numops; ++i) {
				undolist[i] = stack.PopBack();
			}
		}
		
		public void Undo()
		{
			for (int i = 0; i < undolist.Length; ++i) {
				undolist[i].Undo();
			}
		}
		
		public void Undo(UndoStack stack)
		{
			for (int i = 0; i < undolist.Length; ++i) {
				stack.RunUndo(undolist[i]);
			}
		}
		
		public void Redo()
		{
			for (int i = undolist.Length - 1; i >= 0; --i) {
				undolist[i].Redo();
			}
		}
		
		public void Redo(UndoStack stack)
		{
			for (int i = undolist.Length - 1; i >= 0; --i) {
				stack.RunRedo(undolist[i]);
			}
		}
	}
}
char ProcessParamsConfigPath[50] = "0://SysInfo//ProcessP.cfg"; ProcessParameters ProcessParametersKeep; void HeatersStopControlOnHeatersOff(ProcessParameters* ProcessParams) { uint32_t temp_sum = 0; temp_sum += ProcessParams->dryerzone1temp; temp_sum += ProcessParams->dryerzone2temp; temp_sum += ProcessParams->dryerzone3temp; temp_sum += ProcessParams->mixertemp; temp_sum += ProcessParams->headzone1temp; temp_sum += ProcessParams->headzone2temp; temp_sum += ProcessParams->headzone3temp; temp_sum += ProcessParams->headzone4temp; temp_sum += ProcessParams->headzone5temp; temp_sum += ProcessParams->headzone6temp; if (temp_sum == 0)// heating off { HeatersControlStop(); REPORT_MSG(temp_sum,"Heating control off - temperatures off"); } } uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) { uint32_t status = 0; if (ProcessParams==NULL) { status = ERROR_CODE__INVALID_PARAMETER; return status; } if (ProcessParams->dryerzone1temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->dryerzone2temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->dryerzone3temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->mixertemp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->headzone1temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->headzone2temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->headzone3temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->headzone4temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->headzone5temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (ProcessParams->headzone6temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER; if (status != 0) return status; if (ProcessParams) { memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); } if (ProcessParams->mixertemp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__MixerHeater, true, ProcessParams->mixertemp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__MixerHeater, false, ProcessParams->mixertemp); if (ProcessParams->headzone1temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true, ProcessParams->headzone1temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false, ProcessParams->headzone1temp); if (ProcessParams->headzone2temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true, ProcessParams->headzone2temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false, ProcessParams->headzone2temp); if (ProcessParams->headzone3temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, true, ProcessParams->headzone3temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, false, ProcessParams->headzone3temp); if (ProcessParams->headzone4temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true, ProcessParams->headzone4temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, false, ProcessParams->headzone4temp); if (ProcessParams->headzone5temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, true, ProcessParams->headzone5temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, false, ProcessParams->headzone5temp); if (ProcessParams->headzone6temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, true, ProcessParams->headzone6temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, false, ProcessParams->headzone6temp); if (ProcessParams->dryerzone1temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, true, ProcessParams->dryerzone1temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, false, ProcessParams->dryerzone1temp); /* if (ProcessParams->dryerzone2temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, true, ProcessParams->dryerzone2temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, false, ProcessParams->dryerzone2temp); if (ProcessParams->dryerzone3temp) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, true, ProcessParams->dryerzone3temp); else status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, false, ProcessParams->dryerzone3temp); */ HeatersStopControlOnHeatersOff(ProcessParams); dyeingspeed = ProcessParams->dyeingspeed; dryerbufferlength = ProcessParams->dryerbufferlength; mininkuptake = ProcessParams->mininkuptake; feedertension = ProcessParams->feedertension; pullertension = ProcessParams->pullertension; windertension = ProcessParams->windertension; headairflow = ProcessParams->headairflow; dryerairflow = ProcessParams->dryerairflow; return status;//status; } void ProcessRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; uint8_t* container_buffer; uint32_t status = 0; UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ProcessParameters* ProcessParams = request->processparameters; if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters FileWrite(requestContainer->data.data, requestContainer->data.len,ProcessParamsConfigPath); //////////////////////////////////////////////////////////////////////// /*UploadProcessParametersRequest* requesttest; uint8_t* buffer = NULL; uint32_t Bytes = 0; ProcessParameters* ProcessParamsTest; FileRead(ProcessParamsConfigPath, &Bytes, &buffer); requesttest = upload_process_parameters_request__unpack(NULL, Bytes, buffer); // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); if (requesttest) { ProcessParamsTest = request->processparameters; } free (buffer); upload_process_parameters_request__free_unpacked(requesttest,NULL); */ ///////////////////////////////////////////////////////// UploadProcessParametersResponse response = UPLOAD_PROCESS_PARAMETERS_RESPONSE__INIT; responseContainer = createContainer(MESSAGE_TYPE__UploadProcessParametersResponse, requestContainer->token, true, &response, &upload_process_parameters_response__pack, &upload_process_parameters_response__get_packed_size); container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); //REPORT_MSG (ProcessParams->dryerzone1temp,"Process Params Dryer"); PowerIdleOutOfIdleState(); if (status == 0) status = HandleProcessParameters(ProcessParams); if (status) { responseContainer.has_error = true; responseContainer.error = (ErrorCode)status; } size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); upload_process_parameters_request__free_unpacked(request,NULL); } uint32_t ProcessParamsInit(void) { FRESULT Fresult = FR_OK; FIL *FileHandle = 0; //the system supports a single active file uint8_t* buffer = NULL; uint32_t Bytes = 0,i,j,k=0; UploadProcessParametersRequest* request; FileHandle = my_malloc(sizeof(FIL)); Fresult = FileOpen(ProcessParamsConfigPath, &Bytes, FileHandle); if (Fresult == FR_OK) { buffer = my_malloc (Bytes); if (buffer) { for (i=0;i<=(Bytes/100);i++) { Fresult = f_read(FileHandle,&buffer[i*100],100,&j ); k+=j; } if (k!=Bytes) LOG_ERROR(k,"File read error"); request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); // ProcessParameters* ProcessParams = process_parameters__unpack(NULL, Bytes, buffer); if (request) { ProcessParameters* ProcessParams = request->processparameters; Fresult = HandleProcessParameters(ProcessParams); //memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); upload_process_parameters_request__free_unpacked(request,NULL); } free (buffer); } } f_close(FileHandle); return Fresult; }