/* * ANT Stack testing appication * * Copyright 2009 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. */ #define _GNU_SOURCE #include #include #include #include #include #include #include "ant_native.h" #include "ant_types.h" #include "ant_log.h" #undef LOG_TAG #define LOG_TAG "antradio_app" /* transient stage */ typedef ANTStatus ant_status; void app_ANT_rx_callback(ANT_U8 ucLen, ANT_U8* pucData); void app_ANT_state_callback(ANTRadioEnabledStatus uiNewState); static int Ant_Create(void) { ANTStatus antStatus; //register_antsig_handlers(); antStatus = ant_init(); if (antStatus) { printf("failed to init ANT rx stacki\n"); goto CLEANUP; } antStatus = set_ant_rx_callback(app_ANT_rx_callback); if (antStatus) { printf("failed to set ANT rx callback"); goto CLEANUP; } antStatus = set_ant_state_callback(app_ANT_state_callback); if (antStatus) { printf("failed to set ANT rx callback"); goto CLEANUP; } return antStatus; CLEANUP: return ANT_STATUS_FAILED; } void ProcessCommand(char cCmd) { ANT_U8 TxMessage[256]; switch (cCmd) { case 'V': TxMessage[0] = 0x02; //Size TxMessage[1] = 0x4D; //MESG_REQUEST_ID TxMessage[2] = 0x00; //Ch0 TxMessage[3] = 0x3E; ant_tx_message(4,TxMessage); break; case 'R': TxMessage[0] = 0x01; //Size TxMessage[1] = 0x4A; //MESG_RESET_ID TxMessage[2] = 0x00; //Ch0 ant_tx_message(3,TxMessage); break; case 'K': printf("Hard Reset returned: %d\n", ant_radio_hard_reset()); break; case 'H': //Normally we will not blindly send commands like this and actually check for responses before sending the next command, but this is just for a quick test. ProcessCommand('R'); //Reset chip ProcessCommand('A'); //Assign channel ProcessCommand('F'); //Set RF Freq ProcessCommand('I'); //Set Channel ID ProcessCommand('P'); //Set Channel Period ProcessCommand('O'); //Open Channel break; case 'A': TxMessage[0] = 0x03; //Size TxMessage[1] = 0x42; //MESG_ASSIGN_ID TxMessage[2] = 0x00; //Ch0 TxMessage[3] = 0x00; //Assignment Params (Rx channel) TxMessage[4] = 0x01; //Network 1 (ANT+) ant_tx_message(5,TxMessage); break; case 'F': TxMessage[0] = 0x02; //Size TxMessage[1] = 0x45; //MESG_CHANNEL_RADIO_FREQ_ID TxMessage[2] = 0x00; //Ch0 TxMessage[3] = 57; //2.457GHz ant_tx_message(4,TxMessage); break; case 'I': TxMessage[0] = 0x05; //Size TxMessage[1] = 0x51; //MESG_CHANNEL_ID_ID TxMessage[2] = 0x00; //Ch0 TxMessage[3] = 0x00; //Wildcard Device Number TxMessage[4] = 0x00; //Wildcard Device Number TxMessage[5] = 0x78; //Set HRM Device Type TxMessage[6] = 0x00; //Wildcard Transmission Type ant_tx_message(7,TxMessage); break; case 'P': TxMessage[0] = 0x03; //Size TxMessage[1] = 0x43; //MESG_CHANNEL_MESG_PERIOD_ID TxMessage[2] = 0x00; //Ch0 TxMessage[3] = 0x86; // TxMessage[4] = 0x1F; // HRM MESG Peroid 0x1F86 (8070) ant_tx_message(5,TxMessage); break; case 'O': TxMessage[0] = 0x01; //Size TxMessage[1] = 0x4B; //MESG_OPEN_CHANNEL__ID TxMessage[2] = 0x00; //Ch0 ant_tx_message(3,TxMessage); break; case 'E': printf("Enable returned: %d\n", ant_enable_radio()); break; case 'D': printf("Disable returned: %d\n", ant_disable_radio()); break; case 'S': printf("State is: %d\n", ant_radio_enabled_status()); break; case '1': TxMessage[0] = 0x0A; //Size TxMessage[1] = 0x01; //Enable TxMessage[2] = 0x00; //Code upload TxMessage[3] = 0x00; TxMessage[4] = 0x00; TxMessage[5] = 0x00; TxMessage[6] = 0x00; TxMessage[7] = 0x00; TxMessage[8] = 0x00; TxMessage[9] = 0x00; TxMessage[10] = 0x00; //ANT_CORE_Send_VS_Command(0xFDD0, 11, TxMessage); printf("Not Implemented\n"); break; case '2': TxMessage[0] = 0x00; //Size //ANT_CORE_Send_VS_Command(0xFF22, 1, TxMessage); printf("Not Implemented\n"); break; case 'X': printf("Exiting\n"); break; default: printf("Invalid command: %#02x\n", cCmd); break; } } void app_ANT_rx_callback(ANT_U8 ucLen, ANT_U8* pucData) { ANT_U8 i; for(i=0; i