view src/aci2/aci/ati_audio.c @ 226:67fe1b3f4bd7

aci2: added some AT commands for exercising audio functions
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 24 Oct 2016 08:39:11 +0000
parents
children e0b9c21d7908
line wrap: on
line source

/*
 * This ATI module and the AT commands implemented therein are a FreeCalypso
 * addition.  The purpose of these AT commands is to exercise the audio
 * capabilities of the firmware - by using these commands, you should be
 * able to emit sounds from the speaker or record voice from the microphone
 * without needing to be in a call, and without bringing up GSM at all.
 */

#ifndef ATI_AUDIO_C
#define ATI_AUDIO_C

#include "aci_all.h"

#include <ctype.h>
#include <string.h>

#include "aci_cmh.h"
#include "ati_cmd.h"
#include "aci_cmd.h"
#include "aci_io.h"
#include "aci_cmd.h"
#include "l4_tim.h"
#include "line_edit.h"
#include "aci_lst.h"

#include "pcm.h"
#include "audio.h"
#include "aci.h"
#include "rx.h"
#include "pwr.h"
#include "l4_tim.h"

#ifdef GPRS
#ifdef DTI
#include "dti.h"
#include "dti_conn_mng.h"
#include "dti_cntrl_mng.h"
#endif /* DTI */
#include "gaci.h"
#include "gaci_cmh.h"
#include "gaci_cmd.h"
#endif  /* GPRS */

#include "aci_mem.h"
#include "aci_prs.h"

#include "ati_int.h"

#ifndef _SIMULATION_
#include "ffs/ffs.h"
#endif

#ifdef FF_ATI_BAT

#include "typedefs.h"
#include "gdd.h"
#include "bat.h"

#include "ati_bat.h"

#endif /*FF_ATI_BAT*/

#include "audio/audio_api.h"
#include "audio.h"	/* Condat */

/* AT@SND - emit sound through Condat API */
GLOBAL T_ATI_RSLT atAtSND ( char *cl, UBYTE srcId )
{
	UBYTE sound_id = TONES_KEYBEEP;

	cl = parse(cl, "x", &sound_id);
	audio_PlaySoundID(AUDIO_SPEAKER, sound_id, 0, AUDIO_PLAY_ONCE);
	return (ATI_CMPL);
}

static void audio_callback(void *event_from_audio)
{
	/* do nothing at this time */
}

/* AT@E1 - play an E1 format melody */
GLOBAL T_ATI_RSLT atAtE1 ( char *cl, UBYTE srcId )
{
	T_AUDIO_MELODY_E1_PARAMETER e1_param;
	T_RV_RETURN return_path;

	e1_param.melody_name[0] = 0;
	cl = parse(cl, "s", (LONG)(sizeof(e1_param.melody_name) - 1),
		   e1_param.melody_name);
	if (!e1_param.melody_name[0])
		return (ATI_FAIL);
	e1_param.loopback = AUDIO_MELODY_NO_LOOPBACK;
	e1_param.melody_mode = AUDIO_MELODY_NORMAL_MODE;

	return_path.addr_id        = NULL;
	return_path.callback_func  = audio_callback;
	if (audio_melody_E1_start(&e1_param, return_path) == AUDIO_OK)
		return (ATI_CMPL);
	else
		return (ATI_FAIL);
}

/* AT@E2 - play an E2 format melody */
GLOBAL T_ATI_RSLT atAtE2 ( char *cl, UBYTE srcId )
{
	T_AUDIO_MELODY_E2_PARAMETER e2_param;
	T_RV_RETURN return_path;

	e2_param.melody_E2_name[0] = 0;
	cl = parse(cl, "s", (LONG)(sizeof(e2_param.melody_E2_name) - 1),
		   e2_param.melody_E2_name);
	if (!e2_param.melody_E2_name[0])
		return (ATI_FAIL);
	e2_param.E2_loopback = AUDIO_MELODY_NO_LOOPBACK;
	e2_param.melody_E2_mode = AUDIO_MELODY_NORMAL_MODE;

	return_path.addr_id        = NULL;
	return_path.callback_func  = audio_callback;
	if (audio_melody_E2_start(&e2_param, return_path) == AUDIO_OK)
		return (ATI_CMPL);
	else
		return (ATI_FAIL);
}

/* AT@E2LSI - load melody E2 instrument list file */
GLOBAL T_ATI_RSLT atAtE2LSI ( char *cl, UBYTE srcId )
{
	T_AUDIO_MELODY_E2_LOAD_FILE_INSTR_PARAMETER e2_lsi_param;

	e2_lsi_param.melody_E2_file_name[0] = 0;
	cl = parse(cl, "s", (LONG)(sizeof(e2_lsi_param.melody_E2_file_name)-1),
		   e2_lsi_param.melody_E2_file_name);
	if (!e2_lsi_param.melody_E2_file_name[0])
		return (ATI_FAIL);

	if (audio_melody_E2_load_file_instruments(&e2_lsi_param) == AUDIO_OK)
		return (ATI_CMPL);
	else
		return (ATI_FAIL);
}

#endif /* ATI_AUDIO_C */