Source file: /~heha/ewa/Ofen/prozess.zip/msvc/o1/main.h

#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-80