| /* |
| * ANT Stack |
| * |
| * Copyright 2011 Dynastream Innovations |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| /*******************************************************************************\ |
| * |
| * FILE NAME: ant_rx_chardev.h |
| * |
| * BRIEF: |
| * This file defines the receive thread function, the ant_rx_thread_info_t |
| * type for storing the -configuration- <state> of the receive thread, the |
| * ant_channel_info_t type for storing a channel's (transport path) |
| * configuration, and an enumeration of all ANT channels (transport paths). |
| * |
| * |
| \*******************************************************************************/ |
| |
| #ifndef __ANT_RX_NATIVE_H |
| #define __ANT_RX_NATIVE_H |
| |
| #include "ant_native.h" |
| #include "ant_hci_defines.h" |
| |
| /* same as HCI_MAX_EVENT_SIZE from hci.h, but hci.h is not included for vfs */ |
| #define ANT_HCI_MAX_MSG_SIZE 260 |
| |
| #define ANT_MSG_SIZE_OFFSET ((ANT_U8)0) |
| #define ANT_MSG_ID_OFFSET ((ANT_U8)1) |
| #define ANT_MSG_DATA_OFFSET ((ANT_U8)2) |
| |
| /* This struct defines the info passed to an rx thread */ |
| typedef struct { |
| /* Device path */ |
| const char *pcDevicePath; |
| /* File descriptor to read from */ |
| int iFd; |
| /* Callback to call with ANT packet */ |
| ANTNativeANTEventCb fnRxCallback; |
| /* Flow control response if channel supports it */ |
| ANT_U8 ucFlowControlResp; |
| /* Handle to flow control condition */ |
| pthread_cond_t *pstFlowControlCond; |
| /* Handle to flow control mutex */ |
| pthread_mutex_t *pstFlowControlLock; |
| #ifdef ANT_FLOW_RESEND |
| /* Length of message to resend on request from chip */ |
| ANT_U8 ucResendMessageLength; |
| /* The message to resend on request from chip */ |
| ANT_U8 *pucResendMessage; |
| #endif // ANT_FLOW_RESEND |
| } ant_channel_info_t; |
| |
| typedef enum { |
| #ifdef ANT_DEVICE_NAME // Single transport path |
| SINGLE_CHANNEL, |
| #else // Separate data/command paths |
| DATA_CHANNEL, |
| COMMAND_CHANNEL, |
| #endif // Separate data/command paths |
| NUM_ANT_CHANNELS |
| } ant_channel_type; |
| |
| typedef struct { |
| /* Thread handle */ |
| pthread_t stRxThread; |
| /* Exit condition */ |
| ANT_U8 ucRunThread; |
| /* Set state as resetting override */ |
| ANT_U8 ucChipResetting; |
| /* Handle to state change lock for crash cleanup */ |
| pthread_mutex_t *pstEnabledStatusLock; |
| /* ANT channels */ |
| ant_channel_info_t astChannels[NUM_ANT_CHANNELS]; |
| /* Event file descriptor used to interrupt the poll() loop in the rx thread. */ |
| int iRxShutdownEventFd; |
| /* Indicates whether thread is waiting for a keepalive response. */ |
| ANT_BOOL bWaitingForKeepaliveResponse; |
| } ant_rx_thread_info_t; |
| |
| extern ANTNativeANTStateCb g_fnStateCallback; // TODO State callback should be inside ant_rx_thread_info_t. |
| |
| /* This is the rx thread function. It loops reading ANT packets until told to |
| * exit */ |
| void *fnRxThread(void *ant_rx_thread_info); |
| |
| #endif /* ifndef __ANT_RX_NATIVE_H */ |
| |