Skip to content
Permalink
dev
Go to file
 
 
Cannot retrieve contributors at this time
267 lines (249 sloc) 5.75 KB
// aleph/common
#include "param_common.h"
// bfin_lib
#include "bfin_core.h"
#include "control.h"
#include "gpio.h"
#include "module.h"
#include "protocol.h"
#include "types.h"
#include "util.h"
#include "spi.h"
//----- static variables
// byte to process
static eSpiByte byte = eCom;
// current command
static u8 com;
// current param index
static u8 idx;
//------ static functions
static void spi_set_param(u32 idx, ParamValue pv) {
gModuleData->paramData[idx].value = pv;
module_set_param(idx, pv);
}
//------- function definitions
// deal with new data in the spi rx ringbuffer
// return byte to load for next MISO
u8 spi_process(u8 rx) {
static ParamValueSwap pval;
switch(byte) {
/// caveman style case statement
case eCom :
com = rx;
switch(com) {
case MSG_SET_PARAM_COM:
byte = eSetParamIdx;
break;
case MSG_GET_PARAM_COM:
byte = eGetParamIdx;
break;
case MSG_GET_NUM_PARAMS_COM:
byte = eNumParamsVal;
return gModuleData->numParams; // load num params
break;
case MSG_GET_MODULE_NAME_COM:
byte = eModuleName0;
return gModuleData->name[0];
break;
case MSG_GET_MODULE_VERSION_COM:
byte = eModuleVersionMaj;
return MAJ;
break;
case MSG_ENABLE_AUDIO:
processAudio = 1;
return processAudio;
break;
case MSG_DISABLE_AUDIO:
processAudio = 0;
return processAudio;
break;
default:
break;
}
return 0;
break;
//---- set param
case eSetParamIdx :
idx = rx; // set index
byte = eSetParamData0;
return 0; // dont care
break;
case eSetParamData0 :
byte = eSetParamData1;
// byte-swap from BE on avr32
pval.asByte[3] = rx; // set paramval
return 0; // don't care
break;
case eSetParamData1 :
byte = eSetParamData2;
// byte-swap from BE on avr32
pval.asByte[2] = rx; // set paramval
return 0; // don't care
break;
case eSetParamData2 :
byte = eSetParamData3;
// byte-swap from BE on avr32
pval.asByte[1] = rx; // set paramval
return 0; // don't care
break;
case eSetParamData3 :
// byte-swap from BE on avr32
pval.asByte[0] = rx; // set paramval
spi_set_param(idx, pval.asInt);
byte = eCom; //reset
return 0; // don't care
break;
//---- get param
case eGetParamIdx :
idx = rx; // set index
byte = eGetParamData0;
pval.asInt = gModuleData->paramData[idx].value;
// byte-swap from BE on avr32
return pval.asByte[3];
break;
case eGetParamData0 :
byte = eGetParamData1;
// byte-swap from BE on avr32
return pval.asByte[2];
break;
case eGetParamData1 :
byte = eGetParamData2;
// byte-swap from BE on avr32
return pval.asByte[1];
break;
case eGetParamData2 :
byte = eGetParamData3;
// byte-swap from BE on avr32
return pval.asByte[0];
break;
case eGetParamData3 :
byte = eCom; //reset
return 0; // don't care
break;
//---- get num params
case eNumParamsVal :
byte = eCom; //reset
return 0; // don't care
break;
//----- get module name
case eModuleName0 :
byte = eModuleName1;
return gModuleData->name[1];
break;
case eModuleName1 :
byte = eModuleName2;
return gModuleData->name[2];
break;
case eModuleName2 :
byte = eModuleName3;
return gModuleData->name[3];
break;
case eModuleName3 :
byte = eModuleName4;
return gModuleData->name[4];
break;
case eModuleName4 :
byte = eModuleName5;
return gModuleData->name[5];
break;
case eModuleName5 :
byte = eModuleName6;
return gModuleData->name[6];
break;
case eModuleName6 :
byte = eModuleName7;
return gModuleData->name[7];
break;
case eModuleName7 :
byte = eModuleName8;
return gModuleData->name[8];
break;
case eModuleName8 :
byte = eModuleName9;
return gModuleData->name[9];
break;
case eModuleName9 :
byte = eModuleName10;
return gModuleData->name[10];
break;
case eModuleName10 :
byte = eModuleName11;
return gModuleData->name[11];
break;
case eModuleName11 :
byte = eModuleName12;
return gModuleData->name[12];
break;
case eModuleName12 :
byte = eModuleName13;
return gModuleData->name[13];
break;
case eModuleName13 :
byte = eModuleName14;
return gModuleData->name[14];
break;
case eModuleName14 :
byte = eModuleName15;
return gModuleData->name[15];
break;
case eModuleName15 :
byte = eModuleName16;
return gModuleData->name[16];
break;
case eModuleName16 :
byte = eModuleName17;
return gModuleData->name[17];
break;
case eModuleName17 :
byte = eModuleName18;
return gModuleData->name[18];
break;
case eModuleName18 :
byte = eModuleName19;
return gModuleData->name[19];
break;
case eModuleName19 :
byte = eModuleName20;
return gModuleData->name[20];
break;
case eModuleName20 :
byte = eModuleName21;
return gModuleData->name[21];
break;
case eModuleName21 :
byte = eModuleName22;
return gModuleData->name[22];
break;
case eModuleName22 :
byte = eModuleName23;
return gModuleData->name[23];
break;
case eModuleName23 :
byte = eCom; // reset
return 0; // don't care
break;
/// version
case eModuleVersionMaj :
byte = eModuleVersionMin;
return MIN;
break;
case eModuleVersionMin :
byte = eModuleVersionRev0;
// patch (u16)
// === byteswap for BE on avr32
return REV >> 8;
break;
case eModuleVersionRev0 :
byte = eModuleVersionRev1;
return REV & 0x00ff;
break;
case eModuleVersionRev1 :
byte = eCom; // reset
return 0; // don't care
break;
default:
byte = eCom; // reset
return 0;
break;
}
}