From d5c3c24d71202353596dd7d28048ecf7ff74bd5c Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Sun, 30 Aug 2020 14:25:17 +0300 Subject: Calculate WHS fan tacho [RPM] + Update the stub --- .../I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c | 17 ++++++++++++++++- .../I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h | 3 +++ .../Embedded/Modules/Stubs_Handler/Progress.c | 11 +++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c index 6cb64262c..895c8f73e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.c @@ -144,18 +144,33 @@ uint16_t WHS_Get_fan_tach(WHS_fan_num fan_number) fan_driver = Select_Fan_Driver(fan_number); tach = D_EMC2302_Read[fan_driver].Reg.TACHReading_High[(fan_number & 0x01)]; tach = ((tach << 8) | D_EMC2302_Read[fan_driver].Reg.TACHReading_Low[(fan_number & 0x01)]); + tach = (tach >> 3);//see data-sheet return tach; } +uint16_t WHS_Fan_Tach[maxFAN] = {0,0,0,0,0,0}; +uint16_t WHS_Fan_Tach_RPM[maxFAN] = {0,0,0,0,0,0}; void Read_All_WHS_Fans_Tach() { WHS_fan_num fan_number = FAN1; + uint16_t tach = 0; + uint16_t m = 2; //Range bit. See data-sheet, table range decode: since the deafualt range is 01 (reported minimum RPM = 1000) the tach count multiplier is 2 for (fan_number = FAN1 ; fan_number < maxFAN; fan_number++) { - WHS_Read_fan_tach(fan_number); + tach = WHS_Read_fan_tach(fan_number); + if (tach < 0x1FFE) + { + WHS_Fan_Tach[fan_number] = tach; + WHS_Fan_Tach_RPM[fan_number] = (3932160 * m) / tach;//see data-sheet + } + else + { + WHS_Fan_Tach[fan_number] = 0; + WHS_Fan_Tach_RPM[fan_number] = 0; + } } } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h index a15248866..d88cdd1f8 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h @@ -101,6 +101,9 @@ typedef union uint8_t Buf[D_EMC2302_Size]; }D_EMC2302_WRITE; +extern uint16_t WHS_Fan_Tach[maxFAN]; +extern uint16_t WHS_Fan_Tach_RPM[maxFAN]; + bool Read_WHS_fan_info(WHS_fan_num fan_number); bool Test_WHS_Fan(void); bool init_WHS_fan(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 853f6913a..4cae0f786 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -830,12 +830,19 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if ((request->amount & 0x0000FFF0) == 0xFAC0) //WHS Fan control { uint16_t fan_tacho = 0; + WHS_fan_num Fan_Id; + uint8_t Fan_Speed; if (WHS_Type == WHS_TYPE_NEW) { - Trigger_SetWHSFanSpeed(((request->amount & 0x0000000F)-2) , request->delay & 0x000000FF); + Fan_Id = (request->amount & 0x0000000F)-2;//0-5 + Fan_Speed = request->delay & 0x000000FF; + Trigger_SetWHSFanSpeed(Fan_Id, Fan_Speed); Task_sleep(2000); - fan_tacho = WHS_Get_fan_tach( (request->amount & 0x0000000F)-2); + Trigger_WHSReadAllFanTacho(); + Task_sleep(1000); + //fan_tacho = WHS_Get_fan_tach( (request->amount & 0x0000000F)-2); + fan_tacho = WHS_Fan_Tach_RPM[Fan_Id]; } response.progress = fan_tacho; response.has_progress = true; -- cgit v1.3.1 From f35997d7f19ffbc4f4f99dbe32ca83207e570e9c Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Sun, 30 Aug 2020 15:22:53 +0300 Subject: Send RPM in head fan's stub --- Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 4cae0f786..d983144f3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -814,7 +814,8 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) Task_sleep(2000); //response.progress = Fan_Click_Info.Product_ID; - response.progress = Head_Fan_Tach[0]; + //response.progress = Head_Fan_Tach[0]; + response.progress = HeadBlowersGetRPM(HEAD_FAN_RIGHT); response.has_progress = true; } @@ -823,7 +824,8 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) { Trigger_Head_Fan_Control(HEAD_FAN_LEFT, request->delay & 0xFF); Task_sleep(2000); - response.progress = Head_Fan_Tach[1]; + //response.progress = Head_Fan_Tach[1]; + response.progress = HeadBlowersGetRPM(HEAD_FAN_LEFT); response.has_progress = true; } else -- cgit v1.3.1