/* * Copyright (c) 2023 Fancy Code. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "LittleEndianHandle.h" #include "ModBusCRC16.h" #include "ProtocolHandle.h" #include #include #include LittleEndianHandle::LittleEndianHandle(const std::shared_ptr ¶m) : ProtocolHandle(param) { } LittleEndianHandle::LittleEndianHandle(const void *data, const size_t &length) : ProtocolHandle(data, length) { } void LittleEndianHandle::BigEndianConversion(ProtocolPacket &packet) { packet.mHead = htons(packet.mHead); packet.mCommand = htons(packet.mCommand); packet.mLength = htons(packet.mLength); packet.mCheckCode = htons(packet.mCheckCode); packet.mSerialNumber = htonl(packet.mSerialNumber); } short LittleEndianHandle::BigEndianConversion(const short &number) { return htons(number); } void LittleEndianHandle::HostByteOrderConversion(ProtocolPacket &packet) { packet.mHead = ntohs(packet.mHead); packet.mCommand = ntohs(packet.mCommand); packet.mLength = ntohs(packet.mLength); packet.mCheckCode = ntohs(packet.mCheckCode); packet.mSerialNumber = ntohl(packet.mSerialNumber); } bool LittleEndianHandle::CheckoutTheCheckCode(const ProtocolPacket &packet) { ProtocolHandle::PrintHexadecimalData(&packet.mCheckCode, CHECK_CODE_LENGTH, "CheckoutTheCheckCode little endian:"); short code = calculate_check_sum(mProtocolData, mProtocolDataLength - sizeof(short)); // code = ntohs(code); // TODO: if (code == packet.mCheckCode) { return true; } return false; }