mirror of git://git.sysmocom.de/ofono
Add API stubs for unsolicited / final responses
This commit is contained in:
parent
58e3d14651
commit
cdc13c40b6
|
@ -33,6 +33,8 @@
|
||||||
#include "gatserver.h"
|
#include "gatserver.h"
|
||||||
|
|
||||||
#define BUF_SIZE 4096
|
#define BUF_SIZE 4096
|
||||||
|
/* <cr><lf> + the max length of information text + <cr><lf> */
|
||||||
|
#define MAX_TEXT_SIZE 2052
|
||||||
/* #define WRITE_SCHEDULER_DEBUG 1 */
|
/* #define WRITE_SCHEDULER_DEBUG 1 */
|
||||||
|
|
||||||
enum ParserState {
|
enum ParserState {
|
||||||
|
@ -156,11 +158,11 @@ static void send_common(GAtServer *server, const char *buf, unsigned int len)
|
||||||
g_at_server_wakeup_writer(server);
|
g_at_server_wakeup_writer(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void g_at_server_send_final(GAtServer *server, GAtServerResult result)
|
static void send_result_common(GAtServer *server, const char *result)
|
||||||
|
|
||||||
{
|
{
|
||||||
struct v250_settings v250 = server->v250;
|
struct v250_settings v250 = server->v250;
|
||||||
const char *result_str = server_result_to_string(result);
|
char buf[MAX_TEXT_SIZE];
|
||||||
char buf[1024];
|
|
||||||
char t = v250.s3;
|
char t = v250.s3;
|
||||||
char r = v250.s4;
|
char r = v250.s4;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
|
@ -168,19 +170,70 @@ static void g_at_server_send_final(GAtServer *server, GAtServerResult result)
|
||||||
if (v250.quiet)
|
if (v250.quiet)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (result_str == NULL)
|
if (result == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (v250.is_v1)
|
if (v250.is_v1)
|
||||||
len = snprintf(buf, sizeof(buf), "%c%c%s%c%c", t, r, result_str,
|
len = snprintf(buf, sizeof(buf), "%c%c%s%c%c", t, r, result,
|
||||||
t, r);
|
t, r);
|
||||||
else
|
else
|
||||||
len = snprintf(buf, sizeof(buf), "%u%c", (unsigned int) result,
|
len = snprintf(buf, sizeof(buf), "%s%c", result,
|
||||||
t);
|
t);
|
||||||
|
|
||||||
send_common(server, buf, MIN(len, sizeof(buf)-1));
|
send_common(server, buf, MIN(len, sizeof(buf)-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void g_at_server_send_final(GAtServer *server, GAtServerResult result)
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
if (server->v250.is_v1)
|
||||||
|
sprintf(buf, "%s", server_result_to_string(result));
|
||||||
|
else
|
||||||
|
sprintf(buf, "%u", (unsigned int)result);
|
||||||
|
|
||||||
|
send_result_common(server, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void g_at_server_send_ext_final(GAtServer *server, const char *result)
|
||||||
|
{
|
||||||
|
send_result_common(server, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void g_at_server_send_intermediate(GAtServer *server, const char *result)
|
||||||
|
{
|
||||||
|
send_result_common(server, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void g_at_server_send_unsolicited(GAtServer *server, const char *result)
|
||||||
|
{
|
||||||
|
send_result_common(server, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void g_at_server_send_info_text(GAtServer *server, GSList *text)
|
||||||
|
{
|
||||||
|
char buf[MAX_TEXT_SIZE];
|
||||||
|
char t = server->v250.s3;
|
||||||
|
char r = server->v250.s4;
|
||||||
|
unsigned int len;
|
||||||
|
GSList *l;
|
||||||
|
|
||||||
|
if (!text)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (l = text; l; l = l->next) {
|
||||||
|
char *line = l->data;
|
||||||
|
if (!line)
|
||||||
|
return;
|
||||||
|
|
||||||
|
len = snprintf(buf, sizeof(buf), "%c%c%s", t, r, line);
|
||||||
|
send_common(server, buf, MIN(len, sizeof(buf)-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
len = snprintf(buf, sizeof(buf), "%c%c", t, r);
|
||||||
|
send_common(server, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
static inline gboolean is_extended_command_prefix(const char c)
|
static inline gboolean is_extended_command_prefix(const char c)
|
||||||
{
|
{
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
|
@ -87,6 +87,23 @@ gboolean g_at_server_register(GAtServer *server, char *prefix,
|
||||||
GDestroyNotify destroy_notify);
|
GDestroyNotify destroy_notify);
|
||||||
gboolean g_at_server_unregister(GAtServer *server, const char *prefix);
|
gboolean g_at_server_unregister(GAtServer *server, const char *prefix);
|
||||||
|
|
||||||
|
/* Send a final result code. E.g. G_AT_SERVER_RESULT_NO_DIALTONE */
|
||||||
|
void g_at_server_send_final(GAtServer *server, GAtServerResult result);
|
||||||
|
|
||||||
|
/* Send an extended final result code. E.g. +CME ERROR: SIM failure. */
|
||||||
|
void g_at_server_send_ext_final(GAtServer *server, const char *result);
|
||||||
|
|
||||||
|
/* Send an intermediate result code to report the progress. E.g. CONNECT */
|
||||||
|
void g_at_server_send_intermediate(GAtServer *server, const char *result);
|
||||||
|
|
||||||
|
/* Send an unsolicited result code. E.g. RING */
|
||||||
|
void g_at_server_send_unsolicited(GAtServer *server, const char *result);
|
||||||
|
|
||||||
|
/* Send an information text. The text could contain multiple lines. Each
|
||||||
|
* line, including line terminators, should not exceed 2048 characters.
|
||||||
|
*/
|
||||||
|
void g_at_server_send_info_text(GAtServer *server, GSList *text);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue