1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-11-30 08:24:11 +01:00

Small utility to parse the output of a Junsi PowerLog6S, should work on Linux, Windows & Mac. Testbed for the HID library and USB device detection we're working on, not directly related to the GCS...

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@3001 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
edouard 2011-03-07 22:00:26 +00:00 committed by edouard
parent 18a39c964e
commit 191df1a118
2 changed files with 242 additions and 0 deletions

View File

@ -0,0 +1,43 @@
#-------------------------------------------------
#
# Project created by QtCreator 2010-07-24T11:26:38
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = HIDTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
HEADERS += ../../plugins/rawhid/pjrc_rawhid.h
win32 {
SOURCES += ../../plugins/rawhid/pjrc_rawhid_win.cpp
LIBS += -lhid \
-lsetupapi
}
macx {
SOURCES += ../../plugins/rawhid/pjrc_rawhid_mac.cpp
SDK = /Developer/SDKs/MacOSX10.5.sdk
ARCH = -mmacosx-version-min=10.5 \
-arch \
ppc \
-arch \
i386
LIBS += $(ARCH) \
-Wl,-syslibroot,$(SDK) \
-framework \
IOKit \
-framework \
CoreFoundation
}
linux-g++ {
SOURCES += ../../plugins/rawhid/pjrc_rawhid_unix.cpp
LIBS += -lusb
}

View File

@ -0,0 +1,199 @@
#include <QtCore/QCoreApplication>
#include <iostream>
#include <stdio.h>
#include <../../plugins/rawhid/pjrc_rawhid.h>
#define BUF_LEN 64
using namespace std;
typedef unsigned long ULONG; // 4 Bytes
typedef short SHORT;
typedef unsigned short USHORT; // 2 Bytes
typedef unsigned char BYTE; // 1 Byte
typedef unsigned short WORD; // 2 Bytes
typedef unsigned long DWORD; // 4 Bytes
class MyParser : public QObject {
struct POWERLOG_HID_PACK
{
BYTE Len;
BYTE Type;
DWORD Interval;
BYTE LogState;
SHORT Current;
USHORT Volt;
DWORD Cap;
SHORT Cell[6];
USHORT RPM;
SHORT Temp[4];
USHORT Period;
USHORT Pulse;
};
enum
{
TYPE_DATA_ONLINE = 0x10,
TYPE_DATA_OFFLINE = 0x11,
TYPE_ORDER = 0x20,
};
public:
void start()
{
qDebug() << "Connect a Junsi PowerLog 6S and watch the logging output";
pjrc_rawhid hidHandle;
int numDevices = hidHandle.open(1, 0x0483,0x5750,0,0); //0xff9c,0x0001);
if( numDevices == 0 )
numDevices = hidHandle.open(1,0x0483,0,0,0);
qDebug() << numDevices << " device(s) opened";
//hidHandle.mytest(0);
char buf[BUF_LEN];
buf[0] = 2;
buf[1] = 0;
while (int received = hidHandle.receive(0, buf, BUF_LEN, 3500) ) {
ShowInf(buf);
}
}
void ShowInf(char *pBuf)
{
qDebug() << "--------------------";
POWERLOG_HID_PACK Inf;
int i;
int Count;
Count=0;
Inf.Len = pBuf[Count];
Count += sizeof(Inf.Len);
Inf.Type = pBuf[Count];
Count += sizeof(Inf.Type);
Inf.Interval = *((DWORD *)&pBuf[Count]);
printf("Interval:%ld\n",Inf.Interval);
Count += sizeof(Inf.Interval);
Inf.LogState = pBuf[Count];
Count += sizeof(Inf.LogState);
if(((Inf.Type == TYPE_DATA_ONLINE)||(Inf.Type == TYPE_DATA_OFFLINE)) && (Inf.Len == 0x29))//0x27
{
Inf.Current = *((SHORT *)&pBuf[Count]);
Count += sizeof(Inf.Current);
GetShowValue(QString("Current:"),Inf.Current,5,2);
Inf.Volt = *((USHORT *)&pBuf[Count]);
Count += sizeof(Inf.Volt);
GetShowValue(QString("Voltage:"),Inf.Volt,5,2);
Inf.Cap = *((DWORD *)&pBuf[Count]);
Count += sizeof(Inf.Cap);
GetShowValue(QString("Cap:"),Inf.Cap,6,0);
for(i=0;i<6;i++)
{
Inf.Cell[i] = *((SHORT *)&pBuf[Count]);
Count += sizeof(Inf.Cell[i]);
}
GetShowValue(QString("Cell 1:"),Inf.Cell[0],5,3);
GetShowValue(QString("Cell 2:"),Inf.Cell[1],5,3);
GetShowValue(QString("Cell 3:"),Inf.Cell[2],5,3);
GetShowValue(QString("Cell 4:"),Inf.Cell[3],5,3);
GetShowValue(QString("Cell 5:"),Inf.Cell[4],5,3);
GetShowValue(QString("Cell 6:"),Inf.Cell[5],5,3);
Inf.RPM = *((USHORT *)&pBuf[Count]);
Count += sizeof(Inf.RPM);
GetShowValue(QString("RPM:"),Inf.RPM,6,0);
for(i=0;i<4;i++)
{
Inf.Temp[i] = *((SHORT *)&pBuf[Count]);
Count += sizeof(Inf.Temp[i]);
}
GetShowValue(QString("Int Temp1:"),Inf.Temp[0],4,1);
if(Inf.Temp[1]==0x7fff)
QString txtExtTemp1 = QString("NULL");
else
GetShowValue(QString("Ext temp1:"),Inf.Temp[1],4,1);
if(Inf.Temp[2]==0x7fff)
QString txtExtTemp2 = QString("NULL");
else
GetShowValue(QString("Ext temp2:"),Inf.Temp[2],4,1);
if(Inf.Temp[3]==0x7fff)
QString txtExtTemp3 = QString("NULL");
else
GetShowValue(QString("Ext temp3:"),Inf.Temp[3],4,1);
Inf.Period = *((USHORT *)&pBuf[Count]);
Count += sizeof(Inf.Period);
GetShowValue(QString("Period:"),Inf.Period,6,0);
Inf.Pulse = *((USHORT *)&pBuf[Count]);
Count += sizeof(Inf.Pulse);
GetShowValue(QString("Pulse:"),Inf.Pulse,6,0);
}
}
void GetShowValue(QString label,DWORD Value,WORD Len,WORD Dot)
{
cout << label .toStdString() << " ";
if(Value<0)
{
Value = -Value;
if(Dot==1)
printf("-%ld.%01lu",Value/10,Value%10);
else if(Dot==2)
printf("-%ld.%02lu",Value/100,Value%100);
else if(Dot==3)
printf("-%ld.%03lu",Value/1000,Value%1000);
else if(Dot==4)
printf("-%ld.%04lu",Value/10000,Value%10000);
else
printf("-%ld",Value);
}
else
{
if(Dot==1)
printf("%ld.%01lu",Value/10,Value%10);
else if(Dot==2)
printf("%ld.%02lu",Value/100,Value%100);
else if(Dot==3)
printf("%ld.%03lu",Value/1000,Value%1000);
else if(Dot==4)
printf("%ld.%04lu",Value/10000,Value%10000);
else
printf("%ld",Value);
}
printf("\n");
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyParser b;
b.start();
// return a.exec();
}