n

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
0:8ad47e2b6f00
Child:
17:44b2801ac94b
Child:
21:bc8c1cec3da6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Command.c	Sat Jan 30 13:00:39 2016 +0000
@@ -0,0 +1,462 @@
+#include "stdlib.h"
+#include "LPC17xx.h"
+#include "Command.h"
+#include "el_lin.h"
+#include "vibro.h"
+#include "Global.h"
+#include "uart_m.h"
+#include "CntrlGLD.h"
+#include "QEI.h"
+#include "InputOutput.h"
+#include "SPI.h"
+unsigned int Rate_Flag;
+unsigned int PC_Comand;
+unsigned int n;
+unsigned int CountBuFFIn;
+unsigned int ParamIn;
+unsigned int Err;
+	unsigned int N=0,CRC_N;
+	unsigned int Param1=0;
+	unsigned int Param2=0;
+	unsigned int Param3=0;	
+	unsigned int Param4=0;
+	
+/*
+void exec_CMD(void)       //r. === ��������� ������������� ���������� � ���������� �������
+{
+	unsigned int Comand_code;
+	
+	//rx_buf_copy = 1;                  //r. ����������� ����� ����������� ��������� ������
+
+	Comand_code = (rcv_buf[2] & 0xFF) << 8;
+	PC_Comand = Comand_code | (rcv_buf[3] & 0xFF);	//e. save it in the memory for echo-transmission //r. ��������� ��� � ������ ��� �������� ��������
+}*/
+void CMD_Maintenance(void)
+{
+	BuffTemp[0] = Main.SOC_Out;
+	BuffTemp[1] = Main.My_Addres;
+	BuffTemp[2] = Main.Firmware_Version;
+	BuffTemp[3] = Main.GLD_Serial;
+	BuffTemp[4]=0x00;
+	BuffTemp[5]=0x00;
+	Check(BuffTemp, 8);
+	WriteConN (BuffTemp,8);
+}
+
+void CMD_Rate(void)
+{	
+	
+	unsigned int T_VibH   , T_VibL;				// ������� ������������.
+	unsigned int Cnt_PlsL , Cnt_PlsH;			// ������� +.
+	unsigned int Cnt_MnsL , Cnt_MnsH;			// ������� -.
+	unsigned int Cnt_DifL , Cnt_DifH;			// �������� ���������.
+  unsigned int F_rasL   , F_rasH;				// ������� �����������.
+	
+	unsigned int HF_regL  , HF_regH;      // ����� ���������� ���.               �� �������
+	unsigned int HF_difL  , HF_difH;      // ������ ������ ����������� ���.      �� �������
+	
+	unsigned int WP_regL  , WP_regH; 
+	
+	unsigned int ADC1L, ADC2L, ADC3L, ADC4L, ADC5L; 
+	unsigned int ADC1H, ADC2H, ADC3H, ADC4H, ADC5H; 
+	
+	
+	LoopOn	
+//	Main.T_Vib=(unsigned int)((7680000*16/Main.Frq)*4096);
+	Main.T_Vib=(unsigned int)((7680000*16/(Main.Frq>>12)));
+  Main.Firmware_Version=0xff; /// ������������� �������
+	
+	T_VibH   = ( Main.T_Vib>>8  ) TakeByte;
+	T_VibL   = ( Main.T_Vib     ) TakeByte;
+	
+	Cnt_PlsH = ( Main.Cnt_Pls>>8) TakeByte;
+	Cnt_PlsL = ( Main.Cnt_Pls   ) TakeByte;
+	
+	Cnt_MnsH = ( Main.Cnt_Mns>>8) TakeByte;
+	Cnt_MnsL = ( Main.Cnt_Mns   ) TakeByte;
+	
+	Cnt_DifH = ( Main.Cnt_Dif>>8) TakeByte;
+	Cnt_DifL = ( Main.Cnt_Dif   ) TakeByte;
+	
+	F_rasH   = ( Main.F_ras>>8  ) TakeByte;
+	F_rasL   = ( Main.F_ras     ) TakeByte;
+	
+	ADC1H    = ( Spi.ADC1>>8    ) TakeByte;
+	ADC1L		 = ( Spi.ADC1       ) TakeByte;
+	
+	ADC2H    = ( Spi.ADC2>>8    ) TakeByte;
+	ADC2L		 = ( Spi.ADC2       ) TakeByte;
+	
+	ADC3H    = ( Spi.ADC3>>8    ) TakeByte;
+	ADC3L		 = ( Spi.ADC3       ) TakeByte;
+	
+	ADC4H    = ( Spi.ADC4>>8    ) TakeByte;
+	ADC4L		 = ( Spi.ADC4       ) TakeByte;
+	
+	ADC5H    = ( Spi.ADC5>>8    ) TakeByte;
+	ADC5L		 = ( Spi.ADC5       ) TakeByte;
+	
+	WP_regH  = ( Spi.DAC_B>>8   ) TakeByte;
+	WP_regL  = ( Spi.DAC_B      ) TakeByte;
+	
+	HF_regH=0xff;
+	HF_regL=0xff;
+
+  HF_difH=0xff;
+	HF_difL=0xff;
+
+	
+	BuffTemp[ 0] = Main.SOC_Out;
+	BuffTemp[ 1] = Main.My_Addres;
+		
+	BuffTemp[ 2] = Cnt_PlsH;//������� ���� �������� +.
+	BuffTemp[ 3] = Cnt_PlsL;//������� ���� �������� +.
+	
+	BuffTemp[ 4] = Cnt_MnsH;//������� ���� �������� -.
+	BuffTemp[ 5] = Cnt_MnsL;//������� ���� �������� -.
+	
+	BuffTemp[ 6] = Cnt_DifH;//������� ���� �������� ���������
+	BuffTemp[ 7] = Cnt_DifL;//������� ���� �������� ���������
+	
+	BuffTemp[ 8] = F_rasH;
+	BuffTemp[ 9] = F_rasL;
+	
+	BuffTemp[10] = HF_regH;
+	BuffTemp[11] = HF_regL;
+	
+	BuffTemp[12] = HF_difH;
+	BuffTemp[13] = HF_difL;
+	
+	BuffTemp[14] = T_VibH ;//
+	BuffTemp[15] = T_VibL; //?
+	
+	BuffTemp[16] = Main.Firmware_Version;//��
+	BuffTemp[17] = Main.Firmware_Version;//��
+	
+	BuffTemp[18] = T_VibH>>1;
+	BuffTemp[19] = T_VibL;
+	
+	BuffTemp[20] = Main.Firmware_Version;//��
+	BuffTemp[21] = Main.Firmware_Version;//��
+	
+	BuffTemp[22] = WP_regH;              //���    Spi.DAC_B
+	BuffTemp[23] = WP_regL;              //���
+	
+	BuffTemp[24] = Main.Firmware_Version;// ��
+	BuffTemp[25] = Main.Firmware_Version;// ��
+	
+	BuffTemp[26] = ADC1H;
+	BuffTemp[27] = ADC1L;
+	
+	BuffTemp[28] = ADC1H;
+	BuffTemp[29] = ADC1L;
+	
+	BuffTemp[30] = ADC1H;
+	BuffTemp[31] = ADC1L;
+	
+  BuffTemp[32] = ADC1H;
+	BuffTemp[33] = ADC1L;
+	
+	BuffTemp[34] = ADC1H;
+	BuffTemp[35] = ADC1L;
+	
+	BuffTemp[36] = 0x00;//ADC6
+	BuffTemp[37] = 0x00;//ADC6
+	
+	BuffTemp[38] = Main.Firmware_Version;
+	BuffTemp[39] = Main.Firmware_Version;
+	BuffTemp[40] = Main.Firmware_Version;
+	BuffTemp[41] = Main.Firmware_Version;
+	
+	
+	Check(BuffTemp, 44);
+	WriteConN (BuffTemp,44);
+	LoopOff
+}
+
+void CMD_M_Control_D8()///���������\����� ��������� ����������
+{ 
+	int bit,NReg;
+	BuffTemp[0] = Main.SOC_Out;      //DD
+	BuffTemp[1] = Main.My_Addres;    //00
+	BuffTemp[2] = Main.CMD_In;       //D8
+             //10?	
+	if((Param1&0x80))
+	 {
+		bit=1;
+	 }
+	 else 
+	   {
+		  bit=0;
+	   }
+	
+	if ((Param1 & 0x10) == 0) 
+	 {
+		 NReg=0;
+		switch(Param1&0xf)  // Main.RgConA
+	     {
+		    case 0x0:
+					Main.RgConA|=bit;
+		    break;
+				
+				case 0x1:
+					Main.RgConA|=bit<<0x1;
+		    break;
+				
+				case 0x2:
+					Main.RgConA|=bit<<0x2;
+		    break;
+				
+				case 0x3:
+					Main.RgConA|=bit<<0x3;
+		    break;
+				
+				case 0x4:
+					Main.RgConA|=bit<<0x4;
+		    break;
+				
+				case 0x5:
+					Main.RgConA|=bit<<0x5;
+		    break;
+				
+				case 0x6:
+					Main.RgConA|=bit<<0x6;
+		    break;
+				
+				case 0x7:
+					Main.RgConA|=bit<<0x7;
+		    break;
+	     }
+		BuffTemp[3] = NReg<<4; 
+		BuffTemp[4] = (Main.RgConA>>8 )& 0xff;
+		BuffTemp[5] =  Main.RgConA     & 0xff;
+	}
+	else
+	{
+		 NReg=1;            // Main.RgConB
+		switch(Param1&0xf)  // Main.RgConB
+    	{
+				case 0x0:
+				Main.RgConB|=bit;
+				break;
+				case 0x1:
+				Main.RgConB|=bit<1;
+				break;
+				case 0x2:
+				Main.RgConB|=bit<2;
+				break;
+	}
+		BuffTemp[3] =  NReg<<4; 
+		BuffTemp[4] = (Main.RgConB>>8 ) & 0xff;
+		BuffTemp[5] =  Main.RgConB      & 0xff;
+	}
+ 
+	Check(BuffTemp, CRC_N);
+	WriteConN (BuffTemp,CRC_N);
+}
+
+ void CMD_M_Control_D9()///������ ��������� ����������
+ {
+	int bit,NReg;
+	BuffTemp[0] = Main.SOC_Out;      //DD
+	BuffTemp[1] = Main.My_Addres;    //00
+	BuffTemp[2] = Main.CMD_In;       //D9
+	 if ((Param1 & 0x10) == 0) 
+	 {
+		 BuffTemp[3]=0<<4;
+		 BuffTemp[4] = (Main.RgConA>>8 )& 0xff;
+		 BuffTemp[5] =  Main.RgConA     & 0xff;
+	 }
+	 else
+	 {
+		 BuffTemp[3]=1<<4;
+		 BuffTemp[4] = (Main.RgConB>>8 ) & 0xff;
+		 BuffTemp[5] =  Main.RgConB      & 0xff;
+	 }
+	Check(BuffTemp, CRC_N);
+	WriteConN (BuffTemp,CRC_N);
+ }
+// (����� (���) ���� 0...3, ������� ���� ���������� ����, ������� ���� ���� ����)
+void CMD_M_Stymul()
+{
+	int temp;
+	 temp =((BuffTemp[4]<<8) | BuffTemp[5]);
+			 // temp=0;
+	 temp=temp&0xFFFF;
+   DACF =(temp*K_DAC)+deltaDAC;
+   Spi.DAC_B =(unsigned int)(DACF) /*(unsigned int)(temp*K_DAC+deltaDAC)*/; // K_DAC);
+	
+	//int temp;
+//	temp =((BuffTemp[4]<<8) | BuffTemp[5]);
+	//temp = 65535 - temp;
+	/*if(temp<1000)
+	{
+		temp=0;
+	}
+	else if(temp>60000)
+	{
+		temp=65535;
+	}*/
+	//Spi.DAC_B =(((BuffTemp[4]<<8) | BuffTemp[5])*K_DAC+deltaDAC);/*((BuffTemp[4]<<8) | BuffTemp[5])-0xFFFF*///;  //((rcv_buf[4] << 8) | (int)rcv_buf[5]);K_DAC+deltaDAC
+	//BuffTemp[0] = temp;      //DD
+	//WriteConN (BuffTemp,1);
+}
+
+unsigned int Check(char *c, unsigned int Count)
+{
+	int i=1;
+	unsigned int temp,CRC;
+
+	
+	temp=1;
+	CRC=0;
+	
+	
+	for(;i<Count-2;i++)
+	{
+		CRC+=c[i];
+	}
+	
+	if(c[Count-2]!=((CRC>>8)&0xFF))
+	{
+		temp=0;
+		Main.RsErrLine = (Main.RsErrLine)&=0x2;
+	}
+
+	if(c[Count-1]!=((CRC>>0)&0xFF))
+	{
+		temp=0;
+//		Main.RsErrLine= (Main.RsErrLine)=0x2;
+	}
+	
+	c[Count-2]=(CRC>>8)&0xFF;
+	c[Count-1]=(CRC>>0)&0xFF;
+	
+	
+	
+	return temp;
+}
+
+int Getlengf(void)
+{
+	unsigned int lengf=0;
+	switch(Main.CMD_In)
+		{ 
+			case 0x99://maintainance
+      lengf=6;	
+			CRC_N=8;
+			break;
+			
+			case 0x0A: //m_stymul
+			lengf=8;
+			break;
+			
+			case 0xA5://DeviceMode
+
+      lengf=6;
+      CRC_N=8;			
+			break;
+			
+			case 0xDD://m_rate
+
+      lengf=6;
+      CRC_N=44;			
+			break;
+			
+			case 0xB0://DeviceMode
+
+      lengf=6;
+      CRC_N=8;			
+			break;
+			
+			case 0xD8://m_control
+		
+      lengf=6;	
+      CRC_N=8;			
+			break;
+			
+			case 0xD9://m_control
+
+      lengf=6;	
+      CRC_N=8;			
+			break;
+		}
+	return lengf;
+}
+
+void Read_CMD(void)
+{	
+	Main.SOC_Out=0xDD;	
+	Main.RsErrLine = (Main.RsErrLine)& 0xffff; 
+
+	
+	CountBuFFIn=ReadChekCon(BuffTemp);
+	if(CountBuFFIn==1) 	
+        {
+				if (BuffTemp[0] != SOC_In) 
+					{
+						ReadCon(BuffTemp); 
+						Main.RsErrLine += 0x100;//WriteCon("\n\r ...Error.... ");
+						BuffTemp[99]=Main.RsErrLine;
+					}
+				}
+	else if(CountBuFFIn==2) 
+				{
+				if (BuffTemp[1] != Main.My_Addres) 
+					{
+						ReadCon(BuffTemp);  
+						Main.RsErrLine += 0x1;//WriteCon("\n\r ...Error_ADDRES.... ");
+					}
+				}
+	else if(CountBuFFIn==3) 	
+				{
+				Main.CMD_In=BuffTemp[2];
+				N=Getlengf();
+				}		
+				
+	else if(CountBuFFIn==4 && N==6) 	
+				{
+				 Param1=BuffTemp[3];
+				}			
+	else if((CountBuFFIn==5)&&(N==7)) 	
+				{
+				//LoopOn
+			  Param1=BuffTemp[3];
+			  Param2=BuffTemp[4];
+					 
+				}				
+	else if((CountBuFFIn==6)&&(N==8)) 	
+				{
+			  	Param1=BuffTemp[3];
+			    Param2=BuffTemp[4];
+					Param3=BuffTemp[5];
+				}							
+	else if(CountBuFFIn > (N-1)) 
+			  {
+				ReadCon(BuffTemp);
+				if(Check(BuffTemp, CountBuFFIn))
+				  {	
+						switch(Main.CMD_In)
+						{
+							case CMD_MAINT: 
+					    CMD_Maintenance();
+							break;
+							case 0xD8: 
+					    CMD_M_Control_D8();
+							case 0xD9: 
+					    CMD_M_Control_D9();
+							break;
+							case 0x0A: 
+					    CMD_M_Stymul(Param1,Param2,Param3);
+							break;
+							case 0xDD:
+							Rate_Flag=1;
+						  break;
+							Main.RsErrLine = 0;
+						}
+				 				
+					}
+        }
+}
+
+