|
|
@@ -7,7 +7,7 @@ shark_charger_state_t shark_charger_state;
|
|
|
shark_bool shark_charger_enabled;
|
|
|
shark_bool shark_charger_valid;
|
|
|
shark_bool shark_battery_full;
|
|
|
-shark_u16 shark_charge_times;
|
|
|
+shark_u32 shark_charge_time;
|
|
|
shark_u16 shark_charge_skip;
|
|
|
|
|
|
static shark_u16 shark_charger_remove;
|
|
|
@@ -86,8 +86,8 @@ void shark_charger_set_enable(shark_bool enable)
|
|
|
|
|
|
if (enable) {
|
|
|
println("charger enable");
|
|
|
+ shark_charge_time = shark_get_seconds();
|
|
|
gpio_bit_set(GPIO_PORT_CHG_EN, GPIO_PIN_CHG_EN);
|
|
|
- shark_charge_times = 0;
|
|
|
} else {
|
|
|
println("charger disable");
|
|
|
gpio_bit_reset(GPIO_PORT_CHG_EN, GPIO_PIN_CHG_EN);
|
|
|
@@ -99,7 +99,7 @@ void shark_charger_set_enable(shark_bool enable)
|
|
|
|
|
|
void shark_charger_disable(void)
|
|
|
{
|
|
|
- if (shark_charge_times > SHARK_CHG_TIME_DETECT || shark_charger_valid) {
|
|
|
+ if (shark_charge_get_time() > SHARK_CHG_TIME_DETECT || shark_charger_valid) {
|
|
|
println("charger detect");
|
|
|
shark_charger_insert = 0;
|
|
|
shark_charge_skip = 6000;
|
|
|
@@ -110,37 +110,45 @@ void shark_charger_disable(void)
|
|
|
|
|
|
void shark_charge_tick(void)
|
|
|
{
|
|
|
- if (gpio_input_bit_get(GPIO_PORT_CHG_DET, GPIO_PIN_CHG_DET) == RESET) {
|
|
|
- shark_charger_remove = 0;
|
|
|
+ if (gpio_input_bit_get(GPIO_PORT_CHG_DET, GPIO_PIN_CHG_DET) != RESET) {
|
|
|
+ if (shark_charger_remove < SHARK_CHG_REMOVE_MIN) {
|
|
|
+ if (shark_charger_insert > 0) {
|
|
|
+ println("insert: %d", shark_charger_insert);
|
|
|
+ shark_charger_insert = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ shark_charge_skip = 0;
|
|
|
+ shark_charger_remove++;
|
|
|
|
|
|
- if (shark_charger_insert > SHARK_CHG_INSERT_MIN) {
|
|
|
- if (shark_charger_enabled && shark_charge_times < SHARK_CHG_TIME_MAX) {
|
|
|
- shark_charge_times++;
|
|
|
+ if (shark_charger_remove == SHARK_CHG_REMOVE_MIN) {
|
|
|
+ shark_charger_state = SHARK_CHG_REMOVE;
|
|
|
+ shark_battery_full = shark_false;
|
|
|
+ println("charger remove");
|
|
|
}
|
|
|
+ }
|
|
|
+ } else if (shark_charger_insert < SHARK_CHG_INSERT_MIN) {
|
|
|
+ if (shark_charger_remove > 0) {
|
|
|
+ println("remove: %d", shark_charger_remove);
|
|
|
+ shark_charger_remove = 0;
|
|
|
+ }
|
|
|
|
|
|
- } else if (shark_charge_skip > 0) {
|
|
|
+ if (shark_charge_skip > 0) {
|
|
|
shark_charge_skip--;
|
|
|
} else {
|
|
|
shark_charger_insert++;
|
|
|
|
|
|
- if (shark_charger_insert > SHARK_CHG_INSERT_MIN) {
|
|
|
- if (shark_battery_charge_full() || shark_xl_check_with_qd()) {
|
|
|
+ if (shark_charger_insert == SHARK_CHG_INSERT_MIN) {
|
|
|
+ if (shark_xl_check()) {
|
|
|
+ shark_charger_set_poll();
|
|
|
+ } else if (shark_battery_charge_full()) {
|
|
|
shark_charger_set_poll();
|
|
|
+ shark_battery_series_locked = shark_false;
|
|
|
} else {
|
|
|
shark_charger_state = SHARK_CHG_INSERT;
|
|
|
+ println("charger insert");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- shark_charger_insert = 0;
|
|
|
- shark_charge_skip = 0;
|
|
|
-
|
|
|
- if (shark_charger_remove > SHARK_CHG_REMOVE_MIN) {
|
|
|
- shark_charger_state = SHARK_CHG_REMOVE;
|
|
|
- shark_battery_full = shark_false;
|
|
|
- } else {
|
|
|
- shark_charger_remove++;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|