found irext example project
This commit is contained in:
345
CC25XX/ti/BLE-CC254x/Projects/ble/common/cc2540/OnBoard.c
Normal file
345
CC25XX/ti/BLE-CC254x/Projects/ble/common/cc2540/OnBoard.c
Normal file
@@ -0,0 +1,345 @@
|
||||
/**************************************************************************************************
|
||||
Filename: OnBoard.c
|
||||
Revised: $Date: 2008-03-18 15:14:17 -0700 (Tue, 18 Mar 2008) $
|
||||
Revision: $Revision: 16604 $
|
||||
|
||||
Description: This file contains the UI and control for the
|
||||
peripherals on the EVAL development board
|
||||
Notes: This file targets the Chipcon CC2430DB/CC2430EB
|
||||
|
||||
|
||||
Copyright 2005-2012 Texas Instruments Incorporated. All rights reserved.
|
||||
|
||||
IMPORTANT: Your use of this Software is limited to those specific rights
|
||||
granted under the terms of a software license agreement between the user
|
||||
who downloaded the software, his/her employer (which must be your employer)
|
||||
and Texas Instruments Incorporated (the "License"). You may not use this
|
||||
Software unless you agree to abide by the terms of the License. The License
|
||||
limits your use, and you acknowledge, that the Software may not be modified,
|
||||
copied or distributed unless embedded on a Texas Instruments microcontroller
|
||||
or used solely and exclusively in conjunction with a Texas Instruments radio
|
||||
frequency transceiver, which is integrated into your product. Other than for
|
||||
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
|
||||
works of, modify, distribute, perform, display or sell this Software and/or
|
||||
its documentation for any purpose.
|
||||
|
||||
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
|
||||
PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
||||
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
|
||||
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
|
||||
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
|
||||
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
|
||||
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
|
||||
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
|
||||
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
|
||||
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
|
||||
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
|
||||
|
||||
Should you have any questions regarding your right to use this Software,
|
||||
contact Texas Instruments Incorporated at www.TI.com.
|
||||
**************************************************************************************************/
|
||||
|
||||
/*********************************************************************
|
||||
* INCLUDES
|
||||
*/
|
||||
#include "bcomdef.h"
|
||||
#include "OnBoard.h"
|
||||
#include "OSAL.h"
|
||||
#include "OnBoard.h"
|
||||
|
||||
#include "hal_led.h"
|
||||
#include "hal_key.h"
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* MACROS
|
||||
*/
|
||||
|
||||
/*********************************************************************
|
||||
* CONSTANTS
|
||||
*/
|
||||
|
||||
// Task ID not initialized
|
||||
#define NO_TASK_ID 0xFF
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* TYPEDEFS
|
||||
*/
|
||||
|
||||
/*********************************************************************
|
||||
* GLOBAL VARIABLES
|
||||
*/
|
||||
uint8 OnboardKeyIntEnable;
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* EXTERNAL VARIABLES
|
||||
*/
|
||||
|
||||
/*********************************************************************
|
||||
* EXTERNAL FUNCTIONS
|
||||
*/
|
||||
extern uint8 LL_PseudoRand( uint8 *randData, uint8 dataLen );
|
||||
|
||||
#if defined FEATURE_ABL
|
||||
#include "..\..\util\ABL\app\sbl_app.c"
|
||||
#elif defined FEATURE_SBL
|
||||
#include "..\..\util\SBL\app\sbl_app.c"
|
||||
#elif defined FEATURE_EBL
|
||||
#include "..\..\util\EBL\app\sbl_app.c"
|
||||
#elif defined FEATURE_UBL_MSD
|
||||
#include "..\..\util\UBL\soc_8051\usb_msd\app\ubl_app.c"
|
||||
#else
|
||||
void appForceBoot(void);
|
||||
#endif
|
||||
|
||||
/*********************************************************************
|
||||
* LOCAL VARIABLES
|
||||
*/
|
||||
|
||||
// Registered keys task ID, initialized to NOT USED.
|
||||
static uint8 registeredKeysTaskID = NO_TASK_ID;
|
||||
|
||||
/*********************************************************************
|
||||
* @fn InitBoard()
|
||||
* @brief Initialize the CC2540DB Board Peripherals
|
||||
* @param level: COLD,WARM,READY
|
||||
* @return None
|
||||
*/
|
||||
void InitBoard( uint8 level )
|
||||
{
|
||||
if ( level == OB_COLD )
|
||||
{
|
||||
// Interrupts off
|
||||
osal_int_disable( INTS_ALL );
|
||||
// Turn all LEDs off
|
||||
HalLedSet( HAL_LED_ALL, HAL_LED_MODE_OFF );
|
||||
// Check for Brown-Out reset
|
||||
// ChkReset();
|
||||
}
|
||||
else // !OB_COLD
|
||||
{
|
||||
/* Initialize Key stuff */
|
||||
OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;
|
||||
//OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
|
||||
HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn Onboard_rand
|
||||
*
|
||||
* @brief Random number generator
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return uint16 - new random number
|
||||
*
|
||||
*********************************************************************/
|
||||
uint16 Onboard_rand( void )
|
||||
{
|
||||
uint16 randNum;
|
||||
|
||||
LL_PseudoRand( (uint8 *)&randNum, 2 );
|
||||
|
||||
return ( randNum );
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn _itoa
|
||||
*
|
||||
* @brief convert a 16bit number to ASCII
|
||||
*
|
||||
* @param num -
|
||||
* buf -
|
||||
* radix -
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
*********************************************************************/
|
||||
void _itoa(uint16 num, uint8 *buf, uint8 radix)
|
||||
{
|
||||
char c,i;
|
||||
uint8 *p, rst[5];
|
||||
|
||||
p = rst;
|
||||
for ( i=0; i<5; i++,p++ )
|
||||
{
|
||||
c = num % radix; // Isolate a digit
|
||||
*p = c + (( c < 10 ) ? '0' : '7'); // Convert to Ascii
|
||||
num /= radix;
|
||||
if ( !num )
|
||||
break;
|
||||
}
|
||||
|
||||
for ( c=0 ; c<=i; c++ )
|
||||
*buf++ = *p--; // Reverse character order
|
||||
|
||||
*buf = '\0';
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* "Keyboard" Support
|
||||
*********************************************************************/
|
||||
|
||||
/*********************************************************************
|
||||
* Keyboard Register function
|
||||
*
|
||||
* The keyboard handler is setup to send all keyboard changes to
|
||||
* one task (if a task is registered).
|
||||
*
|
||||
* If a task registers, it will get all the keys. You can change this
|
||||
* to register for individual keys.
|
||||
*********************************************************************/
|
||||
uint8 RegisterForKeys( uint8 task_id )
|
||||
{
|
||||
// Allow only the first task
|
||||
if ( registeredKeysTaskID == NO_TASK_ID )
|
||||
{
|
||||
registeredKeysTaskID = task_id;
|
||||
return ( true );
|
||||
}
|
||||
else
|
||||
return ( false );
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn OnBoard_SendKeys
|
||||
*
|
||||
* @brief Send "Key Pressed" message to application.
|
||||
*
|
||||
* @param keys - keys that were pressed
|
||||
* state - shifted
|
||||
*
|
||||
* @return status
|
||||
*********************************************************************/
|
||||
uint8 OnBoard_SendKeys( uint8 keys, uint8 state )
|
||||
{
|
||||
keyChange_t *msgPtr;
|
||||
|
||||
if ( registeredKeysTaskID != NO_TASK_ID )
|
||||
{
|
||||
// Send the address to the task
|
||||
msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );
|
||||
if ( msgPtr )
|
||||
{
|
||||
msgPtr->hdr.event = KEY_CHANGE;
|
||||
msgPtr->state = state;
|
||||
msgPtr->keys = keys;
|
||||
|
||||
osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );
|
||||
}
|
||||
return ( SUCCESS );
|
||||
}
|
||||
else
|
||||
return ( FAILURE );
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn OnBoard_KeyCallback
|
||||
*
|
||||
* @brief Callback service for keys
|
||||
*
|
||||
* @param keys - keys that were pressed
|
||||
* state - shifted
|
||||
*
|
||||
* @return void
|
||||
*********************************************************************/
|
||||
void OnBoard_KeyCallback ( uint8 keys, uint8 state )
|
||||
{
|
||||
uint8 shift;
|
||||
(void)state;
|
||||
|
||||
// shift key (S1) is used to generate key interrupt
|
||||
// applications should not use S1 when key interrupt is enabled
|
||||
shift = (OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE) ? false : ((keys & HAL_KEY_SW_6) ? true : false);
|
||||
|
||||
if ( OnBoard_SendKeys( keys, shift ) != SUCCESS )
|
||||
{
|
||||
// Process SW1 here
|
||||
if ( keys & HAL_KEY_SW_1 ) // Switch 1
|
||||
{
|
||||
}
|
||||
// Process SW2 here
|
||||
if ( keys & HAL_KEY_SW_2 ) // Switch 2
|
||||
{
|
||||
}
|
||||
// Process SW3 here
|
||||
if ( keys & HAL_KEY_SW_3 ) // Switch 3
|
||||
{
|
||||
}
|
||||
// Process SW4 here
|
||||
if ( keys & HAL_KEY_SW_4 ) // Switch 4
|
||||
{
|
||||
}
|
||||
// Process SW5 here
|
||||
if ( keys & HAL_KEY_SW_5 ) // Switch 5
|
||||
{
|
||||
}
|
||||
// Process SW6 here
|
||||
if ( keys & HAL_KEY_SW_6 ) // Switch 6
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/* If any key is currently pressed down and interrupt
|
||||
is still enabled, disable interrupt and switch to polling */
|
||||
if( keys != 0 )
|
||||
{
|
||||
if( OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE )
|
||||
{
|
||||
OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
|
||||
HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
|
||||
}
|
||||
}
|
||||
/* If no key is currently pressed down and interrupt
|
||||
is disabled, enable interrupt and turn off polling */
|
||||
else
|
||||
{
|
||||
if( OnboardKeyIntEnable == HAL_KEY_INTERRUPT_DISABLE )
|
||||
{
|
||||
OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;
|
||||
HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn Onboard_soft_reset
|
||||
*
|
||||
* @brief Effect a soft reset.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*********************************************************************/
|
||||
__near_func void Onboard_soft_reset( void )
|
||||
{
|
||||
HAL_DISABLE_INTERRUPTS();
|
||||
asm("LJMP 0x0");
|
||||
}
|
||||
|
||||
#if defined FEATURE_ABL
|
||||
#elif defined FEATURE_SBL
|
||||
#elif defined FEATURE_EBL
|
||||
#elif defined FEATURE_UBL_MSD
|
||||
#else
|
||||
/*********************************************************************
|
||||
* @fn appForceBoot
|
||||
*
|
||||
* @brief Common force-boot function for the HCI library to invoke.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return void
|
||||
*********************************************************************/
|
||||
void appForceBoot(void)
|
||||
{
|
||||
// Dummy function for HCI library that cannot depend on the SBL build defines.
|
||||
}
|
||||
#endif
|
||||
|
||||
/*********************************************************************
|
||||
*********************************************************************/
|
||||
Reference in New Issue
Block a user