#pragma once
#include "tableedit.h"
#include "plot.h"
#include <commctrl.h>
#include <setupapi.h>
#include <devguid.h>
extern "C"{
#include <hidsdi.h>
}
#include "wutils.h"
#pragma intrinsic(memcpy)
template<class T>struct RectS{
T left,top,right,bottom;
T width() const {return right-left;}
T height() const {return bottom-top;}
void fromRECT(const RECT&r) {left=(T)r.left; top=(T)r.top; right=(T)r.right; bottom=(T)r.bottom;}
void toRECT(RECT&r) const {r.left=left; r.top=top; r.right=right; r.bottom=bottom;}
};
extern struct CONFIG{
RectS<short> WinPos;
byte show;
byte HidNo;
byte rawview;
bool Save();
bool Load();
}Config;
extern HINSTANCE hInstance;
extern HWND hMainWnd;
extern char DecimalChar;
/***********
* hid.cpp *
***********/
struct HIDDEV{
static SP_CLASSIMAGELIST_DATA ild;
typedef bool(*FILTFUNC)(HANDLE,PHIDP_PREPARSED_DATA,PHIDP_CAPS);
HANDLE hDev;
PHIDP_PREPARSED_DATA pd;
HIDP_CAPS hidcaps;
int maxreport;
BYTE*report;
void Enum(HWND,FILTFUNC); // Füllt Combobox
void Open(int idx,FILTFUNC mine) {Enum((HWND)idx,mine);}
void Close();
bool getfeature() {return !!HidD_GetFeature(hDev,report,hidcaps.FeatureReportByteLength);}
bool setfeature() {return !!HidD_SetFeature(hDev,report,hidcaps.FeatureReportByteLength);}
bool getinput() {return !!HidD_GetInputReport(hDev,report,hidcaps.InputReportByteLength);}
bool setoutput() {return !!HidD_SetOutputReport(hDev,report,hidcaps.OutputReportByteLength);}
bool getfeature(byte id) {report[0]=id; return getfeature();}
bool getinput(byte id) {report[0]=id; return getinput();}
bool setoutput(int n) {return !!HidD_SetOutputReport(hDev,report,n);}
};
extern struct REGLER:public HIDDEV{
static bool mine(HANDLE,PHIDP_PREPARSED_DATA,PHIDP_CAPS hidcaps);
void onInputReport(); // GUI-Elemente von report in hMainWnd füllen
void setValue(byte id); // GUI-Element <id> von hMainWnd auslesen und in Firmware setzen
// Hartkodierte Report-Strukturen der Firmware
struct reportI{ // Input-Report: Meldung der Veränderlichen (alle 250 ms)
byte repid; // 1
byte flags;
byte relays; // Digitale Ausgänge
byte inputs; // Digitale Eingänge
WORD runTime; // Prozesslaufzeit; Schrittweite siehe oben
short heatPower; // Heizleistung = Ausgangswert des PID-Reglers
short tempSoll; // Solltemperatur
short tempIst[3]; // Bis zu 3 Isttemperaturen, die höchste wird geregelt (gegen Ausfall einer der Thermoelemente)
};
struct TPID{
short Kp,Ki,Kd,hold,f_up,f_dn,T;
};
struct reportK{ // Konstanten-Report (um nicht den HID-Parser bemühen zu müssen)
byte repid; // 15
byte f_Hz; // Doppelte Netzfrequenz in Hz für Phasenanschnitt: 100
short tr_ms; // Zeitschritt in ms für Regler: 250
short tp_ms; // Zeitschritt in ms für Prozess: 1000
short T_mK; // Temperaturschritt in mK: 250
short P_mW; // Schritt der Heizleistung in mW: 1000 (fiktiv)
};
static reportK reportk;
}regler;
/**************
* dlgPid.cpp *
**************/
BOOL CALLBACK PidDlgProc(HWND,UINT,WPARAM,LPARAM);
/******************
* dlgProcess.cpp *
******************/
void onEditInit(HWND hEdit);
void onEditChange(HWND hEdit);
void onEditRevert(HWND hEdit);
Detected encoding: UTF-8 | 0
|