| | |
| | | /* |
| | | * messageproc.c |
| | | * |
| | | * Created on: 2021年11月1日 |
| | | * Created on: 2021年11月1日 |
| | | * Author: graydon |
| | | */ |
| | | #include <string.h> |
| | |
| | | #include "messageproc.h" |
| | | #include "../drv/spi.h" |
| | | #include "../drv/gpio.h" |
| | | #include "../drv/memory.h" |
| | | |
| | | #include "F2F.h" |
| | | #include "ModuleProAPI.h" |
| | | #include "tg/tg_adapter.h" |
| | |
| | | |
| | | uvoid Message::ReportDspStatus(MSG* pmsg) |
| | | { |
| | | s32 size = dsp_status_q.get_device_status_ptr(pmsg->data,MSG_DATA_LEN); |
| | | s32 size = dsp_status_q.get_device_status_ptr(pmsg->data, MSG_DATA_LEN); |
| | | if(size > 0) { |
| | | pmsg->Enc(MsgType::MSG_DSP_STATUS_REPORT, 0, size); |
| | | txQueue->Push(*pmsg); |
| | | } |
| | | } |
| | | |
| | | uvoid Message::ReportLevel(MSG* pmsg) |
| | | { |
| | | int i; |
| | | int data_len; |
| | | |
| | | ToB* tob = ToB::GetInstance(); |
| | | u16 LevelCnt = tob->GetLevels(Levels); //918 levels |
| | | u32 msgLen = LevelCnt * sizeof(*Levels); |
| | | int Packegs = (msgLen+MSG_DATA_LEN-1)/MSG_DATA_LEN; |
| | | |
| | | pmsg->magic = 0x5aa5; |
| | | // pmsg->dataLen = LevelCnt; |
| | | pmsg->totalPkts = Packegs; |
| | | // pmsg->pktNo = 1; |
| | | pmsg->msgType = MSG_GET_LEVEL; |
| | | pmsg->msgID = LevelCnt; |
| | | |
| | | // Split packeg |
| | | for(i=0; i<Packegs; i++){ |
| | | if(i == Packegs-1){ |
| | | data_len = msgLen - i * MSG_DATA_LEN; |
| | | } |
| | | else{ |
| | | data_len = MSG_DATA_LEN; |
| | | } |
| | | |
| | | memcpy(pmsg->data, Levels + i * MSG_DATA_LEN / sizeof(*Levels), data_len); |
| | | pmsg->dataLen = data_len; |
| | | pmsg->pktNo = i; |
| | | |
| | | pmsg->Enc(MsgType::MSG_GET_LEVEL, 0, data_len); |
| | | txQueue->Push(*pmsg); |
| | | } |
| | | } |
| | |
| | | |
| | | if(tob != NULL && pmsg->pktNo == pmsg->totalPkts - 1) { |
| | | VarState& var = VarState::GetInstance(); |
| | | u32 type = tob->GetModuleType(ptr->mid); |
| | | // u32 type = tob->GetModuleType(ptr->mid); |
| | | s32 data_num = (pmsg->totalPkts-1)*MSG_DATA_LEN+pmsg->dataLen; |
| | | |
| | | s16* data = (s16*)(ptr + 1); |
| | | |
| | | data_num = (data_num - sizeof(struct ParamCtrl))/sizeof(s16); |
| | | |
| | | ptr->mid = var.pscene->get_module_id(ptr->mid, type, ptr->cmd) ; |
| | | // ptr->mid = var.pscene->get_module_id(ptr->mid, type, ptr->cmd) ; |
| | | // printf("mID:%d pID:%d val[0]:%d val[1]:%d\n",ptr->mid, ptr->cmd, data[0], data[1]); |
| | | tob->toCtrl(ptr->mid, ptr->cmd, data, data_num); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | s32 Message::PresetProcess(MSG* pmsg) |
| | | { |
| | |
| | | sram_free(SRAM_DDR, bin); |
| | | bin = NULL; |
| | | } |
| | | |
| | | if(pmsg->pktNo == 0 && bin == NULL) { |
| | | bin = (u8*)sram_malloc(SRAM_DDR, mem_any ,pmsg->totalPkts*MSG_DATA_LEN); |
| | | bin = (u8*)sram_malloc(SRAM_DDR, mem_any, pmsg->totalPkts*MSG_DATA_LEN); |
| | | } |
| | | if(bin == NULL) return -1; |
| | | // printf("No:%d len %d\n", pmsg->pktNo,pmsg->dataLen); |
| | | var.TopoLoading = utrue; |
| | | memcpy(bin+pmsg->pktNo*MSG_DATA_LEN, pmsg->data , pmsg->dataLen); |
| | | |
| | | if(pmsg->pktNo == pmsg->totalPkts -1) { |
| | | u32 size = (pmsg->totalPkts -1)*MSG_DATA_LEN+pmsg->dataLen; |
| | | |
| | |
| | | var.TopoStatus = PRESET_STA::PRESET_ERR; |
| | | } |
| | | else if(tob){ |
| | | s8* content = (s8*)sram_malloc(SRAM_DDR, mem_any ,16*1024); |
| | | int preset_size = sizeof(tag_parameters); // 45128 + sizeof(tag_fir) * MAX_OUTPUT_NUM; // size + FIR |
| | | u8* content = (u8*)sram_malloc(SRAM_DDR, mem_any, preset_size); |
| | | s32 size ; |
| | | |
| | | tob->toClear(); |
| | | |
| | | var.pscene->update_module(); |
| | | size = var.pscene->convert_to_bin(content); |
| | | |
| | | tob->toClear(); |
| | | tob->toAnalysis(bin, size); |
| | | tob->toAnalysis(content, size); |
| | | |
| | | sram_free(SRAM_DDR, content); |
| | | var.TopoStatus = PRESET_STA::PRESET_DONE; |
| | | } |
| | | } |
| | | sram_free(SRAM_DDR, bin); bin = NULL; |
| | | var.TopoLoading =0 ; |
| | | var.TopoLoading = ufalse ; |
| | | } |
| | | |
| | | return 0; |
| | |
| | | |
| | | s32 Message::HandshakeMessageProcess(MSG* pmsg) |
| | | { |
| | | // s8 usb_rx_ch=2, usb_tx_ch=2; |
| | | VarState& var = VarState::GetInstance(); |
| | | |
| | | ptag_device_config device_config = (ptag_device_config)pmsg->data; |
| | | struct DSPConfig dspconfig ; |
| | | |
| | | if(var.HandShakeSuccesful == ufalse) { |
| | | //可以根据ptag_device_config.hardware_type动态适配型号. |
| | | //可以根据ptag_device_config.hardware_type动态适配型号. |
| | | if(var.pscene){ |
| | | delete var.pscene; |
| | | var.pscene = NULL; |
| | | } |
| | | |
| | | hw_adapter_t* _adapter = new tg_hw_adapter_t(device_config->dual_dsp,device_config->dsp_index |
| | | ,device_config->local_rx_num,device_config->local_tx_num |
| | | ,device_config->dante_rx_num,device_config->dante_tx_num); |
| | | var.pscene = new tgScene(_adapter); |
| | | // param_init(device_config); |
| | | hw_adapter_t* _adapter = new tg_hw_adapter_t(device_config->dual_dsp, device_config->dsp_index |
| | | ,device_config->local_rx_num, device_config->local_tx_num |
| | | ,device_config->dante_rx_num, device_config->dante_tx_num); |
| | | var.pscene = new(SRAM_DDR) tgScene(_adapter); |
| | | |
| | | _adapter->config_board(&dspconfig); |
| | | new(SRAM_DDR) ToB(device_config->dual_dsp, device_config->dsp_index); |
| | | |
| | | SAMPLE_NUM = dspconfig.mSampleNum; |
| | | var.master_intr = dspconfig.mIntrNo; |
| | |
| | | |
| | | ModuleLeveldBUSetting(dspconfig.mConvertUnit); |
| | | //Config(conf); |
| | | RouteConfig(dspconfig.routes,dspconfig.mRouteNum); |
| | | RouteConfig(dspconfig.routes, dspconfig.mRouteNum); |
| | | SRCsConfig(0 , &dspconfig.srcs[0]); |
| | | SRCsConfig(1 , &dspconfig.srcs[4]); |
| | | SRCsConfig(1 , &dspconfig.srcs[1]); |
| | | PCGsConfig(dspconfig.pcgs); |
| | | SportsConfig(dspconfig.sports); |
| | | //LinportConfig(dspconfig.linkport); |
| | |
| | | } |
| | | |
| | | Send(MsgType::MSG_ACK_REQ, 0 , 0); |
| | | |
| | | printf("HandShake OK\n"); |
| | | return 0; |
| | | } |
| | | |
| | |
| | | ParamCtrl(pmsg); |
| | | break; |
| | | case MsgType::MSG_GET_LEVEL: |
| | | ReportLevel(pmsg); |
| | | break; |
| | | case MsgType::MSG_PARAM_CONFIG: |
| | | case MsgType::MSG_PARAM_COMPLETED: |
| | |
| | | uvoid Message::Proc() |
| | | { |
| | | u32 status = 0; |
| | | // static bool bSetOk = 0; |
| | | |
| | | // MSG* p = (MSG*)SPI_Rx_BUFFER; |
| | | // if (0 == bSetOk) { |
| | | // HandshakeMessageProcess(p); //virtual communication |
| | | // PresetProcess(p); |
| | | // bSetOk = 1; |
| | | // } |
| | | |
| | | if(SPIRxDone) { |
| | | RxMessageHandler((MSG*)SPI_Rx_BUFFER); |
| | |
| | | GPIO_SetOutPut(GPIOA, GPIO_Pin12, GPIO_HIGH); |
| | | } |
| | | SPI2_SetTransMode(SPIStatus::SPI_TRX); |
| | | GPIO_SetOutPut(GPIOA, GPIO_Pin13, GPIO_HIGH); |
| | | GPIO_SetOutPut(GPIOB, GPIO_Pin5, GPIO_HIGH); |
| | | } |
| | | } |