![]() |
Re: usb raketenwerfer software suckt...
Das erhoeht aber die Durchschlagskraft und damit ist das Ding illegal.
|
Re: usb raketenwerfer software suckt...
Es handelt sich hier doch um Schaumstoffraketen und nicht um Kriegsmaschinerie. Ich find sowas allerdings recht überflüßig, vorallem im Büro, auf LANs mag sowas vielleicht 5 Minuten Spaß machen aber sonst. Und ob man das ding wirklich tunen muss. Mit Paintball Waffen wär ich da lieber vorsichtiger, dass ist ja kein Spiel mehr... Trotzdem ist die Konfigurationsgeschichte interessant, die Source würd ich auch gern sehen wenns fertig ist.
|
Re: usb raketenwerfer software suckt...
Zitat:
finde das auch alles sehr interessant und danke an dieser stelle dem robert nochmal recht herzlich für seine mühe. |
Re: usb raketenwerfer software suckt...
So ein Stueck Schaumstoff bei grosser Geschwindigkeit hat das Space Shuttle kaputtgemacht. Der menschliche Koerper ist da sehr empfindlich z. B. wenn man was ins Auge kriegt.
Natuerlich werde ich die Sourcen hier posten. Es geht hier wie beim PowerMate-Thread um die Erforschung unbekannter HID-Geraete und um das Design einer Anwendung dazu. Besser kann man doch kaum lehren. Der Thread enthaelt alles was man braucht. Schwierigkeiten bei der Kommunikation, rechtliche Grenzen. Das naechste sind die Designideen fuer das Programm. |
Re: usb raketenwerfer software suckt...
das würde ich sehr gerne übernehmen, also das design.
ich glaube das kann ich gut ;). mach am besten nen rohling den sich jeder selbst designen kann ;) das wäre groovie ! |
Re: usb raketenwerfer software suckt...
gibts news ? kann es kaum noch erwarten ;)..ich komm hier nicht weiter
|
Re: usb raketenwerfer software suckt...
Alter Mann ist doch kein D-Zug ;-)
Ich musste noch ein bischen Feinschliff betreiben wie Kommentare. Man erstelle sich ein Delphi-Projekt und speichere als OfficeRocketMain.pas und OfficeRocket.dpr. Danach die untenstehende Source kopieren und in OfficeRocketMain.pas pasten. Das selbe fuer die Form. Dazu schaltet man mit Rechtsklick auf "View as Text" um.
Code:
object OfficeRocketForm: TOfficeRocketForm
Left = 501 Top = 124 BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsSingle Caption = 'OfficeRocket' ClientHeight = 171 ClientWidth = 173 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False Position = poScreenCenter PixelsPerInch = 96 TextHeight = 13 object UpBtn: TSpeedButton Tag = 2 Left = 72 Top = 32 Width = 23 Height = 22 AllowAllUp = True GroupIndex = 2 Enabled = False Glyph.Data = { 76010000424D7601000000000000760000002800000020000000100000000100 04000000000000010000120B0000120B00001000000000000000000000000000 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333000333 3333333333777F33333333333309033333333333337F7F333333333333090333 33333333337F7F33333333333309033333333333337F7F333333333333090333 33333333337F7F33333333333309033333333333FF7F7FFFF333333000090000 3333333777737777F333333099999990333333373F3333373333333309999903 333333337F33337F33333333099999033333333373F333733333333330999033 3333333337F337F3333333333099903333333333373F37333333333333090333 33333333337F7F33333333333309033333333333337373333333333333303333 333333333337F333333333333330333333333333333733333333} NumGlyphs = 2 OnClick = CommandClick end object LeftBtn: TSpeedButton Left = 40 Top = 64 Width = 23 Height = 22 AllowAllUp = True GroupIndex = 1 Enabled = False Glyph.Data = { 76010000424D7601000000000000760000002800000020000000100000000100 04000000000000010000120B0000120B00001000000000000000000000000000 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 3333333333333333333333333333333333333333333333333333333333333333 3333333333333FF3333333333333003333333333333F77F33333333333009033 333333333F7737F333333333009990333333333F773337FFFFFF330099999000 00003F773333377777770099999999999990773FF33333FFFFF7330099999000 000033773FF33777777733330099903333333333773FF7F33333333333009033 33333333337737F3333333333333003333333333333377333333333333333333 3333333333333333333333333333333333333333333333333333333333333333 3333333333333333333333333333333333333333333333333333} NumGlyphs = 2 OnClick = CommandClick end object RightBtn: TSpeedButton Tag = 1 Left = 104 Top = 64 Width = 23 Height = 22 AllowAllUp = True GroupIndex = 1 Enabled = False Glyph.Data = { 76010000424D7601000000000000760000002800000020000000100000000100 04000000000000010000120B0000120B00001000000000000000000000000000 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 3333333333333333333333333333333333333333333333333333333333333333 3333333333333333333333333333333333333333333FF3333333333333003333 3333333333773FF3333333333309003333333333337F773FF333333333099900 33333FFFFF7F33773FF30000000999990033777777733333773F099999999999 99007FFFFFFF33333F7700000009999900337777777F333F7733333333099900 33333333337F3F77333333333309003333333333337F77333333333333003333 3333333333773333333333333333333333333333333333333333333333333333 3333333333333333333333333333333333333333333333333333} NumGlyphs = 2 OnClick = CommandClick end object DownBtn: TSpeedButton Tag = 3 Left = 72 Top = 96 Width = 23 Height = 22 AllowAllUp = True GroupIndex = 2 Enabled = False Glyph.Data = { 76010000424D7601000000000000760000002800000020000000100000000100 04000000000000010000120B0000120B00001000000000000000000000000000 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333303333 333333333337F33333333333333033333333333333373F333333333333090333 33333333337F7F33333333333309033333333333337373F33333333330999033 3333333337F337F33333333330999033333333333733373F3333333309999903 333333337F33337F33333333099999033333333373333373F333333099999990 33333337FFFF3FF7F33333300009000033333337777F77773333333333090333 33333333337F7F33333333333309033333333333337F7F333333333333090333 33333333337F7F33333333333309033333333333337F7F333333333333090333 33333333337F7F33333333333300033333333333337773333333} NumGlyphs = 2 OnClick = CommandClick end object ShootBtn: TSpeedButton Tag = 4 Left = 59 Top = 128 Width = 49 Height = 22 AllowAllUp = True Caption = 'Shoot' Enabled = False OnClick = ShootBtnClick end object HidCtl: TJvHidDeviceController OnDeviceChange = HidCtlDeviceChange Left = 136 Top = 8 end end
Delphi-Quellcode:
Ich kann natuerlich nicht garantieren das es funktioniert, daher bitte testen und Fehler beseitigen.
unit OfficeRocketMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, JvHidControllerClass; type TRocketInitRec = packed record ReportID: Byte; Payload: array [0..7] of Byte; end; TRocketCommandRec = packed record ReportID: Byte; Payload: array [0..63] of Byte; end; TRocketCommand = (rcLeft, rcRight, rcUp, rcDown, rcFire); TRocketCommands = set of TRocketCommand; TOfficeRocketForm = class(TForm) UpBtn: TSpeedButton; LeftBtn: TSpeedButton; RightBtn: TSpeedButton; DownBtn: TSpeedButton; ShootBtn: TSpeedButton; HidCtl: TJvHidDeviceController; procedure CommandClick(Sender: TObject); procedure HidCtlDeviceChange(Sender: TObject); procedure ShootBtnClick(Sender: TObject); public // both devices are needed to access Rocket Launcher RocketCommand: TJvHidDevice; RocketInit: TJvHidDevice; Commands: TRocketCommands; procedure SendRocketCommands(Cmds: TRocketCommands); end; var OfficeRocketForm: TOfficeRocketForm; implementation {$R *.dfm} function CheckCommandDevice(HidDev: TJvHidDevice): Boolean; stdcall; begin Result := (HidDev.Attributes.VendorID = $1130) and (HidDev.Attributes.ProductID = $0202) and (HidDev.Caps.OutputReportByteLength = 65); end; function CheckInitDevice(HidDev: TJvHidDevice): Boolean; stdcall; begin Result := (HidDev.Attributes.VendorID = $1130) and (HidDev.Attributes.ProductID = $0202) and (HidDev.Caps.OutputReportByteLength = 9); end; procedure TOfficeRocketForm.HidCtlDeviceChange(Sender: TObject); var Found: Boolean; begin // give back devices no matter which plug or unplug caused the event HidCtl.CheckIn(RocketCommand); HidCtl.CheckIn(RocketInit); // try to get the two Rocket devices if HidCtl.CheckOutByCallback(RocketCommand, CheckCommandDevice) then HidCtl.CheckOutByCallback(RocketInit, CheckInitDevice); // enable/disable GUI Found := Assigned(RocketCommand) and Assigned(RocketInit); DownBtn.Enabled := Found; LeftBtn.Enabled := Found; RightBtn.Enabled := Found; ShootBtn.Enabled := Found; UpBtn.Enabled := Found; end; procedure TOfficeRocketForm.SendRocketCommands(Cmds: TRocketCommands); const // init data to write to RocketInit device Init1: TRocketInitRec = (ReportID: $00; Payload: ($55, $53, $42, $43, $00, $00, $04, $00)); Init2: TRocketInitRec = (ReportID: $00; Payload: ($55, $53, $42, $43, $00, $40, $02, $00)); // data template to write to RocketCommand device (causes stop if unmodified) CmdEmpty: TRocketCommandRec = (ReportID: $00; Payload: ($00, $00, $00, $00, $00, $00, $08, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00)); var Written: DWORD; Init: TRocketInitRec; Command: TRocketCommandRec; I: TRocketCommand; begin // send both init commands Init := Init1; RocketInit.WriteFile(Init, SizeOf(Init), Written); Init := Init2; RocketInit.WriteFile(Init, SizeOf(Init), Written); // collect commands into command record Command := CmdEmpty; for I := Low(TRocketCommand) to High(TRocketCommand) do if I in Cmds then Command.Payload[Ord(I) + 1] := $01; // send commands RocketCommand.WriteFile(Command, SizeOf(Command), Written); end; procedure TOfficeRocketForm.CommandClick(Sender: TObject); begin with Sender as TSpeedButton do if Down then Commands := Commands + [TRocketCommand(Tag)] else Commands := Commands + [TRocketCommand(Tag)]; SendRocketCommands(Commands); end; procedure TOfficeRocketForm.ShootBtnClick(Sender: TObject); begin with Sender as TSpeedButton do begin Commands := Commands + [TRocketCommand(Tag)]; SendRocketCommands(Commands); Commands := Commands + [TRocketCommand(Tag)]; end; end; end. |
Re: usb raketenwerfer software suckt...
Zitat:
|
Re: usb raketenwerfer software suckt...
ich kriege die buttons nicht aktiviert :). also compilieren geht, ich habe die button mal auf enabled = true gesetzt aber es passiert nichts
wenn ich diesen block rausnehme
Delphi-Quellcode:
dann sind die aktiviert aber wenn ich sie dann anklicke, dann bekomme ich einen zugriffsverletzung.
Found := Assigned(RocketCommand) and Assigned(RocketInit);
DownBtn.Enabled := Found; LeftBtn.Enabled := Found; RightBtn.Enabled := Found; ShootBtn.Enabled := Found; upBtn.Enabled := Found; |
Re: usb raketenwerfer software suckt...
Liste der Anhänge anzeigen (Anzahl: 1)
Na das duerfte heissen das die CheckOutByCallback's fehlschlagen. Debugge das doch mal. Pruef auch ob ich VendorID, ProductID und OutputReportByteLength richtig abfrage.
@Lucky, es geht mir hier auch darum die Source direkt vorzustellen damit man sie diskutieren kann. Zip erneuert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz