blob: d953f908be098fc9ed997b27fa604ba18680fa99 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 - 2018 Johannes Messmer (admin@jomess.com), fortiss GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Johannes Messmer - initial API and implementation and/or initial documentation
* Jose Cabral - Cleaning of namespaces
*******************************************************************************/
#include "analog10.h"
#include "criticalregion.h"
EmbrickAnalog10SlaveHandle::EmbrickAnalog10SlaveHandle(forte::core::IO::IODeviceController *controller,
forte::core::IO::IOMapper::Direction direction, uint8_t offset, EmbrickSlaveHandler *slave) :
EmbrickSlaveHandle(controller, direction, CIEC_ANY::e_DWORD, offset, slave) {
}
void EmbrickAnalog10SlaveHandle::set(const CIEC_ANY &value) {
CCriticalRegion criticalRegion(*updateMutex);
*(buffer + offset + 1) = static_cast<const CIEC_DWORD&>(value) % 256;
*(buffer + offset) = (static_cast<const CIEC_DWORD&>(value) / 256) & 0x03;
EmbrickSlaveHandle::set(value);
}
void EmbrickAnalog10SlaveHandle::get(CIEC_ANY &value) {
CCriticalRegion criticalRegion(*updateMutex);
static_cast<CIEC_DWORD&>(value) = getValue(buffer);
}
bool EmbrickAnalog10SlaveHandle::equal(unsigned char* oldBuffer) {
return getValue(buffer) == getValue(oldBuffer);
}
const CIEC_DWORD EmbrickAnalog10SlaveHandle::getValue(const unsigned char* buffer) {
return (*(buffer + offset) & 0x03) * 256 + *(buffer + offset + 1);
}