• 26.04.2024, 16:57
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 02:20

hi,

ich möchte mir gerne ein programm schreiben, das ich per samurize aufrufen kann, das mir die profile switcht (von default auf volllast, falls ichs mal kühler haben möchte ^^). dazu hab ich einfach die setclock-solution genommen und modifiziert... sollte doch keine hexerei sein. hier der auszug:

Quellcode

1
2
3
4
5
6
7
if (aquaduct.Profil == AquaComputer.TranslationClasses.aquaduct.ProfilRegister.Profil_A)
    aquaduct.Profil = AquaComputer.TranslationClasses.aquaduct.ProfilRegister.Profil_B;
else
    aquaduct.Profil = AquaComputer.TranslationClasses.aquaduct.ProfilRegister.Profil_A;

string WriteData = aquaduct.CreateStringFromStructure(AquaComputer.TranslationClasses.aquaduct.TransferTypeRegister.RAM);
UsbHid.HidWriteToDevice(i, WriteData);


ich bin im programmieren nicht sonderlich bewandert, aber dies schien mir ursprünglich doch eine recht einfache aufgabe zu werden. nun muss ich mich leider vom gegenteil überzeugen lassen. kann mir da jemand weiter helfen? was passt hier nicht?

hab ürbigens mal beim debuggen vor und nach dem writeToDevice einen stop gemacht: reaggiert genau wie zu erwarten war, aber beim aquaduct rührt sich nix. interessant: stelle ich beim aquaduct manuell auf profil_B, lass dann ein script laufen, dass nur auf profil_A setzt, also ohne switch, und führe es danach gleich nochmal aus, steht im profil sogar profil_A drin, trotzdem wird das profil nicht umgesetzt. (die zeitsync, die ich noch drin gelassen habe, funzt hingegen übrigens wunderprächtigst)

vielleicht hat ja jemand eine idee. danke auf jeden fall für jegliche mühen!

gute nacht,
Linus
greets, Linus

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 07:09

warum änderst du nicht einfach die konfiguration in der aquasuite?

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 16:32

kann man das per .net-code? mir gehts darum, mit einem click auf ein objekt in samurize vom normalbetrieb die fans auf 100% leistung zu stellen, und dann wieder mit einem click auf normalbetrieb stellen zu können. dazu will ich nicht in die aquasuite gehen müssen.
greets, Linus

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 16:49

hallo, probiere es mal so:

Quellcode

1
2
3
4
5
6
Cd_aquaerodata.Profil = AquaComputer.TranslationClasses.aquaero_Rev4.ProfilRegister.Profil_A;
                  AeWriteString = Cd_aquaerodata.CreateStringFromStructure(AquaComputer.TranslationClasses.aquaero_Rev4.TransferTypeRegister.PROFIL_LOAD);
                  if (Cd_HIDControl.ControlBusy == false)
                  {
                        Cd_HIDControl.HidWriteToDevice(Cd_HIDDeviceIndex, AeWriteString);
                  }


Sebastian

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 17:20

yeah!!!! ;D

vielen dank sebastian!

so funzts jetzt:

Quellcode

1
2
3
4
5
6
7
8
if (aquaduct.Profil == AquaComputer.TranslationClasses.aquaduct.ProfilRegister.Profil_A)
     aquaduct.Profil = AquaComputer.TranslationClasses.aquaduct.ProfilRegister.Profil_B;
else
     aquaduct.Profil = AquaComputer.TranslationClasses.aquaduct.ProfilRegister.Profil_A;

string WriteData = aquaduct.CreateStringFromStructure(AquaComputer.TranslationClasses.aquaduct.TransferTypeRegister.PROFIL_LOAD);
if (UsbHid.ControlBusy == false)
     UsbHid.HidWriteToDevice(i, WriteData);


noch eine frage zum code: im mitgelieferten setclock code wird ohne kontrolle geschrieben (letzte zeile). sollte man generell auf ControlBusy == false überprüfen, oder ist das nur hier im speziellen fall beim profil nötig?

nochmal vielen dank!!

greets,
Linus
greets, Linus

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 17:51

Das ist schon besser, geade wenn man mit threads arbeitet.
Ist halt ein wenig sicherer.

Sebastian

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 8. August 2007, 19:10

ok, danke!

greets,
Linus
greets, Linus

LED-Mode-Wechsel per .net-Anwendung scheitert

Sonntag, 12. August 2007, 05:01

Das ist sicher auch keine großartige Sache, scheitert vermutlich wieder an einer Kleinigkeit, deshalb kein eigener Thread:

Ich möchte einen Nachtmodus umsetzen, bei dem ich (wiederum per one-click) die leds ausschalten und umgekehrt diese wieder in den vorigen zustand bringen kann. das mit dem wechsel des modus von der temp-abhängigkeit zum manuellen modus mit led-leistung = 0 und zurück funktioniert an sich schon, nur scheitere ich daran, dass die rote led beim wechsel vom manuellen zum hot_cold modus den heller/dunkler modus ändert. sprich: nach dem wechsel ist eingestellt, dass die rote led bei steigender temperatur dunkler wird... das sollte natürlich nicht sein. und leider hab ich keinen plan, wie ich das weg bekomme.

hier der code:

Quellcode

1
2
3
4
5
6
7
// aquaduct.LED_Mode[1] = AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Manual_Auto_Switch;
// aquaduct.LED_PWM[1] = 0;
aquaduct.LED_Mode[1] = AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Hot_Cold;

string WriteData = aquaduct.CreateStringFromStructure(AquaComputer.TranslationClasses.aquaduct.TransferTypeRegister.RAM);
if (UsbHid.ControlBusy == false)
      UsbHid.HidWriteToDevice(i, WriteData);


Wahrscheinlich hab ich wieder etwas übersehen, ich nehme an, hier kann mir schnell geholfen werden... vielen dank jetzt schon mal.

greets,
Linus
greets, Linus

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 15. August 2007, 01:49

@Linus_Caldwell

Du könntest, wenn du möchtest deine kleinen Helferlein für uns alle online stellen, denn besonders das erste Tool finde ich schon echt praktisch :D 8)



Gruß Max Payne

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 15. August 2007, 09:59

Hi,
die led Modes und die zugehörigen register sind jeweils als Bitwerte definiert.

LED in den Manuellen Mode schalten:

Quellcode

1
2
3
4
5
byte Data = System.Convert.ToByte(Cd_aquaerodata.LED_Mode[1]);
                  SetBit(ref Data, (byte)AquaComputer.TranslationClasses.aquaero_Rev4.LED_ModeRegister.Manual_Auto_Switch, true);
                  Cd_aquaerodata.LED_Mode[1] = ((AquaComputer.TranslationClasses.aquaero_Rev4.LED_ModeRegister)(Data));
                  Cd_aquaerodata.LED_PWM[1] = Convert.ToByte((LED_PowerEdit1.ValueInt * 80) / 100);
                  WriteToDeviece(Cd_aquaerodata);


Wieder zurück in den auto Mode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// heller dunkler
byte Data = (byte)Cd_aquaerodata.LED_Mode[1];
                  SetBit(ref Data, (byte)AquaComputer.TranslationClasses.aquaero_Rev4.LED_ModeRegister.Hot_Cold, false);
                  LED_DunklerSel1.Checked = false;
                  Cd_aquaerodata.LED_Mode[1] = ((AquaComputer.TranslationClasses.aquaero_Rev4.LED_ModeRegister)(Data));
                  

//auto mode
byte Data = System.Convert.ToByte(Cd_aquaerodata.LED_Mode[2]);
                  SetBit(ref Data, (byte)AquaComputer.TranslationClasses.aquaero_Rev4.LED_ModeRegister.Manual_Auto_Switch, false);
                  Cd_aquaerodata.LED_Mode[2] = ((AquaComputer.TranslationClasses.aquaero_Rev4.LED_ModeRegister)(Data));


WriteToDeviece(Cd_aquaerodata);


Sebastian

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 15. August 2007, 15:25

@Max:
das hatte ich sogar vor, aber dazu muss ich sie noch ein wenig umbauen, momentan "missbrauche" ich wirklich 1:1 die setClock-Solution, also mit GUI etc. nur mit angepasstem code. letztendlich werde ich das so umbauen, dass man die exe von samurize aus einfach mit entsprechenden flags ausführen kann (also zb. setaquaduct.exe toggleprofile). sobald ich zeit habe, wird das erldigt und auch online gestellt ;-)

@Sebastian:
vielen dank, du hast mir wieder spitze geholfen!!

hier das resultat:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
byte Data1 = System.Convert.ToByte(aquaduct.LED_Mode[1]);
byte Data2 = System.Convert.ToByte(aquaduct.LED_Mode[2]);

if (GetBit(Data1, (byte)AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Manual_Auto_Switch))
{
      SetBit(ref Data1, (byte)AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Manual_Auto_Switch, false);
      SetBit(ref Data2, (byte)AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Manual_Auto_Switch, false);
      aquaduct.LED_Mode[1] = ((AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister)(Data1));
      aquaduct.LED_Mode[2] = ((AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister)(Data2));
}
else
{
      SetBit(ref Data1, (byte)AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Manual_Auto_Switch, true);
      SetBit(ref Data2, (byte)AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister.Manual_Auto_Switch, true);
      aquaduct.LED_Mode[1] = ((AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister)(Data1));
      aquaduct.LED_PWM[1] = Convert.ToByte(0);
      aquaduct.LED_Mode[2] = ((AquaComputer.TranslationClasses.aquaduct.LED_ModeRegister)(Data2));
      aquaduct.LED_PWM[2] = Convert.ToByte(0);
}

string WriteData = aquaduct.CreateStringFromStructure(AquaComputer.TranslationClasses.aquaduct.TransferTypeRegister.RAM);
if (UsbHid.ControlBusy == false)
      UsbHid.HidWriteToDevice(i, WriteData);


und die functions SetBit und GetBit (keinen plan, ob c# bzw .net da schon was mitliefert, wahrscheinlich schon, aber so klappts... pasta :-) ):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void SetBit(ref byte B, byte pos, bool Value)
{
      byte x;
      if ( Value )
            x = (byte)(B &#124; (1 << (pos - 1)));
      else
            x = (byte)(B & ~(1 << (pos - 1)));
      B = x;
}

Boolean GetBit(byte B, byte pos)
{
      return ((B & (1 << (pos - 1))) != 0);
}


greets,
Linus
greets, Linus

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 15. August 2007, 16:15

Zitat von »Linus_Caldwell«


und die functions SetBit und GetBit (keinen plan, ob c# bzw .net da schon was mitliefert, wahrscheinlich schon, aber so klappts... pasta :-) ):

In den Translation Classes sind breits entsprechende Funktionen mit drin bzw. eine unterklasse mit den bitfunktionen.

Sebastian

Re: Profilwechsel per .net-Anwendung scheitert

Mittwoch, 15. August 2007, 19:46

ausgezeichnet, hab meine schon wieder rausgeschmissen ;-)

und schon wieder ein kleines problem: [snip] - hat sich erledigt, war natürlich mein fehler :-)

greets,
linus
greets, Linus