FreeCalypso > hg > freecalypso-sw
diff gsm-fw/bsp/abb+spi/spi_api.c @ 148:63750f70796d
gsm-fw/bsp/abb+spi: initial import from the Leonardo TCS211 version
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sat, 16 Nov 2013 19:03:37 +0000 |
parents | |
children | e48ea5875df7 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/bsp/abb+spi/spi_api.c Sat Nov 16 19:03:37 2013 +0000 @@ -0,0 +1,227 @@ +/********************************************************************************* +* +* File Name: spi_api.c +* +* Bridge functions used to send events to the SPI task +* +* (C) Texas Instruments, all rights reserved +* +* Version number: 0.1 Date: 25-September-2000 +* +* History: 0.1 - Created by Candice Bazanegue +* +* Author: +* +*********************************************************************************/ + +#include "rvf/rvf_api.h" +#include "spi/spi_api.h" +#include "spi/spi_env.h" +#include "spi/spi_process.h" +#include "rvm/rvm_use_id_list.h" + + + +/********************************************************************************/ +/* */ +/* Function Name: spi_abb_read */ +/* */ +/********************************************************************************/ +T_RV_RET spi_abb_read(UINT16 page, UINT16 address, CALLBACK_FUNC_U16 CallBack) +{ + T_SPI_READ *msgPtr; + + /* check if the driver has been started */ + if (SPI_GBL_INFO_PTR == NULL) + { + rvf_send_trace("ABB read not possible. Reason: SPI task not started",51, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + if(SPI_GBL_INFO_PTR->SpiTaskReady == FALSE) + { + rvf_send_trace("ABB read not possible. Reason: SPI Task not ready",49, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + rvf_send_trace("SPI_ABB_READ",12, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + + if (rvf_get_buf (SPI_GBL_INFO_PTR->prim_id, sizeof (T_SPI_READ),(void **) &msgPtr) == RVF_RED) + { + rvf_send_trace ("SPI ERROR: ABB read not possible. Reason: Not enough memory", + 59, + NULL_PARAM, + RV_TRACE_LEVEL_ERROR, + SPI_USE_ID); + + return (RV_MEMORY_ERR); + } + + (msgPtr->os_hdr).msg_id = SPI_ABB_READ_EVT; + (msgPtr->os_hdr).dest_addr_id = SPI_GBL_INFO_PTR->addr_id; + (msgPtr->os_hdr).callback_func = (CALLBACK_FUNC) CallBack; + msgPtr->page = page; + msgPtr->address = address; + + rvf_send_msg (SPI_GBL_INFO_PTR->addr_id, + msgPtr); + + return (RV_OK); +} + + + + +/********************************************************************************/ +/* */ +/* Function Name: spi_abb_write */ +/* */ +/********************************************************************************/ +T_RV_RET spi_abb_write(UINT16 page, UINT16 address, UINT16 data) +{ + T_SPI_WRITE *msgPtr; + + /* check if the driver has been started */ + if (SPI_GBL_INFO_PTR == NULL) + { + rvf_send_trace("ABB write not possible. Reason: SPI task not started",52, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + if(SPI_GBL_INFO_PTR->SpiTaskReady == FALSE) + { + rvf_send_trace("ABB write not possible. Reason: SPI Task not ready",50, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + if (rvf_get_buf (SPI_GBL_INFO_PTR->prim_id, sizeof (T_SPI_WRITE),(void **) &msgPtr) == RVF_RED) + { + rvf_send_trace ("SPI ERROR: ABB write not possible. Reason: Not enough memory", + 60, + NULL_PARAM, + RV_TRACE_LEVEL_ERROR, + SPI_USE_ID); + + return (RV_MEMORY_ERR); + } + + (msgPtr->os_hdr).msg_id = SPI_ABB_WRITE_EVT; + (msgPtr->os_hdr).dest_addr_id = SPI_GBL_INFO_PTR->addr_id; + (msgPtr->os_hdr).callback_func = NULL; + msgPtr->page = page; + msgPtr->address = address; + msgPtr->data = data; + + rvf_send_msg (SPI_GBL_INFO_PTR->addr_id, msgPtr); + + return (RV_OK); +} + + + + +/********************************************************************************/ +/* */ +/* Function Name: spi_abb_conf_ADC */ +/* */ +/********************************************************************************/ +T_RV_RET spi_abb_conf_ADC(UINT16 channels, UINT16 itval) +{ + T_SPI_ABB_CONF_ADC *msgPtr; + + /* check if the driver has been started */ + if (SPI_GBL_INFO_PTR == NULL) + { + rvf_send_trace("ABB conf ADC not possible. Reason: SPI task not started",55, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + if(SPI_GBL_INFO_PTR->SpiTaskReady == FALSE) + { + rvf_send_trace("ABB conf ADC not possible. Reason: SPI Task not ready",53, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + rvf_send_trace("SPI_ABB_CONF_ADC",16, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + + if (rvf_get_buf (SPI_GBL_INFO_PTR->prim_id, sizeof (T_SPI_ABB_CONF_ADC),(void **) &msgPtr) == RVF_RED) + { + rvf_send_trace ("SPI ERROR: ABB conf ADC not possible. Reason: Not enough memory", + 63, + NULL_PARAM, + RV_TRACE_LEVEL_ERROR, + SPI_USE_ID); + + return (RV_MEMORY_ERR); + } + + (msgPtr->os_hdr).msg_id = SPI_ABB_CONF_ADC_EVT; + (msgPtr->os_hdr).dest_addr_id = SPI_GBL_INFO_PTR->addr_id; + (msgPtr->os_hdr).callback_func = NULL; + msgPtr->channels = channels; + msgPtr->itval = itval; + + rvf_send_msg (SPI_GBL_INFO_PTR->addr_id, msgPtr); + + return (RV_OK); +} + + + +/********************************************************************************/ +/* */ +/* Function Name: spi_abb_read_ADC */ +/* */ +/********************************************************************************/ +T_RV_RET spi_abb_read_ADC(UINT16 *Buff, CALLBACK_FUNC_NO_PARAM CallBack) +{ + T_SPI_ABB_READ_ADC *msgPtr; + + /* check if the driver has been started */ + if (SPI_GBL_INFO_PTR == NULL) + { + rvf_send_trace("ABB read ADC not possible. Reason: SPI task not started",55, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + if(SPI_GBL_INFO_PTR->SpiTaskReady == FALSE) + { + rvf_send_trace("ABB conf ADC not possible. Reason: SPI Task not ready",53, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + return (RVM_NOT_READY); + } + + rvf_send_trace("SPI_ABB_READ_ADC",16, NULL_PARAM, + RV_TRACE_LEVEL_WARNING, SPI_USE_ID); + + if (rvf_get_buf (SPI_GBL_INFO_PTR->prim_id, sizeof (T_SPI_ABB_READ_ADC),(void **) &msgPtr) == RVF_RED) + { + rvf_send_trace ("SPI ERROR: ABB read ADC not possible. Reason: Not enough memory", + 63, + NULL_PARAM, + RV_TRACE_LEVEL_ERROR, + SPI_USE_ID); + + return (RV_MEMORY_ERR); + } + + (msgPtr->os_hdr).msg_id = SPI_ABB_READ_ADC_EVT; + (msgPtr->os_hdr).dest_addr_id = SPI_GBL_INFO_PTR->addr_id; + (msgPtr->os_hdr).callback_func = NULL; + msgPtr->Buff = Buff; + msgPtr->callback_func = CallBack; + + rvf_send_msg (SPI_GBL_INFO_PTR->addr_id, msgPtr); + + return (RV_OK); +} +