FreeCalypso > hg > fc-selenite
diff src/g23m-aci/gdd_dio/gdd_dio_drxf.c @ 1:d393cd9bb723
src/g23m-*: initial import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:40:46 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-aci/gdd_dio/gdd_dio_drxf.c Sun Jul 15 04:40:46 2018 +0000 @@ -0,0 +1,97 @@ +/* ++----------------------------------------------------------------------------- +| File : gdd_dio_drxf.c ++----------------------------------------------------------------------------- +| 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 modul is part of the entity gdd_dio and implements the +| drx service functions. ++----------------------------------------------------------------------------- +*/ + + +#define ENTITY_GDD_DIO + +/*==== INCLUDES =============================================================*/ + +#include "typedefs.h" /* to get Condat data types */ +#include "vsi.h" /* to get a lot of macros */ + +/* GDD stuff */ +#include "gdd_dio.h" /* to get the global entity definitions */ +#include "gdd_dio_data.h" /* to get internal data structures */ + +#include "gdd_dio_con_mgr.h" +#include "gdd_dio_queue.h" +#include "gdd_dio_drxf.h" +#include "gdd_dio_txf.h" + + +/*==== CONST ================================================================*/ + +/*==== LOCAL VARS ===========================================================*/ + +/*==== PRIVATE FUNCTIONS ====================================================*/ + +/*==== PUBLIC FUNCTIONS =====================================================*/ + + +GLOBAL void gdd_dio_drx_sig_receive_data(T_GDD_CON_HANDLE con_handle, T_dio_buffer * buf) +{ + T_GDD_DIO_CON_DATA * con_data; + GDD_RESULT result; + + TRACE_FUNCTION("[GDD] gdd_dio_drx_sig_receive_data()"); + + con_data = get_con_data_from_handle(con_handle); + + result = con_data->rcv_cb(con_handle, (T_GDD_BUF *)buf); + if(result EQ GDD_OK) + { + gdd_dio_send_signal_to_dio(con_data, DRV_SIGTYPE_WRITE); + } + else + { + /* Do nothing - the client must come back to use by calling + gdd_signal_ready_rcv. */ + } +} + +GLOBAL void gdd_dio_drx_ready_to_rcv(T_GDD_CON_HANDLE con_handle) +{ + T_GDD_DIO_CON_DATA * con_data; + T_dio_buffer * buf; + GDD_RESULT result; + + TRACE_FUNCTION("[GDD] gdd_dio_drx_ready_to_rcv()"); + + con_data = get_con_data_from_handle(con_handle); + + if(gdd_dio_queue_peek_next_for_dequeue(&(con_data->tx_queue), &buf)) + { + /* Send data to client */ + result = con_data->rcv_cb(con_handle, (T_GDD_BUF *)buf); + if(result EQ GDD_OK) + { + gdd_dio_send_signal_to_dio(con_data, DRV_SIGTYPE_WRITE); + } + else + { + /* Do nothing - the client must come back again later by calling + gdd_signal_ready_rcv. */ + } + } + else + { + TRACE_ERROR("[GDD] Failed to peek buffer"); + } +}