• 23.07.2025, 03:56
  • Register
  • Login
  • You are not logged in.

 

Linus_Caldwell

Junior Member

Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 2:20am

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:

Source code

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@50

Foren-Inventar

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 7:09am

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

Linus_Caldwell

Junior Member

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 4:32pm

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

sebastian

Administrator

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 4:49pm

hallo, probiere es mal so:

Source code

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

Linus_Caldwell

Junior Member

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 5:20pm

yeah!!!! ;D

vielen dank sebastian!

so funzts jetzt:

Source code

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

sebastian

Administrator

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 5:51pm

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

Sebastian

Linus_Caldwell

Junior Member

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 8th 2007, 7:10pm

ok, danke!

greets,
Linus
greets, Linus

Linus_Caldwell

Junior Member

LED-Mode-Wechsel per .net-Anwendung scheitert

Sunday, August 12th 2007, 5:01am

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:

Source code

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

Max_Payne

God

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 15th 2007, 1:49am

@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

sebastian

Administrator

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 15th 2007, 9:59am

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

LED in den Manuellen Mode schalten:

Source code

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:

Source code

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

Linus_Caldwell

Junior Member

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 15th 2007, 3:25pm

@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:

Source code

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 :-) ):

Source code

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

sebastian

Administrator

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 15th 2007, 4:15pm

Quoted from "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

Linus_Caldwell

Junior Member

Re: Profilwechsel per .net-Anwendung scheitert

Wednesday, August 15th 2007, 7:46pm

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