/*!
 * 	@File iap.h
 *	@Brief	Header file for the In-Application-Programming Module
 *
 *  Created on: Sep 6, 2010
 *      Author: joe
 */

#ifndef PIOS_IAP_H_
#define PIOS_IAP_H_


/****************************************************************************************
 *  Header files
 ****************************************************************************************/

/*****************************************************************************************
 *	Public Definitions/Macros
 ****************************************************************************************/
#define MAGIC_REG_1		BKP_DR1
#define MAGIC_REG_2		BKP_DR2
#define IAP_COMM		BKP_DR3

#define IAP_COMM_INVALID	0
#define IAP_COMM_USB		1
#define IAP_COMM_TELEMETRY	2
#define IAP_COMM_SPI_AHRS	3
#define IAP_COMM_I2C		4
// Additional types can be added along with the proper support code.

/****************************************************************************************
 *  Public Functions
 ****************************************************************************************/
void		PIOS_IAP_Init(void);
uint32_t 	PIOS_IAP_CRCVerify( void );
uint32_t	PIOS_IAP_CheckRequest( void );
void 		PIOS_IAP_SetCommInput( uint16_t comm );
uint16_t 	PIOS_IAP_GetCommInput( void );
void		PIOS_IAP_SetRequest1(void);
void		PIOS_IAP_SetRequest2(void);
void		PIOS_IAP_ClearRequest(void);
void 		PIOS_IAP_SetCRC( uint32_t crcval );

/****************************************************************************************
 *  Public Data
 ****************************************************************************************/

#endif /* PIOS_IAP_H_ */