#include "udphelper.h" #define _GET_DEVICE_TYPE_AND_CHANNEL 0x00 #define _GET_DEVICE_POWER_INFO 0x01 #define _GLOBAL_REMOTE_PORT 32768 UdpHelper::UdpHelper(QObject *parent) : QObject(parent) { mSocket = new QUdpSocket(this); mSocket->bind(QHostAddress::Any,this->port); } int UdpHelper::getDeviceTypeAndChannel(int *type, int *channel) { //bool status = false ; QByteArray dataArray; dataArray.resize(6); dataArray[0] = 0x55; dataArray[1] = 0x00; dataArray[2] = 0x02; dataArray[3] = _GET_DEVICE_TYPE_AND_CHANNEL; dataArray[4] = 0x00 ; dataArray[5] = 0xFF ; mSocket->writeDatagram(dataArray,QHostAddress::Broadcast,_GLOBAL_REMOTE_PORT); if(mSocket->waitForReadyRead(1000)==false) return -1 ; //recv QByteArray arr; arr.resize(mSocket->bytesAvailable()); mSocket->readDatagram(arr.data(),arr.size(),&addr,&port); *type = (int)arr.at(0); *channel = (arr.at(1)<<8|arr.at(2)); return 0; } int UdpHelper::getPowerInfo(bool *sts, float *vol, float *cur, float *power, float *factor, float *consum) { //bool status = false ; QByteArray dataArray; dataArray.resize(6); dataArray[0] = 0x55; dataArray[1] = 0x00; dataArray[2] = 0x02; dataArray[3] = _GET_DEVICE_POWER_INFO; dataArray[4] = 0x00 ; dataArray[5] = 0xFF ; mSocket->writeDatagram(dataArray,QHostAddress::Broadcast,_GLOBAL_REMOTE_PORT); if(mSocket->waitForReadyRead(1000)==false) return -1 ; QByteArray arr; char* data_buff; arr.resize(mSocket->bytesAvailable()); mSocket->readDatagram(arr.data(),arr.size(),&addr,&port); data_buff = arr.data(); *sts = data_buff[0]; memcpy(vol,data_buff+1,4); memcpy(cur,data_buff+5,4); memcpy(power,data_buff+9,4); memcpy(factor,data_buff+13,4); memcpy(consum,data_buff+17,4); return 0; }