FreeCalypso > hg > tcs211-pirelli
view g23m/condat/com/src/driver/vmd.c @ 9:7ee1a8f57933
RVT changes for AT channel support backported from FreeCalypso GSM fw
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 19:02:17 +0000 |
parents | 509db1a7b7b8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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