annotate src/cs/riviera/rvt/rvt_keepalive.c @ 636:57e67ca2e1cb

pcmdata.c: default +CGMI to "FreeCalypso" and +CGMM to model The present change has no effect whatsoever on Falconia-made and Openmoko-made devices on which /pcm/CGMI and /pcm/CGMM files have been programmed in FFS with sensible ID strings by the respective factories, but what should AT+CGMI and AT+CGMM queries return when the device is a Huawei GTM900 or Tango modem that has been converted to FreeCalypso with a firmware change? Before the present change they would return compiled-in defaults of "<manufacturer>" and "<model>", respectively; with the present change the firmware will self-identify as "FreeCalypso GTM900-FC" or "FreeCalypso Tango" on the two respective targets. This firmware identification will become important if someone incorporates an FC-converted GTM900 or Tango modem into a ZeroPhone-style smartphone where some high-level software like ofono will be talking to the modem and will need to properly identify this modem as FreeCalypso, as opposed to some other AT command modem flavor with different quirks. In technical terms, the compiled-in default for the AT+CGMI query (which will always be overridden by the /pcm/CGMI file in FFS if one is present) is now "FreeCalypso" in all configs on all targets; the compiled-in default for the AT+CGMM query (likewise always overridden by /pcm/CGMM if present) is "GTM900-FC" if CONFIG_TARGET_GTM900 or "Tango" if CONFIG_TARGET_TANGO or the original default of "<model>" otherwise.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 19 Jan 2020 20:14:58 +0000
parents 9ffdfacfe969
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
319
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This module is a FreeCalypso addition. Here we implement the special
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * operation mode that is only used when a device that was originally
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * meant to be a phone handset is turned into a pseudo-modem with no UI,
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * requiring connection to a host computer running rvinterf for control.
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 */
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #ifdef PSEUDO_MODEM_KEEPALIVE
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include "nucleus.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "abb.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include "rv/general.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include "rv/rv_general.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include "rvf/rvf_api.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 #include "rvt/rvt_gen.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 #include "rvt/rvt_def_i.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 #include "rvt/rvt_env.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 #include "rvt/rvt_env_i.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "rvm/rvm_use_id_list.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 #include "uart/serialswitch.h"
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 #include <string.h>
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 volatile UINT8 rvt_keepalive_counter;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 void rvt_keepalive_input(T_RVT_BUFFER p_msg, UINT16 msg_length)
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 /* Checking for an invalid PDU. */
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 if ((p_msg == NULL) || (msg_length != 1))
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 return;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 /* Check for the correct opcode */
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 if (*p_msg != 'A')
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 return;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 /* good keepalive response from external host */
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 rvt_keepalive_counter = 0;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 void rvt_keepalive_register(void)
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 T_RVT_USER_ID rvt_id;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 rvt_register_id("KEEPALIVE", &rvt_id, rvt_keepalive_input);
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 static void keepalive_send(UINT8 *buf, UINT32 size)
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 UINT32 sent;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 for (sent = 0; sent < size; )
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 sent += SER_tr_WriteNBytes(SER_LAYER_1, buf + sent,
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 size - sent);
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 #ifdef PSEUDO_MODEM_USB
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 static char poweroff_msg[] = "System: USB unplugged, powering off";
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 #else
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 static char poweroff_msg[] = "System: no keepalive response, powering off";
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 static UINT8 keepalive_msg[2] = {RVT_KEEPALIVE_HEADER, 'Q'};
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 #endif
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 static void keepalive_poweroff(void)
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 UINT8 poweroff_msg_buf[50], *p;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 p = poweroff_msg_buf;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 *p++ = RVT_RV_HEADER;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 *p++ = 0;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 *p++ = 0;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 *p++ = 0;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 *p++ = 0;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 *p++ = RV_TRACE_LEVEL_ERROR;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 strcpy((char *)p, poweroff_msg);
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 keepalive_send(poweroff_msg_buf, strlen(poweroff_msg) + 6);
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 /* do it */
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 ABB_Power_Off();
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 void rvt_keepalive_process(void)
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 SYS_UWORD16 abb_status;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 abb_status = ABB_Read_Status();
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 if (abb_status & CHGPRES) {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 rvt_keepalive_counter = 0;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 return;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 #ifdef PSEUDO_MODEM_USB
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 keepalive_poweroff();
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 #else
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 if (rvt_keepalive_counter >= 3)
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 keepalive_poweroff();
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 else {
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 rvt_keepalive_counter++;
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 keepalive_send(keepalive_msg, sizeof keepalive_msg);
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 #endif
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 }
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104
9ffdfacfe969 implemented pseudo-modem keepalive for C139 and Pirelli targets
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 #endif