mocked timer test, EvseRead
This commit is contained in:
@@ -58,3 +58,79 @@ static bool CheckTimeout()
|
|||||||
return timeout > 0 && (now - startTime) > timeout;
|
return timeout > 0 && (now - startTime) > timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void EvseRead()
|
||||||
|
{
|
||||||
|
const int threshProxType1 = 2200;
|
||||||
|
const int threshProx = 3700;
|
||||||
|
const int thresh13A = 3200;
|
||||||
|
const int thresh20A = 2800;
|
||||||
|
const int thresh32A = 1800;
|
||||||
|
const int thresh63A = 1000;
|
||||||
|
int val = AnaIn::cablelim.Get();
|
||||||
|
|
||||||
|
if (timer_get_flag(TIM3, TIM_SR_CC2IF))
|
||||||
|
{
|
||||||
|
//The relationship between duty cycle and maximum current is linear
|
||||||
|
//until 85% = 51A. Above that it becomes non-linear but that is not
|
||||||
|
//relevant for our 10kW charger.
|
||||||
|
float evselim = timer_get_ic_value(TIM3, TIM_IC2) / 10;
|
||||||
|
evselim *= 0.666666f;
|
||||||
|
Param::SetFloat(Param::evselim, evselim);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//If no PWM detected, set limit to 0
|
||||||
|
Param::SetInt(Param::evselim, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Param::GetInt(Param::inputype) == INP_TYPE2 ||
|
||||||
|
Param::GetInt(Param::inputype) == INP_TYPE2_3P ||
|
||||||
|
Param::GetInt(Param::inputype) == INP_TYPE2_AUTO)
|
||||||
|
{
|
||||||
|
if (val > threshProx)
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::proximity, 0);
|
||||||
|
Param::SetInt(Param::cablelim, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::proximity, 1);
|
||||||
|
|
||||||
|
if (val > thresh13A)
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::cablelim, 13);
|
||||||
|
}
|
||||||
|
else if (val > thresh20A)
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::cablelim, 20);
|
||||||
|
}
|
||||||
|
else if (val > thresh32A)
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::cablelim, 32);
|
||||||
|
}
|
||||||
|
else if (val > thresh63A)
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::cablelim, 63);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Param::GetInt(Param::inputype) == INP_TYPE1)
|
||||||
|
{
|
||||||
|
if (val > threshProxType1)
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::proximity, 0);
|
||||||
|
Param::SetInt(Param::cablelim, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::proximity, 1);
|
||||||
|
Param::SetInt(Param::cablelim, 40);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Param::SetInt(Param::proximity, 0);
|
||||||
|
Param::SetInt(Param::cablelim, 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,6 +108,9 @@
|
|||||||
VALUE_ENTRY(c3udc, "V", 2035 ) \
|
VALUE_ENTRY(c3udc, "V", 2035 ) \
|
||||||
VALUE_ENTRY(c3idc, "A", 2036 ) \
|
VALUE_ENTRY(c3idc, "A", 2036 ) \
|
||||||
VALUE_ENTRY(test_time, "s", 2037 ) \
|
VALUE_ENTRY(test_time, "s", 2037 ) \
|
||||||
|
VALUE_ENTRY(test_timer_flag, "X", 2038 ) \
|
||||||
|
VALUE_ENTRY(test_timer_icvalue, "X", 2039 ) \
|
||||||
|
// TODO: How to hide this in interface?
|
||||||
|
|
||||||
|
|
||||||
/***** Enum String definitions *****/
|
/***** Enum String definitions *****/
|
||||||
|
|||||||
Binary file not shown.
@@ -47,83 +47,6 @@ static Stm32Scheduler* scheduler;
|
|||||||
static Can* can;
|
static Can* can;
|
||||||
static PiController dcCurController;
|
static PiController dcCurController;
|
||||||
|
|
||||||
static void EvseRead()
|
|
||||||
{
|
|
||||||
const int threshProxType1 = 2200;
|
|
||||||
const int threshProx = 3700;
|
|
||||||
const int thresh13A = 3200;
|
|
||||||
const int thresh20A = 2800;
|
|
||||||
const int thresh32A = 1800;
|
|
||||||
const int thresh63A = 1000;
|
|
||||||
int val = AnaIn::cablelim.Get();
|
|
||||||
|
|
||||||
if (timer_get_flag(TIM3, TIM_SR_CC2IF))
|
|
||||||
{
|
|
||||||
//The relationship between duty cycle and maximum current is linear
|
|
||||||
//until 85% = 51A. Above that it becomes non-linear but that is not
|
|
||||||
//relevant for our 10kW charger.
|
|
||||||
float evselim = timer_get_ic_value(TIM3, TIM_IC2) / 10;
|
|
||||||
evselim *= 0.666666f;
|
|
||||||
Param::SetFloat(Param::evselim, evselim);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//If no PWM detected, set limit to 0
|
|
||||||
Param::SetInt(Param::evselim, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Param::GetInt(Param::inputype) == INP_TYPE2 ||
|
|
||||||
Param::GetInt(Param::inputype) == INP_TYPE2_3P ||
|
|
||||||
Param::GetInt(Param::inputype) == INP_TYPE2_AUTO)
|
|
||||||
{
|
|
||||||
if (val > threshProx)
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::proximity, 0);
|
|
||||||
Param::SetInt(Param::cablelim, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::proximity, 1);
|
|
||||||
|
|
||||||
if (val > thresh13A)
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::cablelim, 13);
|
|
||||||
}
|
|
||||||
else if (val > thresh20A)
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::cablelim, 20);
|
|
||||||
}
|
|
||||||
else if (val > thresh32A)
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::cablelim, 32);
|
|
||||||
}
|
|
||||||
else if (val > thresh63A)
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::cablelim, 63);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Param::GetInt(Param::inputype) == INP_TYPE1)
|
|
||||||
{
|
|
||||||
if (val > threshProxType1)
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::proximity, 0);
|
|
||||||
Param::SetInt(Param::cablelim, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::proximity, 1);
|
|
||||||
Param::SetInt(Param::cablelim, 40);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Param::SetInt(Param::proximity, 0);
|
|
||||||
Param::SetInt(Param::cablelim, 32);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static bool CheckStartCondition()
|
static bool CheckStartCondition()
|
||||||
{
|
{
|
||||||
|
|||||||
+4
-2
@@ -31,8 +31,10 @@ class AnaIn{
|
|||||||
ANA_IN_LIST
|
ANA_IN_LIST
|
||||||
#undef ANA_IN_ENTRY
|
#undef ANA_IN_ENTRY
|
||||||
|
|
||||||
bool Get() { return 1; }
|
int val = 7;
|
||||||
void Set() {}
|
|
||||||
|
int Get() { return val; }
|
||||||
|
void Set(int param) { val = param;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ int main() {
|
|||||||
(TestCase){"test_disable_all", test_disable_all},
|
(TestCase){"test_disable_all", test_disable_all},
|
||||||
(TestCase){"test_calc_totals", test_calc_totals},
|
(TestCase){"test_calc_totals", test_calc_totals},
|
||||||
(TestCase){"test_check_timeout", test_check_timeout},
|
(TestCase){"test_check_timeout", test_check_timeout},
|
||||||
|
(TestCase){"test_evse_read", test_evse_read},
|
||||||
// Example:
|
// Example:
|
||||||
//(TestCase){"Your tests name", function_name_without_brackets}
|
//(TestCase){"Your tests name", function_name_without_brackets}
|
||||||
//...
|
//...
|
||||||
|
|||||||
Binary file not shown.
@@ -50,3 +50,26 @@ void test_check_timeout()
|
|||||||
res = CheckTimeout();
|
res = CheckTimeout();
|
||||||
assert(res);
|
assert(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_evse_read()
|
||||||
|
{
|
||||||
|
// INP_MANUAL
|
||||||
|
Param::SetInt(Param::inputype, INP_MANUAL);
|
||||||
|
EvseRead();
|
||||||
|
assert(0 == Param::GetInt(Param::proximity));
|
||||||
|
assert(32 == Param::GetInt(Param::cablelim));
|
||||||
|
|
||||||
|
// INP_TYPE1
|
||||||
|
//under threshold
|
||||||
|
Param::SetInt(Param::inputype, INP_TYPE1);
|
||||||
|
EvseRead();
|
||||||
|
assert(1 == Param::GetInt(Param::proximity));
|
||||||
|
assert(40 == Param::GetInt(Param::cablelim));
|
||||||
|
|
||||||
|
//above
|
||||||
|
Param::SetInt(Param::inputype, INP_TYPE1);
|
||||||
|
AnaIn::cablelim.Set(2222);
|
||||||
|
EvseRead();
|
||||||
|
assert(0 == Param::GetInt(Param::proximity));
|
||||||
|
assert(0 == Param::GetInt(Param::cablelim));
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,3 +3,10 @@
|
|||||||
uint32_t rtc_get_counter_val(){
|
uint32_t rtc_get_counter_val(){
|
||||||
return Param::Get(Param::test_time) >> 5;
|
return Param::Get(Param::test_time) >> 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool timer_get_flag(uint32_t timer_peripheral, uint32_t flag){
|
||||||
|
return Param::Get(Param::test_timer_flag);
|
||||||
|
}
|
||||||
|
float timer_get_ic_value(uint32_t timer_peripheral, enum tim_ic_id ic_id){
|
||||||
|
return Param::GetFloat(Param::test_timer_icvalue);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,22 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "../libopeninv/include/params.h"
|
#include "../libopeninv/include/params.h"
|
||||||
|
#ifndef TEST_TMOCK_H
|
||||||
|
#define TEST_TMOCK_H
|
||||||
|
|
||||||
|
#define TIM_SR_CC2IF (1 << 2)
|
||||||
|
#define PERIPH_BASE (0x40000000U)
|
||||||
|
#define PERIPH_BASE_APB1 (PERIPH_BASE + 0x00000)
|
||||||
|
#define TIM3_BASE (PERIPH_BASE_APB1 + 0x0400)
|
||||||
|
#define TIM3 TIM3_BASE
|
||||||
|
|
||||||
|
enum tim_ic_id {
|
||||||
|
TIM_IC1,
|
||||||
|
TIM_IC2,
|
||||||
|
TIM_IC3,
|
||||||
|
TIM_IC4,
|
||||||
|
};
|
||||||
|
|
||||||
uint32_t rtc_get_counter_val();
|
uint32_t rtc_get_counter_val();
|
||||||
|
bool timer_get_flag(uint32_t timer_peripheral, uint32_t flag);
|
||||||
|
float timer_get_ic_value(uint32_t timer_peripheral, enum tim_ic_id ic_id);
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user