#include #include #include #include #include #include #include #include #include #include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_uart.h" #include "Drivers/USB_Communication/USBCDCD.h" #include "MessageContainer.pb-c.h" #include "Stub_Status.h" #include "drivers/FPGA/FPGA.h" #include "drivers/FPGA/FPGA_Comm.h" #include "control/control.h" void Stub_FpgaReadRegRequest(MessageContainer* requestContainer) { uint32_t status = PASSED; MessageContainer responseContainer; StubFpgaReadRegRequest* request = stub_fpga_read_reg_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); StubFpgaReadRegResponse response = STUB_FPGA_READ_REG_RESPONSE__INIT; status_response(status,&response.status, &response.statusword ,&response.has_statusword); if((request->address < FPGA1_BASE) || (request->address > (FPGA3_BASE | (0x3FF))))//TODO update the last add { status = FAILED; } else { volatile short *ptr; ptr = (volatile short *) (request->address); response.address = request->address; response.has_address = true; response.value = *ptr; response.has_value = true; } responseContainer = createContainer(MESSAGE_TYPE__StubFpgaReadRegResponse, requestContainer->token, true, &response, &stub_fpga_read_reg_response__pack, &stub_fpga_read_reg_response__get_packed_size); Write_status_response(status); //free(request); stub_fpga_read_reg_request__free_unpacked(request,NULL); //------------------------------------------------------------------------------------------- uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); free(responseContainer.data.data); SendChars((char*)container_buffer, container_size); //free(container_buffer); //free(requestContainer); } uint32_t value = 0,ctlId; uint32_t ResetCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { SafeRemoveControlCallback(ctlId, ResetCallBackFunction ); volatile short *ptr = (volatile short *)(FPGA3_BASE | 0x3D0); *ptr = (value & 0xFFFF); return OK; } void Stub_FpgaWriteRegRequest(MessageContainer* requestContainer) { uint32_t status = PASSED; volatile short *ptr; MessageContainer responseContainer; StubFpgaWriteRegRequest* request = stub_fpga_write_reg_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); if((request->address < FPGA1_BASE) || (request->address > (FPGA3_BASE | (0x3FF))))//TODO update the last add { status = FAILED; } else { value = request->value; ptr = (volatile short *) (request->address); if (request->address == (FPGA3_BASE | 0x3D0)) { ctlId = AddControlCallback("Reset", ResetCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,ptr,ptr, 0 ); } else *ptr = (request->value & 0xFFFF); } StubFpgaWriteRegResponse response = STUB_FPGA_WRITE_REG_RESPONSE__INIT; status_response(status,&response.status, &response.statusword ,&response.has_statusword); responseContainer = createContainer(MESSAGE_TYPE__StubFpgaWriteRegResponse, requestContainer->token, true, &response, &stub_fpga_write_reg_response__pack, &stub_fpga_write_reg_response__get_packed_size); Write_status_response(status); //free(request); stub_fpga_write_reg_request__free_unpacked(request,NULL); //------------------------------------------------------------------------------------------- uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); free(responseContainer.data.data); SendChars((char*)container_buffer, container_size); //free(container_buffer); //free(requestContainer); }