FreeCalypso > hg > fc-magnetite
annotate src/cs/drivers/drv_app/fchg/fchg_task.c @ 682:17b7b92e7dba
uartfax.c: fix for old Openmoko bug with Auto-CTS
Openmoko made the change of enabling hardware assisted CTS flow control
in the UART when RTS/CTS flow control is used - it is a change which we
have retained in FreeCalypso - but they forgot to turn this hw mode off
if RTS/CTS flow control is deselected at the application level. We
(FreeCalypso) are now fixing the latter defect ourselves.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 26 Jun 2020 02:53:02 +0000 |
parents | 1c711302732a |
children |
rev | line source |
---|---|
337
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * The FCHG task's core function lives here. |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 */ |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 #include "fchg/fchg_env.h" |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include "fchg/fchg_func_i.h" |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include "rv/rv_general.h" |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include "rvf/rvf_api.h" |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include "rvm/rvm_use_id_list.h" |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include "abb/abb.h" |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 static void set_initial_state(void) |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 { |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 SYS_UWORD16 abb_status; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 abb_status = ABB_Read_Status(); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 if (abb_status & CHGPRES) { |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 if (pwr_ctrl->config_present) |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 pwr_ctrl->state = FCHG_STATE_READY_TO_CHARGE; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 else |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 pwr_ctrl->state = FCHG_STATE_NO_CHARGING; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 } else |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 pwr_ctrl->state = FCHG_STATE_NO_EXT_PWR; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 } |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 T_RV_RET fchg_core(void) |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 { |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 BOOLEAN error_occured = FALSE; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 T_RV_HDR *msg_ptr; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 rvf_send_trace("FCHG task: Initialization", 25, NULL_PARAM, |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 RV_TRACE_LEVEL_DEBUG_LOW, FCHG_USE_ID); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 pwr_load_ffs_batt_table(); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 pwr_load_ffs_charging_config(); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 set_initial_state(); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 pwr_init_discharge(); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 /* loop to process messages */ |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 while (error_occured == FALSE) |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 { |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 /* Wait for the necessary events (infinite wait for a msg in the mailbox 0). */ |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 UINT16 received_event = rvf_wait (0xffff, 0); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 /* If an event related to mailbox 0 is received, then */ |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 if (received_event & RVF_TASK_MBOX_0_EVT_MASK) |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 { |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 /* Read the message in the driver mailbox and delegate action..*/ |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 msg_ptr = (T_RV_HDR *) rvf_read_mbox(FCHG_MAILBOX); |
338
1c711302732a
FCHG: complete enough to attempt linking into fw build
Mychaela Falconia <falcon@freecalypso.org>
parents:
337
diff
changeset
|
49 if (msg_ptr) { |
1c711302732a
FCHG: complete enough to attempt linking into fw build
Mychaela Falconia <falcon@freecalypso.org>
parents:
337
diff
changeset
|
50 pwr_process_message(msg_ptr); |
1c711302732a
FCHG: complete enough to attempt linking into fw build
Mychaela Falconia <falcon@freecalypso.org>
parents:
337
diff
changeset
|
51 rvf_free_buf ((void *) msg_ptr); |
1c711302732a
FCHG: complete enough to attempt linking into fw build
Mychaela Falconia <falcon@freecalypso.org>
parents:
337
diff
changeset
|
52 } |
337
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 /* Timers */ |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 if (received_event & RVF_TIMER_0_EVT_MASK) |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 pwr_handle_timer(); |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 } // end of while |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 return RV_OK; |
0df0668f8bea
FCHG: task core function implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 } |