aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Drivers/Uart_Comm
diff options
context:
space:
mode:
authorMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
committerMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
commit00a491d93733d4625ad329b2ba8237f445364b3f (patch)
tree4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Embedded_SW/Embedded/Drivers/Uart_Comm
parent124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff)
downloadTango-00a491d9.tar.gz
Tango-00a491d9.zip
merge
Diffstat (limited to 'Software/Embedded_SW/Embedded/Drivers/Uart_Comm')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c542
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h122
2 files changed, 523 insertions, 141 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c
index 92337080d..0fe1ca152 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c
@@ -25,12 +25,9 @@
#include "driverlib/interrupt.h"
#include "utils/uartstdio.h"
#include "driverlib/uart.h"
-
-//#include <Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.h>
#include "Modules/Control/MillisecTask.h"
#include <DataDef.h>
#include <Drivers/I2C_Communication/I2C_Task.h>
-//#include "Drivers/Uart_Comm/WHS_Controller_Comm/WHS_UART/WHS_Uart.h"
#include "Drivers/FPGA/FPGA_Comm.h"
#include "Drivers/Uart_Comm/BTSR/BTSR.h"
@@ -41,6 +38,8 @@ uint8_t BTSR_RX_Buff[Max_BTSR_RX_Bytes];
uint16_t TX_Timeout = 0xFFFF;//6250
uint16_t RX_Timeout = 0xFFFF;//1
+BTSR_t BTSR[MaxUFeeders];
+
typedef enum
{
BTSR_UART_CONFIG_PAR_1 = (UART_CONFIG_WLEN_8 |UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_ONE),
@@ -71,13 +70,10 @@ void U4RX()
UARTIntEnable(UART4_BASE, UART_INT_TX);
BTSR_RX_Buff[rxcounter] = ROM_UARTCharGetNonBlocking(UART4_BASE);//Receive data
rxcounter++;
-
-
}
void uart4_intHandler()
{
- //static uint8_t nop = 0;
//Get interrupt flags
unsigned long status = UARTIntStatus(UART4_BASE, 1);
@@ -137,7 +133,6 @@ void InitConsole_BTSR_UART4(int32_t ui32SysClock)
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);
//
// Enable GPIO port A which is used for UART4 pins.
- // TODO: change this to whichever GPIO port you are using.
//
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
@@ -366,6 +361,7 @@ uint8_t Check_Received_CheckSum(uint8_t CODE_STRING, uint8_t Function_Code, uint
(Buf[size_include_Checksum - 1] != (Sum >> 8)) )
{
Status = ERROR;
+ ReportWithPackageFilter(ThreadFilter,"BTSR Get Wrong Checksum",__FILE__,__LINE__,(int)CODE_STRING,RpError,(int)Function_Code,0);
}
}
return Status;
@@ -405,56 +401,6 @@ uint8_t BTSR_Send_Buf(uint8_t *Buf, uint8_t size)
return TxResult;
}
-
-/*
-uint8_t BTSR_Send_Buf(uint8_t *Buf, uint8_t size)
-{
- int TxResult = 0;
- uint8_t i = 1;//change to ADD0 and send the rest of bytes (1..Size)
- const uint8_t Save_Size = size;
-
- BTSR_Change_Comm_Mode(TX_FIRST_BYTE);
- Task_sleep (eOneMillisecond);
- TxResult |=ROM_UARTCharPutNonBlocking(UART4_BASE,Buf[0]);
-
- BTSR_Change_Comm_Mode(TX_NOT_FIRST_BYTE);
- Task_sleep (eOneMillisecond);
-
- while(size)
- {
- if(size <= 16) //FIFO is working for data up to 16 bytes
- {
- for(; i < Save_Size; i++)
- {
- TxResult |=ROM_UARTCharPutNonBlocking(UART4_BASE,Buf[i]);
- }
- size = 0;// all sent
- }
- else
- {
- for(; i < 16; i++)
- {
- TxResult |=ROM_UARTCharPutNonBlocking(UART4_BASE,Buf[i]);
- }
- size -= 16;
- }
-
- while(HWREG(UART4_BASE + UART_O_FR) & UART_FR_BUSY)//UARTFR
- {
- if(TX_Timeout)
- {
- TX_Timeout--;
- }
- else
- return ERROR;
- }
- }
-
- UART4_RS485_Direction(RX);
-
- return TxResult;
-}
-*/
uint8_t BTSR_Send_Buf_3xADD1(uint8_t *Buf, uint8_t size)//Only for commands with 3 bytes with Address 1 (0x06/0xFD)
{
int TxResult = 0;
@@ -630,90 +576,279 @@ uint8_t BTSR_Read_Status(uint8_t BTSR_Id, uint8_t Application, uint8_t Yarn_Type
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
-//BTSR_ALARM_AND_ENABLING_STATUS_READ
-typedef struct
+
+
+typedef union
{
- bool D0 : 1;//0
- bool D1 : 1;//1
- bool D2 : 1;//2
- bool D3 : 1;//3
- bool D4 : 1;//4
- bool D5 : 1;//5
- bool D6 : 1;//6
- bool D7 : 1;//7
-}BITS;
+ struct
+ {
+ uint8_t CODE_STRING ;
+ uint8_t FUNCTION_STRING;
+ //DATA_STRING
+ uint16_t WORK_TENSION ;//1° - 2°
+ uint16_t OUTPUT_TENSION;//3° - 4°
+ uint16_t RELAX_YARN ;//5° - 6°
+ uint8_t INC_DEC_TENSION;//7°
+ uint8_t INC_DEC_STRETCH;//8°
+ uint16_t TENSION_ERROR ;//9° - 10°
+ uint16_t TIME_ALARM ;//11° - 12°
+ uint8_t RELAX_SPEED ;//13°
+ uint8_t APPLICATION ;//14°
+ uint8_t YARN_TYPE ;//15°
+ uint8_t SPARE[4] ;//16°
+ uint8_t ALARM_ENABLING ;//20°
+ uint8_t ABILITAZIONE ;//21°
+
+ uint16_t CHECKSUM ;
+ }Byte;
+uint8_t Buf[25];
+}BTSR_ADVANCED_STYLE_LOAD;
+
+BTSR_ADVANCED_STYLE_LOAD BTSR_AdvStyle_Load;
typedef union
{
- BITS Bit[4];
- uint8_t Byte[4];
-}BTSR_ALARM_AND_ENABLING_STATUS_READ;
+ struct
+ {
+ uint8_t CODE_STRING ;
+ uint8_t FUNCTION_STRING ;
+
+ //DATA_STRING
+ uint16_t OUTPUT_TENSION ;
+ uint16_t WORK_TENSION ;
+ uint16_t RELAX_YARN ;
+ uint8_t INC_DEC_TENSION ;
+ uint8_t INC_DEC_STRETCH ;
+ uint32_t METER_START ;
+ uint32_t INC_DEC_METER ;
+ uint32_t TARGET ;
+ uint16_t TENSION_ERROR ;
+ uint16_t ALARM_TIME ;
+ uint8_t SPARE1[2] ;
+ uint8_t ALARM_ENABLING ;
+ uint8_t TARGET_ENABLING ;
+ uint8_t RELAX_YARN_SPEED;
+ uint8_t SPARE2[6] ;
+
+ uint16_t CHECKSUM ;
+ }Byte;
+uint8_t Buf[39];
+}BTSR_ADVANCED_TENSION_PROGRAMMING;
-BTSR_ALARM_AND_ENABLING_STATUS_READ BTSR_Status;
+BTSR_ADVANCED_TENSION_PROGRAMMING BTSR_Adv_Tension_Prog;
-void BTSR_Configuration_Set(uint8_t UFeeder_ID)
+void BTSR_Configuration_Set(UFeeder_Index UFeeder_i)//15
{
memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
- BTSR_TX_Buff[0] = UFeeder_ID;
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
BTSR_TX_Buff[1] = 0x36;
- BTSR_TX_Buff[2] = 0x80;//CCW
+ BTSR_TX_Buff[2] = BTSR[UFeeder_i].DirectionCCW << 7;
BTSR_TX_Buff[3] = 0x01;//YYT OFF, UNICO OFF
- BTSR_TX_Buff[4] = 0x40;//FLIP DISPLAY
+ BTSR_TX_Buff[4] = BTSR[UFeeder_i].Flip_Display << 6;
+ BTSR_TX_Buff[5] = BTSR[UFeeder_i].Lock_Keyboard_Menue;// ‘1’ EDITOR LOCKED
BTSR_Calculate_CheckSum(BTSR_TX_Buff,18);
- BTSR_Send_Buf(Typology_Set.Buf, 20);
+ BTSR_Send_Buf(BTSR_TX_Buff, 20);
+
+}
+
+void BTSR_Advanced_Style_Load(UFeeder_Index UFeeder_i)
+{
+ //memset(BTSR_AdvStyle_Load.Buf, 0, Size);
+ /*
+ uint8_t Size = sizeof(BTSR_AdvStyle_Load.Buf);
+
+ memset(BTSR_AdvStyle_Load.Buf, 0, Size);
+/
+ BTSR_AdvStyle_Load.Byte.CODE_STRING = UFeeder_ID;
+ BTSR_AdvStyle_Load.Byte.FUNCTION_STRING = 0x4B;
+
+ BTSR_AdvStyle_Load.Byte.WORK_TENSION = Tension;
+ BTSR_AdvStyle_Load.Byte.TENSION_ERROR = Tension_Error;
+ BTSR_AdvStyle_Load.Byte.TIME_ALARM = Time_Alarm;
+ BTSR_AdvStyle_Load.Byte.APPLICATION = Application;
+ BTSR_AdvStyle_Load.Byte.YARN_TYPE = YarnType;
+ BTSR_AdvStyle_Load.Byte.ALARM_ENABLING = 0x03; // OUTPUT TENSION ENABLED + TENSION ERROR ENABLED
+*/
+ //BTSR_Calculate_CheckSum(BTSR_AdvStyle_Load.Buf,Size - 2);
+
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+ BTSR_TX_Buff[1] = 0x4B;
+
+ BTSR_TX_Buff[2] = BTSR[UFeeder_i].Tension & 0XFF;//1
+ BTSR_TX_Buff[3] = BTSR[UFeeder_i].Tension >> 8;//2
+
+ BTSR_TX_Buff[10] = BTSR[UFeeder_i].Tension_Err & 0XFF;//9
+ BTSR_TX_Buff[11] = BTSR[UFeeder_i].Tension_Err >> 8;//10
+ BTSR_TX_Buff[12] = BTSR[UFeeder_i].Alarm_Time & 0XFF;//11
+ BTSR_TX_Buff[13] = BTSR[UFeeder_i].Alarm_Time >> 8;//12
+
+
+ BTSR_TX_Buff[15] = BTSR[UFeeder_i].Application;//14
+ BTSR_TX_Buff[16] = BTSR[UFeeder_i].Yarn_Type;//15
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,23);
+
+ BTSR_Send_Buf(BTSR_TX_Buff,25);
+
+}
+
+void BTSR_Advanced_Tension_Prog(UFeeder_Index UFeeder_i )
+{
+
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+ BTSR_TX_Buff[1] = 0x39;
+
+ BTSR_TX_Buff[4] = BTSR[UFeeder_i].Tension & 0XFF;//3
+ BTSR_TX_Buff[5] = BTSR[UFeeder_i].Tension >> 8;//4
+
+ BTSR_TX_Buff[22] = BTSR[UFeeder_i].Tension_Err & 0XFF;//21
+ BTSR_TX_Buff[23] = BTSR[UFeeder_i].Tension_Err >> 8;//22
+
+ BTSR_TX_Buff[24] = BTSR[UFeeder_i].Alarm_Time & 0XFF;//23
+ BTSR_TX_Buff[25] = BTSR[UFeeder_i].Alarm_Time >> 8;//24
+
+ BTSR_TX_Buff[28] = 0x01;//27 ‘1’ TENSION ERROR ENABLED
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,37);
+
+ BTSR_Send_Buf(BTSR_TX_Buff,39);
+}
+
+void BTSR_Application_Yarn_Type_Set(UFeeder_Index UFeeder_i)
+{
+ //APPLICATION_AND_YARN_TYPOLOGY_SET_27
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+ BTSR_TX_Buff[1] = 0x3F;
+ BTSR_TX_Buff[2] = BTSR[UFeeder_i].Application;
+ BTSR_TX_Buff[3] = BTSR[UFeeder_i].Yarn_Type;
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,4);
+ BTSR_Send_Buf(BTSR_TX_Buff, 6);
}
-void BTSR_Alarm_and_Enabling_Status_Read(uint8_t UFeeder_ID)
+
+void BTSR_Status_Reset(UFeeder_Index UFeeder_i)//35
{
memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
- BTSR_TX_Buff[0] = UFeeder_ID;
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+ BTSR_TX_Buff[1] = 0x27;
+
+ BTSR_TX_Buff[2] = 0x07;//RESET_0
+ BTSR_TX_Buff[3] = 0x00;//RESET_1
+ BTSR_TX_Buff[4] = 0x00;//SPARE
+ BTSR_TX_Buff[5] = 0x00;//SPARE
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,6);
+
+ BTSR_Send_Buf(BTSR_TX_Buff, 8);
+
+}
+
+void BTSR_Errors_Counter_Reset(UFeeder_Index UFeeder_i)//36
+{
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+ BTSR_TX_Buff[1] = 0x29;
+ BTSR_TX_Buff[2] = 0x00;//00 - RESETS ALL THE COUNTERS
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,3);
+
+ BTSR_Send_Buf(BTSR_TX_Buff, 5);
+
+}
+
+void BTSR_Meters_Total_Counter_Reset(UFeeder_Index UFeeder_i , uint8_t Resolution)//37/39/41
+{
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+
+ if(Resolution == LOW)
+ BTSR_TX_Buff[1] = 0x06;
+ else
+ if(Resolution == HIGH)
+ BTSR_TX_Buff[1] = 0x1E;
+ else
+ if(Resolution == HIGHEST)
+ BTSR_TX_Buff[1] = 0x48;
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,2);
+
+ BTSR_Send_Buf(BTSR_TX_Buff, 4);
+}
+
+void BTSR_Info_Read(UFeeder_Index UFeeder_i)
+{
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+ BTSR_TX_Buff[1] = 0x3E;
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,2);
+
+ BTSR_Send_Buf(BTSR_TX_Buff, 4);
+
+}
+
+void BTSR_Meters_Total_Counter_Read(UFeeder_Index UFeeder_i , uint8_t Resolution)//37/39/41
+{
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
+
+ if(Resolution == LOW)
+ BTSR_TX_Buff[1] = 0x16;
+ else
+ if(Resolution == HIGH)
+ BTSR_TX_Buff[1] = 0x1D;
+ else
+ if(Resolution == HIGHEST)
+ BTSR_TX_Buff[1] = 0x47;
+
+ BTSR_Calculate_CheckSum(BTSR_TX_Buff,2);
+
+ BTSR_Send_Buf(BTSR_TX_Buff, 4);
+}
+
+void BTSR_Alarm_and_Enabling_Status_Read(UFeeder_Index UFeeder_i)//30
+{
+ memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes);
+
+ BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID;
BTSR_TX_Buff[1] = 0x1C;
BTSR_Calculate_CheckSum(BTSR_TX_Buff,2);
- BTSR_Send_Buf(Typology_Set.Buf, 4);
+ BTSR_Send_Buf(BTSR_TX_Buff, 4);
}
-typedef enum
+
+
+typedef union
{
- //BTSR_READ
- DEVICE_INFORMATION_READ_10 ,
- ADVANCED_PROGRAMMING_READ_18 ,
- ADVANCED_TENSION_READ_23 ,
- APPLICATION_AND_YARN_TYPOLOGY_READ_28 ,
- ALARM_AND_ENABLING_STATUS_READ_30 ,
- PC_LINK_READ_32 ,
- METERS_TOTAL_COUNTER_READ_LOW_37 ,
- METERS_TOTAL_COUNTER_READ_HIGH_39 ,
- METER_TOTAL_COUNTER_READ_HIGHEST_41 ,
- MAX_BTSR_READ ,
+ struct
+ {
+ uint32_t Uint32;
+ uint16_t CheckSum;
+ }Data;
+ uint8_t Buf[6];
+}BTSR_METERS;
+
+BTSR_METERS BTSR_Meters;
- //BTSR_SET
- //return 0xFA/0xFB/0xF9
- DEVICE_CALIBRATION_11 ,
- BAUDRATE_SET_13 ,
- DISPLAY_LANGUAGE_SET_14 ,
- CONFIGURATION_SET_15 ,
- ADVANCED_CONFIGURATION_SET_17 ,
- INPUT_CURRENT_CONTROL_SET_20 ,
- ADVANCED_TENSION_PROGRAMMING_21 ,
- ADVANCED_STYLE_LOAD_25 ,
- APPLICATION_AND_YARN_TYPOLOGY_SET_27 ,
- WORK_TENSION_AND_OPERATION_STATUS_SET_29 ,
- ALARM_STATUS_RESET_35 ,
- RESETS_ALL_THE_COUNTERS_36 ,
- //return device + Function code
- METERS_TOTAL_COUNTER_RESET_LOW_38 ,
- METERS_TOTAL_COUNTER_RESET_HIGH_40 ,
- METERS_TOTAL_COUNTER_RESET_HIGHEST_42 ,
- MAX_BTSR_SET
-}BTSR_CMD;
#define Get_Set_resp 5
#define Set_Command 6
@@ -721,43 +856,61 @@ typedef enum
#define Get_Read_resp 7
#define Read_Command 8
-BTSR_CMD BTSR_command_Stage[MAX_BTSR_SET];
-
-uint8_t BTSR_State_Machine(uint8_t UFeeder_ID)
+uint8_t BTSR_State_Machine(UFeeder_Index UFeeder_i)
{
uint8_t status = OK;
- uint8_t i;
+ uint8_t i,j;
+ float temp = 0.0;
+
+ //BTSR_Init();
for(i = DEVICE_CALIBRATION_11; i < MAX_BTSR_SET; i++)
{
- if(BTSR_command_Stage[i] == Get_Set_resp)
+ if(BTSR[UFeeder_i].Command[i] == Get_Set_resp)
{
- if((i >= DEVICE_CALIBRATION_11) && (i <= RESETS_ALL_THE_COUNTERS_36) /*&& (BTSR_RX_Buff[0] != BTSR_RISP_OK)*/)
+ if((i >= DEVICE_CALIBRATION_11) && (i <= RESETS_ALL_THE_COUNTERS_36) && (BTSR_RX_Buff[0] != BTSR_RISP_OK))
{
status = ERROR;
- BTSR_command_Stage[i] = BTSR_RX_Buff[0];
+ BTSR[UFeeder_i].Command[i] = BTSR_RX_Buff[0];
//print response + command ID
}
- else if(((i == METERS_TOTAL_COUNTER_RESET_LOW_38) && (BTSR_RX_Buff[1] != 0x06)) ||
- ((i == METERS_TOTAL_COUNTER_RESET_HIGH_40) && (BTSR_RX_Buff[1] != 0x1E)) ||
- ((i == METERS_TOTAL_COUNTER_RESET_HIGHEST_42) && (BTSR_RX_Buff[1] != 0x48)) )
+ else if( (i == METERS_TOTAL_COUNTER_RESET_38_40_42) &&
+ ( ((BTSR[UFeeder_i].Length_Resolution == LOW) && (BTSR_RX_Buff[1] != 0x06)) ||
+ ((BTSR[UFeeder_i].Length_Resolution == HIGH) && (BTSR_RX_Buff[1] != 0x1E)) ||
+ ((BTSR[UFeeder_i].Length_Resolution == HIGHEST) && (BTSR_RX_Buff[1] != 0x48)) ) )
{
status = ERROR;
- BTSR_command_Stage[i] = BTSR_RX_Buff[1];
+ BTSR[UFeeder_i].Command[i] = BTSR_RX_Buff[1];
//print response + command ID
}
- //print response + command ID
- BTSR_command_Stage[i] = OK;
+ else//print response + command ID
+ BTSR[UFeeder_i].Command[i] = BTSR_RX_Buff[0];//OK;
}
- if(BTSR_command_Stage[i] == Set_Command)
+ if(BTSR[UFeeder_i].Command[i] == Set_Command)
{
- if(i == CONFIGURATION_SET_15)
+ switch(i)
{
- BTSR_Configuration_Set(UFeeder_ID);
+ case CONFIGURATION_SET_15:
+ BTSR_Configuration_Set(UFeeder_i);
+ break;
+ case ADVANCED_TENSION_PROGRAMMING_21:
+ BTSR_Advanced_Tension_Prog(UFeeder_i);
+ break;
+ case APPLICATION_AND_YARN_TYPOLOGY_SET_27:
+ BTSR_Application_Yarn_Type_Set(UFeeder_i);
+ break;
+ case ALARM_STATUS_RESET_35:
+ BTSR_Status_Reset(UFeeder_i);
+ break;
+ case RESETS_ALL_THE_COUNTERS_36:
+ BTSR_Errors_Counter_Reset(UFeeder_i);
+ break;
+ case METERS_TOTAL_COUNTER_RESET_38_40_42:
+ BTSR_Meters_Total_Counter_Reset(UFeeder_i, BTSR[UFeeder_i].Length_Resolution);
+ break;
}
-
- BTSR_command_Stage[i] = Get_Set_resp;
+ BTSR[UFeeder_i].Command[i] = Get_Set_resp;
return status;//Only one command in cycle
}
}
@@ -765,25 +918,60 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID)
for(i = DEVICE_INFORMATION_READ_10; i < MAX_BTSR_READ; i++)
{
- if(BTSR_command_Stage[i] == Get_Read_resp)
+ if(BTSR[UFeeder_i].Command[i] == Get_Read_resp)
{
// Add CRC check
if(i == ALARM_AND_ENABLING_STATUS_READ_30)
{
- for(i = 0; i < 4; i++)
- BTSR_Status.Byte[i] = BTSR_RX_Buff[i];
+ for(j = 0; j < 6; j++)
+ BTSR[UFeeder_i].Status.Byte[j] = BTSR_RX_Buff[j];
+ }
+ else
+ if(i == DEVICE_INFORMATION_READ_10)
+ {
+ for(j = 0; j < 12; j++)
+ BTSR[UFeeder_i].Info.Buf[j] = BTSR_RX_Buff[j];
+ status |= Check_Received_CheckSum(BTSR[UFeeder_i].ID, 0x3E, BTSR[UFeeder_i].Info.Buf, 12);
+ ReportWithPackageFilter(ThreadFilter,"BTSR VERSION",__FILE__,UFeeder_i,(BTSR[UFeeder_i].Info.Byte.BOARD_HW_VERSION << 8) | BTSR[UFeeder_i].Info.Byte.BOOTLOADER_SW_VERSION,RpMessage,(BTSR[UFeeder_i].Info.Byte.SW_VERSION << 8) | BTSR[UFeeder_i].Info.Byte.SW_UNDER_VERSION,0);
+ }
+ else
+ if(METER_TOTAL_COUNTER_READ_37_39_41)
+ {
+ for(j = 0; j < 6; j++)
+ BTSR_Meters.Buf[j] = BTSR_RX_Buff[j];
+ status |= Check_Received_CheckSum(BTSR[UFeeder_i].ID, 0x16, BTSR_Meters.Buf, 6);
+
+ temp = (float)(BTSR_Meters.Data.Uint32) * PI * BTSR[UFeeder_i].Radius_Meter;
+ if(BTSR[UFeeder_i].Length_Resolution == HIGH)
+ temp /=12.0;
+ else
+ if(BTSR[UFeeder_i].Length_Resolution == HIGHEST)
+ temp /=750.0;
+
+ BTSR[UFeeder_i].LengthInMeter = temp;
}
- BTSR_command_Stage[i] = 0;
+
+ memset(BTSR_RX_Buff, 0, Max_BTSR_RX_Bytes);
+ BTSR[UFeeder_i].Command[i] = BTSR_RISP_OK;
}
+ //else//?
- if(BTSR_command_Stage[i] == Read_Command)
+ if(BTSR[UFeeder_i].Command[i] == Read_Command)
{
-
- if(i == ALARM_AND_ENABLING_STATUS_READ_30)
+ switch(i)
{
- BTSR_Alarm_and_Enabling_Status_Read(UFeeder_ID);
+ case ALARM_AND_ENABLING_STATUS_READ_30:
+ BTSR_Alarm_and_Enabling_Status_Read(UFeeder_i);
+ break;
+ case DEVICE_INFORMATION_READ_10:
+ BTSR_Info_Read(UFeeder_i);
+ break;
+ case METER_TOTAL_COUNTER_READ_37_39_41:
+ BTSR_Meters_Total_Counter_Read(UFeeder_i, BTSR[UFeeder_i].Length_Resolution);
+ break;
}
- BTSR_command_Stage[i] = Get_Read_resp;
+
+ BTSR[UFeeder_i].Command[i] = Get_Read_resp;
return status;//Only one command in cycle
}
}
@@ -791,3 +979,79 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID)
return status;
}
+void BTSR_Read_Errors_Status(UFeeder_Index UFeeder_i)//Every 1 second. 3 seconds debouce for on/off
+{
+ BTSR[UFeeder_i].Command[ALARM_AND_ENABLING_STATUS_READ_30] = Read_Command;
+}
+
+void BTSR_Read_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution)//Every 100msec during thread movement
+{
+ BTSR[UFeeder_i].Length_Resolution = Length_Resolution;
+
+ BTSR[UFeeder_i].Command[METER_TOTAL_COUNTER_READ_37_39_41] = Set_Command;
+}
+
+void BTSR_Reset_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution)//before job
+{
+ BTSR[UFeeder_i].Length_Resolution = Length_Resolution;
+
+ BTSR[UFeeder_i].Command[METERS_TOTAL_COUNTER_RESET_38_40_42] = Set_Command;
+}
+
+void BTSR_Reset_Status(UFeeder_Index UFeeder_i)//
+{
+
+ BTSR[UFeeder_i].Command[ALARM_STATUS_RESET_35] = Set_Command;
+}
+
+void BTSR_Reset_Counters(UFeeder_Index UFeeder_i)//
+{
+
+ BTSR[UFeeder_i].Command[RESETS_ALL_THE_COUNTERS_36] = Set_Command;
+}
+
+void BTSR_RML_Settings(UFeeder_Index UFeeder_i, BTSR_APPLICATION Application, BTSR_YARN_TYPE Yarn_Type, uint16_t Tension, uint16_t Tension_Err, uint16_t Alarm_Time )
+{
+ BTSR[UFeeder_i].Application = Application;
+ BTSR[UFeeder_i].Yarn_Type = Yarn_Type;
+ BTSR[UFeeder_i].Tension = Tension;
+ BTSR[UFeeder_i].Tension_Err = Tension_Err;
+ BTSR[UFeeder_i].Alarm_Time = Alarm_Time;
+
+ BTSR[UFeeder_i].Command[ADVANCED_TENSION_PROGRAMMING_21] = Set_Command;
+ BTSR[UFeeder_i].Command[APPLICATION_AND_YARN_TYPOLOGY_SET_27] = Set_Command;
+}
+
+
+
+void BTSR_Init()
+{
+ UFeeder_Index i = RUFeeder1;
+
+ for(i = RUFeeder1; i < MaxUFeeders; i++)
+ {
+ BTSR[i].ID = 0x01 + i;
+ BTSR[i].Flip_Display = true;
+ BTSR[i].DirectionCCW = true;
+ BTSR[i].Radius_Meter = BTSR_ROLLER_RADIUS;
+ BTSR[i].Lock_Keyboard_Menue = false;
+
+ BTSR[i].Command[CONFIGURATION_SET_15] = Set_Command;
+ BTSR[i].Command[DEVICE_INFORMATION_READ_10] = Read_Command;
+
+ BTSR_Reset_Status(i);
+ BTSR_Reset_Counters(i);
+ BTSR_Reset_Length(i,LOW);
+ BTSR_Reset_Length(i,HIGH);
+ BTSR_Reset_Length(i,HIGHEST);
+ }
+ //Only for testing -------------------------------------------------------------------------------
+// BTSR_RML_Settings(RUFeeder1, SHOES, ALL_YARNS3, 1000, 10, 5);//Test!!! --- need to move to RML
+// BTSR_Reset_Counters(RUFeeder1);
+// BTSR_Reset_Status(RUFeeder1);
+// BTSR_Reset_Length(RUFeeder1, HIGHEST);
+// BTSR_Read_Length(RUFeeder1, HIGHEST);
+// BTSR_Read_Errors_Status(RUFeeder1);
+ //------------------------------------------------------------------------------------------------
+}
+
diff --git a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h
index 14fda8f19..db8f2879b 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h
+++ b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h
@@ -11,6 +11,9 @@
#define Max_BTSR_RX_Bytes 55
#define Max_BTSR_TX_Bytes 40
+#define BTSR_ROLLER_RADIUS 0.021//meter
+
+
typedef enum
{
SOCKS = 1 ,
@@ -48,12 +51,117 @@ typedef enum
BTSR_RISP_OUT_OF_RANFE = 0xF9,
}BTSR_RISP_BYTE;
+typedef enum
+{
+ //BTSR_READ (Read - The highest priority first)
+ METER_TOTAL_COUNTER_READ_37_39_41 ,//0
+ ALARM_AND_ENABLING_STATUS_READ_30 ,//1
+ PC_LINK_READ_32 ,//2
+ ADVANCED_TENSION_READ_23 ,//3
+ ADVANCED_PROGRAMMING_READ_18 ,//4
+ APPLICATION_AND_YARN_TYPOLOGY_READ_28 ,//5
+ DEVICE_INFORMATION_READ_10 ,//6
+
+ MAX_BTSR_READ ,//7
+
+ //BTSR_SET (Set - The highest priority first)
+ //Return 0xFA/0xFB/0xF9:
+ BAUDRATE_SET_13 ,//8
+ DISPLAY_LANGUAGE_SET_14 ,//9
+ DEVICE_CALIBRATION_11 ,//10
+ CONFIGURATION_SET_15 ,//11
+ ADVANCED_CONFIGURATION_SET_17 ,//12
+ //return device + Function code:
+ METERS_TOTAL_COUNTER_RESET_38_40_42 ,//13
+ //Return 0xFA/0xFB/0xF9:
+ RESETS_ALL_THE_COUNTERS_36 ,//14
+ ALARM_STATUS_RESET_35 ,//15
+ WORK_TENSION_AND_OPERATION_STATUS_SET_29 ,//16
+ ADVANCED_TENSION_PROGRAMMING_21 ,//17
+ ADVANCED_STYLE_LOAD_25 ,//18
+ APPLICATION_AND_YARN_TYPOLOGY_SET_27 ,//19
+ INPUT_CURRENT_CONTROL_SET_20 ,//20
+
+ MAX_BTSR_SET //21
+}BTSR_CMD;
+
+typedef enum
+{
+ RUFeeder1 = 0,
+ //RUFeeder2 = 1,
+ //RUFeeder3 = 2,
+ //RUFeeder4 = 3,
+
+ MaxUFeeders,
+}UFeeder_Index;
+
+//BTSR_ALARM_AND_ENABLING_STATUS_READ
+typedef struct
+{
+ bool D0 : 1;//0
+ bool D1 : 1;//1
+ bool D2 : 1;//2
+ bool D3 : 1;//3
+ bool D4 : 1;//4
+ bool D5 : 1;//5
+ bool D6 : 1;//6
+ bool D7 : 1;//7
+}BITS;
+
+
+typedef union
+{
+ BITS Bit[6];
+ uint8_t Byte[6];
+}BTSR_ALARM_AND_ENABLING_STATUS_READ;
+
+typedef union
+{
+ struct
+ {
+ uint8_t SW_VERSION;//0XDE
+ uint8_t SW_UNDER_VERSION;//0X01
+ uint8_t BYTE_U0X55;//0X55
+ uint8_t BYTE_F0X46;//0X46
+ uint8_t PRODUCT_CODE;//0X13
+ uint8_t TENSION_SENSOR_END_SCALE;//0X65
+ uint8_t BOARD_HW_VERSION;//0X02
+ uint8_t BOOTLOADER_SW_VERSION;//0X0A
+ uint8_t BYTE_0X32;//0X32
+ uint8_t SPARE;//0X00
+ uint8_t CHECKSUM_LSB;//0X60
+ uint8_t CHECKSUM_MSB;//0X01
+ }Byte;
+uint8_t Buf[12];
+}BTSR_DEVICE_INFORMATION_READ;
+
+typedef struct
+{
+ uint8_t ID;
+ bool DirectionCCW;
+ bool Flip_Display;
+ bool Lock_Keyboard_Menue;
+ float Radius_Meter;
+ uint8_t Command[MAX_BTSR_SET];
+ uint8_t Application;
+ uint8_t Yarn_Type;
+ uint16_t Tension;
+ uint16_t Tension_Err;
+ uint16_t Alarm_Time;
+ uint8_t Length_Resolution;
+
+ float LengthInMeter;
+ BTSR_ALARM_AND_ENABLING_STATUS_READ Status;
+ BTSR_DEVICE_INFORMATION_READ Info;
+
+}BTSR_t;
+
extern uint8_t BTSR_RX_Buff[Max_BTSR_RX_Bytes];
unsigned long UARTStatus();
bool BTSR_Change_Comm_Mode(uint8_t Mode);
-uint8_t BTSR_Auto_Identify(uint8_t BTSR_Id);//AUTOMATIC IDENTIFICATION PROCEDURE (IDENTIFY)
-uint8_t BTSR_Set_Parmeters(uint8_t BTSR_Id, uint8_t Application, uint8_t Yarn_Type );
+uint8_t BTSR_Auto_Identify(uint8_t BTSR_ID);//AUTOMATIC IDENTIFICATION PROCEDURE (IDENTIFY)
+uint8_t BTSR_Set_Parmeters(uint8_t BTSR_ID, uint8_t Application, uint8_t Yarn_Type );
uint8_t BTSR_Send_Buf(uint8_t *Buf, uint8_t size);
uint8_t BTSR_RECEIVE_Buf(uint8_t *Buf, uint8_t size);
@@ -62,4 +170,14 @@ uint8_t Check_Received_CheckSum(uint8_t CODE_STRING, uint8_t Function_Code, uint
uint8_t BTSR_Send_Buf_3xADD1(uint8_t *Buf, uint8_t size);//Only for commands with 3 bytes with Address 1 (0x06/0xFD)
void InitConsole_BTSR_UART4(int32_t ui32SysClock);
+uint8_t BTSR_State_Machine(UFeeder_Index UFeeder_i);
+
+void BTSR_Init();
+void BTSR_RML_Settings(UFeeder_Index UFeeder_i, BTSR_APPLICATION Application, BTSR_YARN_TYPE Yarn_Type, uint16_t Tension, uint16_t Tension_Err, uint16_t Alarm_Time );
+void BTSR_Reset_Counters(UFeeder_Index UFeeder_i);//After errors
+void BTSR_Reset_Status(UFeeder_Index UFeeder_i);//After errors
+void BTSR_Reset_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution);//Before job
+void BTSR_Read_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution);//Every 100msec during thread movement
+void BTSR_Read_Errors_Status(UFeeder_Index UFeeder_i);//Every 1 second. 3 seconds debouce for on/off
+
#endif /* DRIVERS_UART_COMM_BTSR_BTSR_H_ */