FreeCalypso > hg > leo2moko-debug
diff g23m/condat/com/src/driver/vmd.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/com/src/driver/vmd.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,456 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-PS +| Modul : DRV_VMD ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : This Module defines the voice memo and recognition +| driver interface for the G23 protocol stack. +| +| This driver is used to control all voice memo and +| voice recognition related procedure. ++----------------------------------------------------------------------------- +*/ + +#ifndef DRV_VMD_C +#define DRV_VMD_C + +#define ENTITY_CST +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include "typedefs.h" +#include "vsi.h" +#include "custom.h" +#include "prim.h" +#include "gsm.h" +#include "tok.h" +#include "cst/cst.h" +#include "gdi.h" +#include "vmd.h" + + +/*==== EXPORT =====================================================*/ +/*==== VARIABLES ==================================================*/ + +drv_SignalCB_Type vmd_signal_callback = NULL; + +#if defined (NEW_FRAME) +EXTERN T_HANDLE hCommL1; +#else +EXTERN T_VSI_CHANDLE hCommL1; +#endif + +/*==== FUNCTIONS ==================================================*/ + +/*==== TYPES ======================================================*/ + +typedef struct T_MMI_VM_RECORD_REQ_V +{ + UBYTE dtx_used; + USHORT d_k_x1_t0; + USHORT d_k_x1_t1; + USHORT d_k_x1_t2; + USHORT d_pe_rep; + USHORT d_pe_off; + USHORT d_se_off; + USHORT d_bu_off; + USHORT d_t0_on; + USHORT d_t0_off; + USHORT d_t1_on; + USHORT d_t1_off; + USHORT d_t2_on; + USHORT d_t2_off; + USHORT * start_address; + USHORT * stop_address; +} T_MMI_VM_RECORD_REQ_V; + +typedef struct T_MMI_VM_PLAY_REQ_V +{ + USHORT * start_address; +} T_MMI_VM_PLAY_REQ_V; + +typedef struct T_MMI_VM_END_PLAY_IND +{ + USHORT * stop_address; +} T_MMI_VM_END_PLAY_IND; + +typedef struct T_MMI_VM_END_RECORD_IND +{ + USHORT * stop_address; +} T_MMI_VM_END_RECORD_IND; + +typedef struct T_MMI_VM_END_PLAY_REQ +{ + UBYTE dummy; +} T_MMI_VM_END_PLAY_REQ; + +typedef struct T_MMI_VM_END_RECORD_REQ +{ + UBYTE dummy; +} T_MMI_VM_END_RECORD_REQ; + +typedef struct +{ + USHORT param1; + USHORT param2; + USHORT param3; + USHORT param4; + USHORT param5; +} +T_MMI_SR_REQ_V; + +typedef struct +{ + UBYTE error_code; + UBYTE index; +} T_MMI_SR_IND_V; + +#define MMI_VM_RECORD_REQ_V 8 +#define MMI_VM_PLAY_REQ_V 9 +#define MMI_VM_END_RECORD_REQ 10 + +#define MMI_SR_REQ_V 110 +#define MMI_SR_IND_V 119 + +#define MMI_VM_END_PLAY_REQ 114 +#define MMI_VM_END_PLAY_IND 115 +#define MMI_VM_END_RECORD_IND 116 + +LOCAL void vmd_mmi_vm_end_record_ind (T_MMI_VM_END_RECORD_IND * vmd_parameter); +LOCAL void vmd_mmi_vm_end_play_ind (T_MMI_VM_END_PLAY_IND * vmd_parameter); +LOCAL void vmd_mmi_sr_end_ind (T_MMI_SR_IND_V * vmd_parameter); + +/*==== CONSTANTS ==================================================*/ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_init | ++--------------------------------------------------------------------+ + + PURPOSE : The function initializes the driverīs internal data. + The function returns DRV_OK in case of a successful + completition. The function returns DRV_INITIALIZED if + the driver has already been initialized and is ready to + be used or is already in use. In case of an initialization + failure, which means the that the driver cannot be used, + the function returns DRV_INITFAILURE. + +*/ + +GLOBAL UBYTE vmd_init (drv_SignalCB_Type in_SignalCBPtr) +{ + vmd_signal_callback = in_SignalCBPtr; /* store call-back function */ + + return DRV_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_exit | ++--------------------------------------------------------------------+ + + PURPOSE : The function is called when the driver functionality is + not longer required. +*/ + +GLOBAL void vmd_exit (void) +{ + vmd_signal_callback = NULL; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_start_voice_memo_recording | ++--------------------------------------------------------------------+ + + PURPOSE : This function is used to start voice memo recording. + The needed parameters are defined in the structure + vmd_start_record_type. + +*/ + +GLOBAL UBYTE vmd_start_voice_memo_recording (vmd_start_record_type * vmd_parameter) +{ + PALLOC (mmi_vm_record_req, MMI_VM_RECORD_REQ_V); + + /* + * copy parameters to send to layer 1 + */ + mmi_vm_record_req->start_address = vmd_parameter->start_address; + mmi_vm_record_req->stop_address = vmd_parameter->stop_address; + mmi_vm_record_req->dtx_used = vmd_parameter->dtx_used; + + switch (vmd_parameter->tone_id) + { + /* case .... + add here the parameter to generate a + tone during dedicated mode. + break; + */ + case 0: /* no tone in idle mode */ + mmi_vm_record_req->d_k_x1_t0 = 0; + mmi_vm_record_req->d_k_x1_t1 = 0; + mmi_vm_record_req->d_k_x1_t2 = 0; + mmi_vm_record_req->d_pe_rep = 0; + mmi_vm_record_req->d_pe_off = 0; + mmi_vm_record_req->d_se_off = 0; + mmi_vm_record_req->d_bu_off = 0; + mmi_vm_record_req->d_t0_on = 0; + mmi_vm_record_req->d_t0_off = 0; + mmi_vm_record_req->d_t1_on = 0; + mmi_vm_record_req->d_t1_off = 0; + mmi_vm_record_req->d_t2_on = 0; + mmi_vm_record_req->d_t2_off = 0; + break; + } + + + PSENDX (L1, mmi_vm_record_req); + + return DRV_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_stop_voice_memo_recording | ++--------------------------------------------------------------------+ + + PURPOSE : This function is used to stop voice memo recording. + +*/ + +GLOBAL UBYTE vmd_stop_voice_memo_recording () +{ + PALLOC (mmi_vm_end_record_req, MMI_VM_END_RECORD_REQ); + + PSENDX (L1, mmi_vm_end_record_req); + + return DRV_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_start_voice_memo_playing | ++--------------------------------------------------------------------+ + + PURPOSE : This function is used to start voice memo playing. + The needed parameters are defined in the structure + vmd_start_play_type. + +*/ + +GLOBAL UBYTE vmd_start_voice_memo_playing (vmd_start_play_type * vmd_parameter) +{ + + PALLOC (mmi_vm_play_req, MMI_VM_PLAY_REQ_V); + + /* + * copy parameters to send to layer 1 + */ + mmi_vm_play_req->start_address = vmd_parameter->start_address; + + PSENDX (L1, mmi_vm_play_req); + + return DRV_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_stop_voice_memo_playing | ++--------------------------------------------------------------------+ + + PURPOSE : This function is used to stop voice memo playing. + +*/ + +GLOBAL UBYTE vmd_stop_voice_memo_playing () +{ + PALLOC (mmi_vm_end_play_req, MMI_VM_END_PLAY_REQ); + + PSENDX (L1, mmi_vm_end_play_req); + + return DRV_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_start_recognition | ++--------------------------------------------------------------------+ + + PURPOSE : This function is used to a speech recognition procedure. + The needed parameters are defined in the structure + vmd_start_recognition_req_type. + +*/ + +GLOBAL UBYTE vmd_start_recognition (vmd_speech_recognition_req_type * vmd_parameter) +{ + PALLOC (mmi_sr_req, MMI_SR_REQ_V); + + /* + * copy parameters to send to layer 1 + * + * NOTE: parameter usage is not clear (missing documents) + */ + mmi_sr_req->param1 = vmd_parameter->i_speaker; + mmi_sr_req->param2 = vmd_parameter->i_action; + mmi_sr_req->param3 = vmd_parameter->i_param1; + mmi_sr_req->param4 = vmd_parameter->i_param2; + + PSENDX (L1, mmi_sr_req); + + return DRV_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_mmi_vm_end_record_ind | ++--------------------------------------------------------------------+ + + PURPOSE : This function is called after reception of the + MMI_VM_END_RECORD_IND primitive from layer 1. + +*/ + +LOCAL void vmd_mmi_vm_end_record_ind (T_MMI_VM_END_RECORD_IND * vmd_parameter) +{ + drv_SignalID_Type signal_params; + + signal_params.SignalType = VMD_END_RECORD; + +#if defined (NEW_FRAME) + + signal_params.SignalType = 0; +//nm +// signal_params.UserData = vmd_parameter; + +#else + signal_params.SignalValue = 0; +//nm +// signal_params.UserData = vmd_parameter; +#endif + + if (vmd_signal_callback NEQ NULL) + (*vmd_signal_callback)(&signal_params); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_mmi_vm_end_play_ind | ++--------------------------------------------------------------------+ + + PURPOSE : This function is called after reception of the + MMI_VM_END_PLAY_IND primitive from layer 1. + +*/ + +LOCAL void vmd_mmi_vm_end_play_ind (T_MMI_VM_END_PLAY_IND * vmd_parameter) +{ + drv_SignalID_Type signal_params; + + signal_params.SignalType = VMD_END_PLAY; + +#if defined (NEW_FRAME) + signal_params.SignalType = 0; +//nm +// signal_params.UserData = vmd_parameter; + +#else + signal_params.SignalValue = 0; +//nm +// signal_params.UserData = vmd_parameter; +#endif + + if (vmd_signal_callback NEQ NULL) + (*vmd_signal_callback)(&signal_params); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_mmi_sr_ind | ++--------------------------------------------------------------------+ + + PURPOSE : This function is called after reception of the + MMI_SR_IND primitive from layer 1. + +*/ + +LOCAL void vmd_mmi_sr_end_ind (T_MMI_SR_IND_V * vmd_parameter) +{ + drv_SignalID_Type signal_params; + + signal_params.SignalType = VMD_SPEECH_RECOGNITION; + +#if defined (NEW_FRAME) + signal_params.SignalType = 0; +//nm +// signal_params.UserData = vmd_parameter; + +#else + signal_params.SignalValue = 0; +//nm +// signal_params.UserData = vmd_parameter; +#endif + + if (vmd_signal_callback NEQ NULL) + (*vmd_signal_callback)(&signal_params); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6103) MODULE : DRV_VMD | +| STATE : code ROUTINE : vmd_primitive | ++--------------------------------------------------------------------+ + + PURPOSE : This function is called from the CST pei module after + reception of a primitive from layer 1. If it is a + VMD primitive it is distributed and the primitive is + freed, else nothing happens. + +*/ + +GLOBAL UBYTE vmd_primitive (USHORT opc, void * data) +{ + switch (opc) + { + case MMI_VM_END_RECORD_IND: + vmd_mmi_vm_end_record_ind ((T_MMI_VM_END_RECORD_IND *)data); + PFREE (data); + return TRUE; + + case MMI_VM_END_PLAY_IND: + vmd_mmi_vm_end_play_ind ((T_MMI_VM_END_PLAY_IND *)data); + PFREE (data); + return TRUE; + + case MMI_SR_IND_V: + vmd_mmi_sr_end_ind ((T_MMI_SR_IND_V *)data); + PFREE (data); + return TRUE; + + } + return FALSE; +} + +#endif