Sponsored links

Go Back   MP3Car.com > Mp3Car Technical > General Hardware Discussion > Fusion Brain > FB Software


Reply
 
Share Thread Tools Display Modes
Old 02-25-2008, 01:03 PM   #1
Low Bitrate
 
erie's Avatar
 
Join Date: May 2006
Location: USA
Posts: 87
erie is on a distinguished road
Help with .net code for FB

Using the .Net 2005 Studio and the code that I copied from Arrow, here) I can use the FUSB_Initialize command and I get a unique pointer, I can use the FUSB_Free command and I get a 0 if the device was opened, and a 50 if I click it again. So I know that I am talking to the device. But whenever I send the "USBIO.FUSB_Send(Uint0, OutChunks)" the program just hangs and I have to force it close. If I use FCC.exe I can turn on and off the DigOut ports, the board it tested OK. I'm at work right now so I cant post the code, but it is the same as Arrow's (thank you Arrow. I am using VS 2005 Sp1, XP Pro Sp2. I am a newb to .net, but I figured this is a great opportunity to learn
__________________
06 Galaxy Gray Si #0308
CarPc Progress -
10%---------50%---------100%
-[XXXXXXXXXXXXXXXXXXXXXX]-
erie is offline   Reply With Quote
Advertisement
 
Advertisement
Sponsored links

Old 02-25-2008, 03:46 PM   #2
Variable Bitrate
 
Arrow's Avatar
 
Join Date: Feb 2006
Location: West Lafayette, IN
Posts: 288
Arrow is on a distinguished road
Sounds like you are able to establish a pointer, but not actually communicate properly with the board. There is one more step that was not included in my code. Maybe you are missing that. You need to have another routine somewhere that sets each of the onOffBit variables to either 1 or 0 and then calls SendDataBlock(). Maybe without that, the onOffBits are not the correct values and the Brain or drivers don't know what to do.
Arrow is offline   Reply With Quote
Old 02-25-2008, 09:28 PM   #3
Low Bitrate
 
erie's Avatar
 
Join Date: May 2006
Location: USA
Posts: 87
erie is on a distinguished road
This should look familiar. Per your advice, on FormLoad I set all the values of OnOffBit(j) to 0. Still the same result. I've attached the code, hoping that you could spot my error. Thanks for your help

Code:
Dim FlipFlop As Boolean = True 'Keep-alive for brain Dim OutChunks(64) As Byte 'Bytes for 64bit data chunk being sent to brain Dim OnOffBit(12) As Integer 'Bit to turn on or off an output Dim Uint0 As UInt32 = Convert.ToUInt32(0) 'Uint representing zero Dim VIDPID As String = "USB\VID_04D8&PID_000C\5&2C65B59D&0&1"

Code:
Public Sub SendDataBlock() If Uint0 = 0 Then 'only Init once If USBIO.FUSB_Initialize(Uint0, VIDPID, Uint0) Then 'Initialize Device Debug.WriteLine("Initialized: " & Convert.ToString(Uint0)) Else Debug.WriteLine("Error Initializing: " & Convert.ToString(Uint0)) End If Else Debug.WriteLine("Already Initializing: " & Convert.ToString(Uint0)) End If 'Clear ByteBlock Dim cnt As Integer For cnt = 0 To 63 OutChunks(cnt) = 0 Next 'Convert FlipFlop Boolean to an integer Dim KeepAlive As Integer = Convert.ToInt32(FlipFlop) Dim i As Integer For i = 0 To 11 OutChunks(i) = Convert.ToByte(0 & KeepAlive & OnOffBit(i)) Next OutChunks(61) = Convert.ToByte(255) 'wake up PIC USBIO.FUSB_Send(Uint0, OutChunks) FlipFlop = Not FlipFlop 'Flip keepalive bit End Sub Private Sub btn0on_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn0on.Click OnOffBit(0) = 1 'Turn Output on SendDataBlock() End Sub Private Sub btn0off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn0off.Click OnOffBit(0) = 0 'Turn Output off SendDataBlock() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim j As Integer For j = 0 To 11 'need to fill a value for all dig outs OnOffBit(j) = 0 Next End Sub Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing USBIO.FUSB_Free(Uint0) End Sub

__________________
06 Galaxy Gray Si #0308
CarPc Progress -
10%---------50%---------100%
-[XXXXXXXXXXXXXXXXXXXXXX]-
erie is offline   Reply With Quote
Old 02-26-2008, 12:56 AM   #4
Newbie
 
Join Date: Feb 2008
Posts: 9
AtomicMonkey is an unknown quantity at this point
It hangs because that DLL is borked. The second (and often first) call to FUSB_Send will hang, as you've said. All will work provided you first do a read first. Waste of time but at least it works. So before you start setting your On/Off bits on the array do a read and all will be ok. One additional cosmetic detail is that your array is actually 65 elements long. Won't hurt anything, just not tidy. Apparently in VB you declare last index of the array not length.

HTH
Also, I still don't know what that deal with this flippity floppy thing is, just set your keep-alive bit when you want the output on (together with bit 0 set to 1) and don't set it when turning output off. Otherwise if you get your order switched somehow and don't set the keepalive bit when the button is supposed to stay on, it won't.

Last edited by AtomicMonkey; 02-27-2008 at 02:55 PM.
AtomicMonkey is offline   Reply With Quote
Old 02-26-2008, 02:00 AM   #5
Low Bitrate
 
erie's Avatar
 
Join Date: May 2006
Location: USA
Posts: 87
erie is on a distinguished road
AtomicMonkey - That was it, if I do a USBIO.FUSB_Receive first and all the USBIO.FUSB_Send commands complete without any problems. Thanks for the tip on the keep-alive. Its a good thing to able to talk to the brain. Thanks
__________________
06 Galaxy Gray Si #0308
CarPc Progress -
10%---------50%---------100%
-[XXXXXXXXXXXXXXXXXXXXXX]-
erie is offline   Reply With Quote
Old 02-26-2008, 04:14 AM   #6
Maximum Bitrate
 
galvitron's Avatar
 
Join Date: Mar 2007
Location: Socal
Posts: 713
galvitron is an unknown quantity at this point
Quote:
It hangs because that DLL is borked.

Best line ever.
__________________
2006 Lancer Evolution IX MR In-Dash PC Project - WIP

Planning:
[----------] 100%
Purchasing:
[----------] 90%
Installation/Fab/Assembly (Revised v2):
[----------] 90%

galvitron is offline   Reply With Quote
Old 02-26-2008, 05:45 AM   #7
Variable Bitrate
 
Arrow's Avatar
 
Join Date: Feb 2006
Location: West Lafayette, IN
Posts: 288
Arrow is on a distinguished road
Hmm... I flippity floppity that bit all day long and my stuff works like a charm.
Arrow is offline   Reply With Quote
Old 02-26-2008, 05:46 AM   #8
Variable Bitrate
 
Arrow's Avatar
 
Join Date: Feb 2006
Location: West Lafayette, IN
Posts: 288
Arrow is on a distinguished road
Actually, If i don't flippity floppity that bit, the brain works like it's supposed to and shuts itself off.
Arrow is offline   Reply With Quote
Sponsored links
Advertisement
 
Advertisement
Old 02-27-2008, 12:06 AM   #9
Fusion Brain Creator
 
2k1Toaster's Avatar
 
Join Date: Mar 2006
Location: Colorado, but Canadian!
Posts: 8,862
2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future
Quote: Originally Posted by Arrow View Post
Actually, If i don't flippity floppity that bit, the brain works like it's supposed to and shuts itself off.



That is the supposed function of the Fusion Brain.
2k1Toaster is offline   Reply With Quote
Old 02-27-2008, 12:27 AM   #10
Newbie
 
Join Date: Feb 2008
Posts: 9
AtomicMonkey is an unknown quantity at this point
Toaster I realize that is the function, what I'm saying this flipping does not appear necessary for the the function to function. The timer will shut the output off with or without the keep-alive set (matter of timing), though w/o it timer will not reset on subsequent same state write, but if always sending 3 + timer for ON and 0 + timer for OFF does the same exact thing: output will shut off after timer expired with no state confirmation sent.
Ok, my apologies for spreading crap information. Appears the timer in fact will not reset if u sent same value before it expires.

Last edited by AtomicMonkey; 02-27-2008 at 12:52 PM. Reason: Getting foot outta my mouth
AtomicMonkey is offline   Reply With Quote
Old 04-06-2008, 06:20 AM   #11
Newbie
 
Join Date: Mar 2008
Posts: 16
joeberni is an unknown quantity at this point
Post Your Code

Would someone who has been able to get this working through VB.net be willing to post their entire code? By entire I just mean all of the pieces that are needed to turn outputs on and off.

I've been pulling my hair out for hours now but my app is still hanging. I know it's just a small stupid error that I've made but for the life of me I cannot find where it is.

Thanks.
joeberni is offline   Reply With Quote
Old 04-06-2008, 10:43 AM   #12
Constant Bitrate
 
mx270a's Avatar
 
Join Date: Aug 2003
Location: Iowa
Posts: 167
mx270a is on a distinguished road
Here is the code I'm using in VB2008 Express.

Code:
<System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_Initialize(ByRef pFusionUSB As UInt32, ByVal deviceID As String, ByVal instanceNumber As UInt32) As Boolean End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_Receive(ByVal pFusionUSB As UInt32, ByVal buffer As Byte()) As Boolean End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_Send(ByVal pFusionUSB As UInt32, ByVal buffer As Byte()) As Boolean End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_Free(ByRef pFusionUSB As UInt32) As UInt32 End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_printf(ByVal pFusionUSB As UInt32) As Boolean End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_GetWinUSBerror(ByVal pFusionUSB As UInt32) As UInt32 End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_GetFUSBstatus(ByVal pFusionUSB As UInt32) As UInt32 End Function <System.Runtime.InteropServices.DllImport("FusionUSB.dll")> _ Public Shared Function FUSB_GetDeviceInstanceID(ByVal pFusionUSB As UInt32) As String End Function Public VIDPID As String = "" Dim Uint0 As UInt32 = Convert.ToUInt32(0) 'Uint representing zero Private KeepAliveBit As Integer Private OutputArray(64) As Byte Private InputArray(64) As Byte Private DigOut(12) As Integer Public AnalogIn(10) As Integer Public Sub LoadVIDPIDfromRegistry(ByRef textbox As TextBox) Dim location As String = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinUSB\Enum" Dim storedvidpid As String = My.Computer.Registry.GetValue(location, "0", Nothing) If storedvidpid = Nothing Then MsgBox("VID/PID for device #0 not found in the registry. Are the Fusion Brain drivers loaded?") Else MsgBox("The following VID/PID was found:" & vbCrLf & vbCrLf & storedvidpid) VIDPID = storedvidpid End If End Sub Public Sub FB_Connect() 'Check the status to see if it is already connected Try If FUSB_GetFUSBstatus(Uint0) = 0 Then 'Status is 0, meaning it is already connected. Can't connect it again. Else 'Status isn't 0, lets try to connect to the Fusion Brain FUSB_Free(Uint0) If FUSB_Initialize(Uint0, VIDPID, Uint0) Then 'Init was successful For i = 0 To 63 OutputArray(i) = CByte(0) Next OutputArray(61) = CByte(255) 'This is needed to wake up the FB, for firmwares after November 2007 For i = 0 To 11 DigOut(i) = 0 Next FUSB_Send(Uint0, OutputArray) If (FUSB_Receive(Uint0, InputArray)) Then lblFirmwareVersion.Text = InputArray(63).ToString & "." & InputArray(62).ToString End If KeepAliveBit = 1 'Start the timer for sending data to the FB Timer.Start() Else MsgBox("Failed to initialize that Fusion Brain. Make sure it is connected and that you are specifying the correct USB VID/PID number." & vbCrLf & vbCrLf & "The VID/PID specified was: " & VIDPID) End If End If Catch ex As Exception MsgBox("Error: DLL not found. Are you sure the fusion brain drivers are installed and the FusionUSB.dll file is in the same folder as the .exe?" & vbCrLf & vbCrLf & "The reported error is:" & vbCrLf & ex.ToString) End Try End Sub Public Sub FB_Disconnect() 'This gets called from the MyBase.FormClosed event as the app closes 'Disable timer, Set all outputs to off, send data to the FB one last time, then disconnect from the FB Timer.Stop() For i = 0 To 11 DigOut(i) = 0 OutputArray(i) = Convert.ToByte(0 & KeepAliveBit & 0) Next FUSB_Send(Uint0, OutputArray) FUSB_Free(Uint0) End Sub Public Sub FB_SendReceive() 'This sub is called from a Timer_Tick event, which runs at 10Hz. DigOut(0) = 1 DigOut(1) = 0 DigOut(2) = 0 DigOut(3) = 0 DigOut(4) = 0 DigOut(5) = 0 DigOut(6) = 0 DigOut(7) = 0 DigOut(8) = 0 DigOut(9) = 0 DigOut(10) = 0 DigOut(11) = 0 For i = 0 To 11 OutputArray(i) = Convert.ToByte(0 & KeepAliveBit & DigOut(i)) Next FUSB_Send(Uint0, OutputArray) 'Now, get the info from the fusion brain If (FUSB_Receive(Uint0, InputArray)) Then 'It retured true, meaning it got data. Process it. For i = 0 To 9 AnalogIn(i) = CInt(InputArray(i * 2 + 12)) 'Uses only the first byte 0-255 (8 bits) 'AnalogIn(i) = (CInt(InputArray(i * 2 + 12)) * 4) + CInt(InputArray(i * 2 + 13) / 64) 'Uses both bytes 0-1023 (10 bits) 'Range of 0-255, so divide by 255 to get a percent, then multiply by 5 to get volts. 'AnalogIn(i) = (totalin / 1023) * 5 Next End If 'Toggle the keepalive bit for nexttime. If KeepAliveBit = 0 Then KeepAliveBit = 1 Else KeepAliveBit = 0 End If End Sub

mx270a is offline   Reply With Quote
Old 04-07-2008, 02:42 AM   #13
Newbie
 
Join Date: Mar 2008
Posts: 16
joeberni is an unknown quantity at this point
Thanks MX! Very much appreciated.

Even after using your code my app is still hanging. Can you please confirm that the code you posted above is all in a separate class (i.e. USBIO) which is referenced from your form (i.e. Form1)?

Also, did you have to throw in some FUSB_Recieve calls on your form as per a previous post?

Thanks again for your help.

Joe
joeberni is offline   Reply With Quote
Old 04-07-2008, 03:47 AM   #14
Fusion Brain Creator
 
2k1Toaster's Avatar
 
Join Date: Mar 2006
Location: Colorado, but Canadian!
Posts: 8,862
2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future2k1Toaster has a brilliant future
Try unplugging the device, wait for the windows "duh-ding" and then plug it back in.

If you call the DLL and do not exit it correctly, it will lock the device stream. So if you were debugging or something and didnt close it properly, you have to close it. Easiest way is to let Windows do it for you by making the device disappear to start fresh and plug it back in.

It is the limitation of the FusionUSB.dll file. If anyone has ideas on how to improve the dll let me know as I am learning as Im going! But it works as long as you dont hang it.
2k1Toaster is offline   Reply With Quote
Old 04-07-2008, 05:54 AM   #15
Newbie
 
Join Date: Mar 2008
Posts: 16
joeberni is an unknown quantity at this point
Finally...

OK, finally got it going. Turns out that somewhere along the way I began sending a null value as the VIDPID. It makes me cry thinking about how many hours of my life I've spent chasing down stupid little errors like this... ::

Thanks again everyone!

Joe
joeberni is offline   Reply With Quote
Advertisement
 
Advertisement
Sponsored links

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Weird Registration Code and Hardware Code problem lookinco StreetDeck 2 09-30-2006 03:25 AM
How do I use the Extension Plugin Interface ? guino RR FAQ 0 06-11-2006 06:49 PM
How do I use the Base plugin sources ? guino RR FAQ 1 04-24-2006 04:43 PM
.NET code for OBD-II ? Jeep Engine Management, OBD-II, Engine Diagnostics, etc. 6 05-09-2005 11:44 AM
GPS/MapPoint VB Source Code stevieg Software & Software Development 4 06-08-2004 03:24 PM



All times are GMT -5. The time now is 03:17 AM.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.3.2
Copyright © 1999 - 2008 Mp3Car.com Inc.Ad Management by RedTyger
Message Board Statistics