|
|
|
@ -3,16 +3,17 @@
|
|
|
|
|
#include "Protocol/CAN.h"
|
|
|
|
|
#include "Protocol/CAN_data.h"
|
|
|
|
|
#include "Protocol/DigitalIO.h"
|
|
|
|
|
#include "Protocol/MemoryMap.h"
|
|
|
|
|
#include "Periphery.h"
|
|
|
|
|
|
|
|
|
|
Periphery::Periphery():
|
|
|
|
|
_canb(canSpace::CANB),
|
|
|
|
|
Periphery::Periphery() :
|
|
|
|
|
_canb(canSpace::CANA),
|
|
|
|
|
_digitalIO(),
|
|
|
|
|
_zone0_ptr(reinterpret_cast<Uint16*>(0x4000)),
|
|
|
|
|
_zone6_ptr(reinterpret_cast<Uint16*>(0x100000)),
|
|
|
|
|
_modbusSettingsMsg(),
|
|
|
|
|
_modbusInit(false)
|
|
|
|
|
{
|
|
|
|
|
_softVersion.DSP = 101;
|
|
|
|
|
_softVersion.DSP = 202;
|
|
|
|
|
_softVersion.CPLD = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -43,43 +44,39 @@ void Periphery::config(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------Init DIO interface----------------------------------------------------------
|
|
|
|
|
_digitalIO.setup(_zone0_ptr);
|
|
|
|
|
_digitalIO.setMemoryOffset(1);
|
|
|
|
|
_digitalIO.setup(_zone6_ptr);
|
|
|
|
|
_digitalIO.setMemoryOffset(interface::DISCRETE_DATA_OFFSET);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Uint16 Periphery::getVersionFPGA(){
|
|
|
|
|
Uint16 data;
|
|
|
|
|
data = *_zone0_ptr;
|
|
|
|
|
data = *_zone6_ptr + interface::SOFT_VERSION_OFFSET;
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::updateVersionFPGA(){
|
|
|
|
|
_softVersion.CPLD = getVersionFPGA() & 0x3FF; // no more than 1023 (9.9.9) should be limit
|
|
|
|
|
canSpace::CANMessage data;
|
|
|
|
|
data.mdl.word.LOW_WORD = _softVersion.DSP;
|
|
|
|
|
data.mdl.word.HI_WORD = _softVersion.CPLD;
|
|
|
|
|
_canb.updateTXMessage(canSpace::COMM_VERSION_MBOX, data);
|
|
|
|
|
_message.mdl.word.LOW_WORD = _softVersion.DSP;
|
|
|
|
|
_message.mdl.word.HI_WORD = _softVersion.CPLD;
|
|
|
|
|
_canb.updateTXMessage(canSpace::COMM_VERSION_MBOX, _message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::processDigitalInput(){
|
|
|
|
|
Uint16 data = 0;
|
|
|
|
|
// _digitalIO.readDigitalIO(data);
|
|
|
|
|
data = 0x1234;
|
|
|
|
|
_canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data & 0x3FF)); // TODO check! может быть лишнее затирание битов?
|
|
|
|
|
_digitalIO.readDigitalIO(data);
|
|
|
|
|
_canb.transmitMsg(canSpace::DIGITAL_INPUT_MBOX, (data));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Periphery::processDigitalOutput(){
|
|
|
|
|
if(_canb.isNewMessage(canSpace::DIGITAL_OUTPUT_MBOX)){
|
|
|
|
|
canSpace::CANMessage data;
|
|
|
|
|
_canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, data);
|
|
|
|
|
Uint16 temp;
|
|
|
|
|
temp = data.mdl.all;
|
|
|
|
|
// _digitalIO.writeDigitalIO(temp);
|
|
|
|
|
_canb.receiveMsg(canSpace::DIGITAL_OUTPUT_MBOX, _message);
|
|
|
|
|
Uint16 data = _message.mdl.word.LOW_WORD;
|
|
|
|
|
_digitalIO.writeDigitalIO(data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -87,6 +84,6 @@ void Periphery::processDigitalOutput(){
|
|
|
|
|
void Periphery::initExternalModbus(){
|
|
|
|
|
if (!_modbusInit && (_canb.isNewMessage(canSpace::MODBUS_SETTINGS_MBOX))) {
|
|
|
|
|
_canb.receiveMsg(canSpace::MODBUS_SETTINGS_MBOX, _modbusSettingsMsg);
|
|
|
|
|
_modbusInit = true;
|
|
|
|
|
_modbusInit = true; // TODO modbus init function must be here
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|