diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-12-23 09:33:50 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-12-23 09:33:50 +0200 |
| commit | eb434d3a2db37d47df2d29e597e92900fdf84af8 (patch) | |
| tree | 0188c7537e212f027e8cd8a1cc811e755ed3aaca /Software | |
| parent | 39364cc5d70f8ea4b6527eaee8fbb09eaa66a468 (diff) | |
| download | Tango-eb434d3a2db37d47df2d29e597e92900fdf84af8.tar.gz Tango-eb434d3a2db37d47df2d29e597e92900fdf84af8.zip | |
Update BTSR
Diffstat (limited to 'Software')
5 files changed, 394 insertions, 18 deletions
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 001303c88..10e6a78f6 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -169,6 +169,7 @@ typedef enum #define LOW 0x0 #define HIGH 0x1 #define LOW_AND_HIGH 0x2 +#define HIGHEST 0x3 #define WR 0 #define RD 1 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..118891a39 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c +++ b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c @@ -40,6 +40,9 @@ static uint32_t GlobalClk; uint8_t BTSR_RX_Buff[Max_BTSR_RX_Bytes]; uint16_t TX_Timeout = 0xFFFF;//6250 uint16_t RX_Timeout = 0xFFFF;//1 +float BTSR_Length = 0; + +#define BTSR_RADIUS 3 //TBD ? typedef enum { @@ -366,6 +369,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; @@ -646,11 +650,94 @@ typedef struct typedef union { - BITS Bit[4]; - uint8_t Byte[4]; + 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; + + BTSR_ALARM_AND_ENABLING_STATUS_READ BTSR_Status; +BTSR_DEVICE_INFORMATION_READ BTSR_Info; + +typedef union +{ + 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 +{ + 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_ADVANCED_TENSION_PROGRAMMING BTSR_Adv_Tension_Prog; void BTSR_Configuration_Set(uint8_t UFeeder_ID) { @@ -664,11 +751,178 @@ void BTSR_Configuration_Set(uint8_t UFeeder_ID) BTSR_Calculate_CheckSum(BTSR_TX_Buff,18); - BTSR_Send_Buf(Typology_Set.Buf, 20); + BTSR_Send_Buf(BTSR_TX_Buff, 20); } -void BTSR_Alarm_and_Enabling_Status_Read(uint8_t UFeeder_ID) +void BTSR_Advanced_Style_Load(uint8_t UFeeder_ID, uint16_t Tension, uint16_t Tension_Error, uint16_t Time_Alarm, BTSR_APPLICATION Application, BTSR_YARN_TYPE YarnType ) +{ + //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] = UFeeder_ID; + BTSR_TX_Buff[1] = 0x4B; + + BTSR_TX_Buff[2] = 0xCD;//1 + BTSR_TX_Buff[3] = 0x00;//2 + + BTSR_TX_Buff[10] = 0x02;//9 + BTSR_TX_Buff[11] = 0x00;//10 + BTSR_TX_Buff[12] = 0x04;//11 + BTSR_TX_Buff[13] = 0x00;//12 + + + BTSR_TX_Buff[15] = FLAT_KNIT;//14 + BTSR_TX_Buff[16] = ALL_YARNS2;//15 + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,23); + + BTSR_Send_Buf(BTSR_TX_Buff,25); + +} + +void BTSR_Advanced_Tension_Prog(uint8_t UFeeder_ID, uint16_t Tension, uint16_t Tension_Error, uint16_t Time_Alarm ) +{ + + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = UFeeder_ID; + BTSR_TX_Buff[1] = 0x39; + + BTSR_TX_Buff[4] = Tension & 0XFF;//3 + BTSR_TX_Buff[5] = Tension >> 8;//4 + + BTSR_TX_Buff[22] = Tension_Error & 0XFF;//21 + BTSR_TX_Buff[23] = Tension_Error >> 8;//22 + + BTSR_TX_Buff[24] = Time_Alarm & 0XFF;//23 + BTSR_TX_Buff[25] = Time_Alarm >> 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(uint8_t BTSR_Id, BTSR_APPLICATION Application, BTSR_YARN_TYPE Yarn_Type ) +{ + //APPLICATION_AND_YARN_TYPOLOGY_SET_27 + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR_Id; + BTSR_TX_Buff[1] = 0x3F; + BTSR_TX_Buff[2] = Application; + BTSR_TX_Buff[3] = Yarn_Type; + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,4); + + BTSR_Send_Buf(BTSR_TX_Buff, 6); +} + + +void BTSR_Status_Reset(uint8_t UFeeder_ID)//35 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = UFeeder_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[4] = 0x00;//SPARE + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,6); + + BTSR_Send_Buf(BTSR_TX_Buff, 8); + +} + +void BTSR_Errors_Counter_Reset(uint8_t UFeeder_ID)//36 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = UFeeder_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(uint8_t UFeeder_ID , uint8_t Resolution)//37/39/41 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = UFeeder_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(uint8_t UFeeder_ID) +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = UFeeder_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(uint8_t UFeeder_ID , uint8_t Resolution)//37/39/41 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = UFeeder_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(uint8_t UFeeder_ID)//30 { memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); @@ -677,7 +931,7 @@ void BTSR_Alarm_and_Enabling_Status_Read(uint8_t UFeeder_ID) BTSR_Calculate_CheckSum(BTSR_TX_Buff,2); - BTSR_Send_Buf(Typology_Set.Buf, 4); + BTSR_Send_Buf(BTSR_TX_Buff, 4); } typedef enum @@ -715,24 +969,39 @@ typedef enum MAX_BTSR_SET }BTSR_CMD; +typedef union +{ + struct + { + uint32_t Uint32; + uint16_t CheckSum; + }Data; + uint8_t Buf[6]; +}BTSR_METERS; + +BTSR_METERS BTSR_Meters; + + #define Get_Set_resp 5 #define Set_Command 6 #define Get_Read_resp 7 #define Read_Command 8 -BTSR_CMD BTSR_command_Stage[MAX_BTSR_SET]; +uint8_t BTSR_command_Stage[MAX_BTSR_SET]; uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) { uint8_t status = OK; - uint8_t i; + uint8_t i,j; + + //BTSR_Init(); for(i = DEVICE_CALIBRATION_11; i < MAX_BTSR_SET; i++) { if(BTSR_command_Stage[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]; @@ -746,17 +1015,39 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) BTSR_command_Stage[i] = BTSR_RX_Buff[1]; //print response + command ID } - //print response + command ID - BTSR_command_Stage[i] = OK; + else//print response + command ID + BTSR_command_Stage[i] = BTSR_RX_Buff[0];//OK; } if(BTSR_command_Stage[i] == Set_Command) { - if(i == CONFIGURATION_SET_15) + switch(i) { - BTSR_Configuration_Set(UFeeder_ID); + case CONFIGURATION_SET_15: + BTSR_Configuration_Set(UFeeder_ID); + break; + case ADVANCED_TENSION_PROGRAMMING_21: + BTSR_Advanced_Tension_Prog(0x01, 0x0101, 0x0101, 0x0101 ); + break; + case APPLICATION_AND_YARN_TYPOLOGY_SET_27: + BTSR_Application_Yarn_Type_Set(0x01, SHOES, ELASTIC2 ); + break; + case ALARM_STATUS_RESET_35: + BTSR_Status_Reset(0x01); + break; + case RESETS_ALL_THE_COUNTERS_36: + BTSR_Errors_Counter_Reset(0x01); + break; + case METERS_TOTAL_COUNTER_RESET_LOW_38: + BTSR_Meters_Total_Counter_Reset(UFeeder_ID, LOW); + break; + case METERS_TOTAL_COUNTER_RESET_HIGH_40: + BTSR_Meters_Total_Counter_Reset(UFeeder_ID, HIGH); + break; + case METERS_TOTAL_COUNTER_RESET_HIGHEST_42: + BTSR_Meters_Total_Counter_Reset(UFeeder_ID, HIGHEST); + break; } - BTSR_command_Stage[i] = Get_Set_resp; return status;//Only one command in cycle } @@ -770,19 +1061,56 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) // 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_Status.Byte[j] = BTSR_RX_Buff[j]; } + else + if(i == DEVICE_INFORMATION_READ_10) + { + for(j = 0; j < 20; j++) + BTSR_Info.Buf[j] = BTSR_RX_Buff[j]; + status |= Check_Received_CheckSum(UFeeder_ID, 0x3E, BTSR_Info.Buf, 20); + ReportWithPackageFilter(ThreadFilter,"BTSR VERSION",__FILE__,UFeeder_ID,(BTSR_Info.Byte.BOARD_HW_VERSION << 8) | BTSR_Info.Byte.BOOTLOADER_SW_VERSION,RpMessage,(BTSR_Info.Byte.SW_VERSION << 8) | BTSR_Info.Byte.SW_UNDER_VERSION,0); + } + if((i == METERS_TOTAL_COUNTER_READ_LOW_37) || (i == METERS_TOTAL_COUNTER_READ_HIGH_39) || (i == METER_TOTAL_COUNTER_READ_HIGHEST_41)) + { + for(j = 0; j < 6; j++) + BTSR_Meters.Buf[j] = BTSR_RX_Buff[j]; + status |= Check_Received_CheckSum(UFeeder_ID, 0x16, BTSR_Meters.Buf, 6); + + BTSR_Length = (float)(BTSR_Meters.Data.Uint32) * PI * BTSR_RADIUS; + if(i == METERS_TOTAL_COUNTER_READ_HIGH_39) + BTSR_Length/=12.0; + else + if(i == METER_TOTAL_COUNTER_READ_HIGHEST_41) + BTSR_Length/=750.0; + } + + memset(BTSR_RX_Buff, 0, Max_BTSR_RX_Bytes); BTSR_command_Stage[i] = 0; } if(BTSR_command_Stage[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_ID); + break; + case DEVICE_INFORMATION_READ_10: + BTSR_Info_Read(UFeeder_ID); + break; + case METERS_TOTAL_COUNTER_READ_LOW_37: + BTSR_Meters_Total_Counter_Read(UFeeder_ID, LOW); + break; + case METERS_TOTAL_COUNTER_READ_HIGH_39: + BTSR_Meters_Total_Counter_Read(UFeeder_ID, HIGH); + break; + case METER_TOTAL_COUNTER_READ_HIGHEST_41: + BTSR_Meters_Total_Counter_Read(UFeeder_ID, HIGHEST); + break; } + BTSR_command_Stage[i] = Get_Read_resp; return status;//Only one command in cycle } @@ -791,3 +1119,37 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) return status; } + +void BTSR_Init() +{ + //if( BTSR_command_Stage[CONFIGURATION_SET_15] == 0) + BTSR_command_Stage[CONFIGURATION_SET_15] = Set_Command; + BTSR_command_Stage[DEVICE_INFORMATION_READ_10] = Read_Command; + + /////////////////////////////////////// test //////////////////////// + + BTSR_command_Stage[ADVANCED_TENSION_PROGRAMMING_21] = Set_Command;//test + + BTSR_command_Stage[APPLICATION_AND_YARN_TYPOLOGY_SET_27] = Set_Command;//test + + //if( BTSR_command_Stage[ALARM_AND_ENABLING_STATUS_READ_30] == 0) + BTSR_command_Stage[ALARM_AND_ENABLING_STATUS_READ_30] = Read_Command; + + BTSR_command_Stage[ALARM_STATUS_RESET_35] = Set_Command;//test + + BTSR_command_Stage[RESETS_ALL_THE_COUNTERS_36] = Set_Command;//test + + BTSR_command_Stage[METER_TOTAL_COUNTER_READ_HIGHEST_41] = Set_Command;//test + + BTSR_command_Stage[METERS_TOTAL_COUNTER_RESET_HIGHEST_42] = Set_Command;//test +} + + + +//void BTSR_Test() +//{ +// BTSR_Advanced_Style_Load(0x01, 0xABCD, 0x0102, 0x0304, FLAT_KNIT, ALL_YARNS2 ); +//} + + + 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..398c3cf25 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h +++ b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h @@ -62,4 +62,7 @@ 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(uint8_t UFeeder_ID); +void BTSR_Init(); + #endif /* DRIVERS_UART_COMM_BTSR_BTSR_H_ */ diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index c1eeff837..933f4b72c 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -359,6 +359,10 @@ int main(void) I2C_DispRFIDTask_Init();//I2C Task for dispensers & RFID +#ifdef USE_UART4_FOR_BTSR + BTSR_Init(); +#endif + #if defined(USE_RFID_LOGIC) || defined(USE_RFID_STUB) //Trigger_RFID_Init(); //Init_IFS();//must be done after FPGA_Init Init_IFS(); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index ad5a1d5ca..b85bb9824 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -72,6 +72,7 @@ #include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h> #include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h> #include <Drivers/I2C_Communication/RFID_NFC/NFC.h> +#include "Drivers/Uart_Comm/BTSR/BTSR.h" Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ @@ -723,6 +724,11 @@ uint32_t MillisecLowLoop(uint32_t tick) } } #endif + + #ifdef USE_UART4_FOR_BTSR + //call every 100mSec + BTSR_State_Machine(0x01); + #endif } if (Gradient_Tick) DispensersCollectionCall(); |
