blob: 213b623acddbef1de91db9e55f340cb4889629b5 [file] [log] [blame]
/*
* tfaContainer.h
*
* Created on: Sep 11, 2013
* Author: wim
*/
#ifndef TFACONTAINER_H_
#define TFACONTAINER_H_
/* static limits */
#define TFACONT_MAXDEVS (4) /* maximum nr of devices */
#define TFACONT_MAXPROFS (16) /* maximum nr of profiles */
#include "tfa98xx_parameters.h"
/**
* Check the container file and set module global
* @param cnt pointer to container file
* @param length the length of the container file
* @return tfa_error
*/
enum tfa_error tfa_load_cnt(void *cnt, int length);
/**
* Resets init variables
*/
void tfa_deinit(void);
/**
* Verify the calibration results from each channel
* @param handle the index of the device
*/
void individual_calibration_results(Tfa98xx_handle_t handle);
/**
* Return the descriptor string
* @param dsc pointer to nxpTfa descriptor
* @return descriptor string
*/
char *tfaContGetString(nxpTfaDescPtr_t *dsc); //TODO
/**
* Gets the string for the given command type number
* @param type number representing a command
* @return string of a command
*/
char *tfaContGetCommandString(uint32_t type);
/**
* get the device type from the patch in this devicelist
* - find the patch file for this devidx
* - return the devid from the patch or 0 if not found
* @param cnt pointer to container file
* @param dev_idx device index
* @return descriptor string
*/
int tfa_cnt_get_devid(nxpTfaContainer_t *cnt, int dev_idx) ;
/**
* Get the number of devices from the container
* @return number of devices
*/
int tfa98xx_cnt_max_device(void);
/**
* Set verbosity level
* @param level used as boolean
*/
void tfa_cnt_verbose(int level);
/**
* Return the pointer to the loaded container file
* @return pointer to container, NULL if not loaded.
*/
nxpTfaContainer_t* tfa98xx_get_cnt(void);
/**
* Lookup slave and return device index
* @param slave_addr address of the slave device
* @return device index
*/
int tfa98xx_cnt_slave2idx(int slave_addr);
/**
* Lookup slave and return device revid.
* @param slave_addr address of the slave device
* @return device revid
*/
int tfa98xx_cnt_slave2revid(int slave_addr);
/**
* Get the slave for the device if it exists.
* @param dev_idx the index of the device
* @param slave the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContGetSlave(int dev_idx, uint8_t *slave_addr);
/**
* Write reg and bitfield items in the devicelist to the target.
* @param device the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWriteRegsDev(int dev_idx);
/**
* Write reg and bitfield items in the profilelist to the target.
* @param device the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWriteRegsProf(int dev_idx, int prof_idx);
/**
* Write a patchfile in the devicelist to the target.
* @param dev_idx the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWritePatch(int dev_idx);
/**
* Write all param files in the devicelist to the target.
* @param dev_idx the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWriteFiles(int dev_idx);
/**
* Get sample rate from passed profile index
* @param dev_idx the index of the device
* @param prof_idx the index of the profile
* @return sample rate value
*/
unsigned int tfa98xx_get_profile_sr(int dev_idx, unsigned int prof_idx);
/**
* Open the specified device after looking up the target address.
* @param dev_idx the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContOpen(int dev_idx);
/**
* Close the device.
* @param dev_idx the index of the device
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContClose(int dev_idx);
/**
* Get the device name string
* @param dev_idx the index of the device
* @return device name string or error string if not found
*/
char *tfaContDeviceName(int dev_idx);
/**
* Get the application name from the container file application field
* @param name the input stringbuffer with size: sizeof(application field)+1
* @return actual string length
*/
int tfa_cnt_get_app_name(char *name);
/**
* Get profile index of the calibration profile
* @param dev_idx the index of the device
* @return profile index, -2 if no calibration profile is found or -1 on error
*/
int tfaContGetCalProfile(int dev_idx);
/**
* Is the profile a tap profile ?
* @param dev_idx the index of the device
* @param prof_idx the index of the profile
* @return 1 if the profile is a tap profile or 0 if not
*/
int tfaContIsTapProfile(int dev_idx, int prof_idx);
/**
* Get the name of the profile at certain index for a device in the container file
* @param dev_idx the index of the device
* @param prof_idx the index of the profile
* @return profile name string or error string if not found
*/
char *tfaContProfileName(int dev_idx, int prof_idx);
/**
* Get the number of profiles for a device
* @param dev_idx index of the device
* @return the profile count
*/
int tfaContMaxProfile(int dev_idx);
/**
* Process all items in the profilelist
* NOTE an error return during processing will leave the device muted
* @param dev_idx index of the device
* @param prof_idx index of the profile
* @param vstep_idx index of the vstep
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWriteProfile(int dev_idx, int prof_idx, int vstep_idx);
/**
* Specify the speaker configurations (cmd id) (Left, right, both, none)
* @param dev_idx index of the device
* @param configuration name string of the configuration
*/
void tfa98xx_set_spkr_select(Tfa98xx_handle_t dev_idx, char *configuration);
/**
* Set current vstep for a given channel
* @param vstep_idx index of the vstep
* @param channel index of the channel
*/
void tfaContSetCurrentVstep(int channel, int vstep_idx);
/**
* Get current vstep for a given channel
* @param channel index of the channel
*/
int tfaContGetCurrentVstep(int channel);
enum Tfa98xx_Error tfa_cont_write_filterbank(int dev_idx, nxpTfaFilter_t *filter);
/**
* Write all param files in the profilelist to the target
* this is used during startup when maybe ACS is set
* @param dev_idx the index of the device
* @param prof_idx the index of the profile
* @param vstep_idx the index of the vstep
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWriteFilesProf(int dev_idx, int prof_idx, int vstep_idx);
enum Tfa98xx_Error tfaContWriteFilesVstep(int dev_idx, int prof_idx, int vstep_idx);
enum Tfa98xx_Error tfaContWriteDrcFile(int dev_idx, int size, uint8_t data[]);
/**
* Get the device list dsc from the tfaContainer
* @param cont pointer to the tfaContainer
* @param dev_idx the index of the device
* @return device list pointer
*/
nxpTfaDeviceList_t *tfaContGetDevList(nxpTfaContainer_t * cont, int dev_idx);
/**
* Get the Nth profile for the Nth device
* @param cont pointer to the tfaContainer
* @param dev_idx the index of the device
* @param prof_idx the index of the profile
* @return profile list pointer
*/
nxpTfaProfileList_t *tfaContGetDevProfList(nxpTfaContainer_t *cont, int dev_idx, int prof_idx);
/**
* Get the Nth livedata for the Nth device
* @param cont pointer to the tfaContainer
* @param dev_idx the index of the device
* @param livedata_idx the index of the livedata
* @return livedata list pointer
*/
nxpTfaLiveDataList_t *tfaContGetDevLiveDataList(nxpTfaContainer_t *cont, int dev_idx, int livedata_idx);
/**
* Check CRC for container
* @param cont pointer to the tfaContainer
* @return error value 0 on error
*/
int tfaContCrcCheckContainer(nxpTfaContainer_t *cont);
/**
* Get the device list pointer
* @param dev_idx the index of the device
* @return pointer to device list
*/
nxpTfaDeviceList_t *tfaContDevice(int dev_idx);
/**
* Return the pointer to the profile in a list
* @param dev_idx the index of the device
* @param prof_ipx the index of the profile
* @return profile list pointer
*/
nxpTfaProfileList_t* tfaContProfile(int dev_idx, int prof_ipx);
/**
* Return the pointer to the first profile in a list from the tfaContainer
* @param cont pointer to the tfaContainer
* @return pointer to first profile in profile list
*/
nxpTfaProfileList_t *tfaContGet1stProfList(nxpTfaContainer_t *cont);
/**
* Return the pointer to the next profile in a list
* @param prof is the pointer to the profile list
* @return profile list pointer
*/
nxpTfaProfileList_t* tfaContNextProfile(nxpTfaProfileList_t *prof);
/**
* Return the pointer to the first livedata in a list from the tfaContainer
* @param cont pointer to the tfaContainer
* @return pointer to first livedata in profile list
*/
nxpTfaLiveDataList_t *tfaContGet1stLiveDataList(nxpTfaContainer_t *cont);
/**
* Return the pointer to the next livedata in a list
* @param livedata_idx is the pointer to the livedata list
* @return livedata list pointer
*/
nxpTfaLiveDataList_t* tfaContNextLiveData(nxpTfaLiveDataList_t *livedata_idx);
/**
* Write a bit field
* @param dev_idx device index
* @param bf bitfield to write
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaRunWriteBitfield(Tfa98xx_handle_t dev_idx, nxpTfaBitfield_t bf);//TODO move to run core
/**
* Write a parameter file to the device
* @param dev_idx device index
* @param file filedescriptor pointer
* @param vstep_idx index to vstep
* @param vstep_msg_idx index to vstep message
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaContWriteFile(int dev_idx, nxpTfaFileDsc_t *file, int vstep_idx, int vstep_msg_idx);
/**
* Get the max volume step associated with Nth profile for the Nth device
* @param dev_idx device index
* @param prof_idx profile index
* @return the number of vsteps
*/
int tfacont_get_max_vstep(int dev_idx, int prof_idx);
/**
* Get the file contents associated with the device or profile
* Search within the device tree, if not found, search within the profile
* tree. There can only be one type of file within profile or device.
* @param dev_idx I2C device index
* @param prof_idx I2C profile index in the device
* @param type file type
* @return 0 NULL if file type is not found
* @return 1 file contents
*/
nxpTfaFileDsc_t *tfacont_getfiledata(int dev_idx, int prof_idx, enum nxpTfaHeaderType type);
/**
* Dump the contents of the file header
* @param hdr pointer to file header data
*/
void tfaContShowHeader(nxpTfaHeader_t *hdr);
/**
* Read a bit field
* @param dev_idx device index
* @param bf bitfield to read out
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfaRunReadBitfield(Tfa98xx_handle_t dev_idx, nxpTfaBitfield_t *bf);
/**
* Get hw feature bits from container file
* @param dev_idx device index
* @param hw_feature_register pointer to where hw features are stored
*/
void get_hw_features_from_cnt(Tfa98xx_handle_t dev_idx, int *hw_feature_register);
/**
* Get sw feature bits from container file
* @param dev_idx device index
* @param sw_feature_register pointer to where sw features are stored
*/
void get_sw_features_from_cnt(Tfa98xx_handle_t dev_idx, int sw_feature_register[2]);
/**
* Factory trimming for the Boost converter
* check if there is a correction needed
* @param dev_idx device index
*/
void tfa_factory_trimmer(Tfa98xx_handle_t dev_idx);
/**
* Search for filters settings and if found then write them to the device
* @param dev_idx device index
* @param prof_idx profile to look in
* @return Tfa98xx_Error
*/
enum Tfa98xx_Error tfa_set_filters(int dev_idx, int prof_idx);
#endif /* TFACONTAINER_H_ */