|
I'm not entirely sure if your boss is right or wrong because I don't know the configuration of your computer systems.
The USB is a bus that resides in the computer. The low-level drivers (supplied by Microsoft) allow the bus to enumerate and identify a piece of hardware and then send a request to the registry to find the correct function driver for the device by using the vendor and product IDs returned by the USB Descriptors. This is how the bus works in a nutshell.
Your computer systems might have a pseudo-device driver that emulates a COM port. When this driver is loaded, it opens a handle to the low-level bus drivers and then creates a virtual COM port device. After this, passing a USB packet into the COM port is routed directly to the low-level drivers and thus into the bus. Needless to say, an errorneous packet might cause misbehaviour on the system. This is probably what your boss had in mind. You should ask him for clarification, though.
When this pseudo-device driver is not in use, all devices attached to the bus are represented by device objects. For each hardware device object that has a suitable function driver available and loaded, a driver object also exists. Additionally, possible filter driver objects may exist. You can use the WinObj object viewer (Google for it) to view all hardware device objects, driver objects and other object currently existing in your system. The same program can be used to obtain a valid name for a driver/device object. If you are operating on kernel mode, you can use this low-level name to open a handle into the driver/device. In user mode, only the symbolic link names, and a restricted list of device names, are available due to security restrictions imposed by Windows NT/2000/XP framework.
You can view all these through WinObj. The symbolic names can be found in the 'GLOBAL??' subtree. Actual device names can be found from 'Device' subtree. For reference, try looking for a normal COM port. You can find it lying around there somewhere. "\Device\Serial0" is COM1 for me.
From this list (Global??), you can even identify your USB device by looking at the vendor and product IDs. To get a rough idea who's device you're looking at, you can use the Linux-USB group's list, which is "somewhat" regularly updated. It can be found here[^]. All USB devices are listed in form "USB#Vid_xxxx&Pid_xxxx&MI_xx#.....". The first is the vendor ID, the next the product ID. The last one I'm not sure of.
Remember that a device might have multiple entries in WinObj's GLOBAL?? subtree. The one we are interested in is \Device\USBPDO-X which refers to a physical device object in the USB bus. Opening a handle to this device allows you to read/write from as if reading/writing a file. Security restrictions might apply, though. You can view these through WinObj as well. If you can't view the properties of an object, you don't have enough priviledges. Looking at the security tab, you can see which users have rights to read/write/modify a device.
For an example, Logitech has a vendor ID of 046d hex. I have the Logitech MX500 optical mouse attached, and it's product ID is c025 hex. Both of these are from Linux-USB list. Thus, in "GLOBAL??" I have an entry "USB#Vid_046d&Pid_c025 etc" which is a symbolink link to "\DEVICE\USBPDO-5". This is the physical device object for my MX500. Opening it's properties, I can see that in user mode, I only have 'query state' priviledge, allowing me to request status information about the device. If I was logged in as an administrator, I could also 'delete' the object, which means the device was logically detached from the bus. The bus would, however, soon re-detect the device, re-load the drivers and re-create the device objects.
I can't, in user mode, read or write from the device. For that purpose, I would need to write a kernel-mode program. This program should create a virtual device, say USB MX500 mouse, open the device handle for USBPDO-5, and route the commands sent to the virtual device to the physical device and back. A crude hack, I'd call it, but it would fill it's purpose
Well, that was a huge reply. Hope it's informative. I'm in consideration of writing an article about this matter, but my current thesis work is a priority.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
USB is more like a socket - it has it's own protocol stack etc.
When using a USB<->serial adaptor the device driver, protocol stack and adaptor are invisible so you simply see the Windows Com port.
Working directly with USB is a totally different topic !
Elaine
The tigress is here
|
|
|
|
|
thanks everybody
doneirik
|
|
|
|
|
Hi All,
I am getting error of Debug Assertion failed in my VC++ 6.0 application
Program : My Exe name
File:list_s.cpp
Line:451
When I searched for this file it is present in the src folder of the VC++ mfc installation on my machine.Location is "C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC" But this file is not present in the machine which is runnning the application.
My program exe is compiled in Debug mode.
the program extensively writes log files on the disk and CPU usage is high when the program is running.
Will it be related to memory allocation?
I am thinking so because the line 451 contains code
"ASSERT(AfxIsValidAddress(m_pNodeHead, sizeof(CNode)));"
Can anyone help me to rectify the error?
Thanks in Advance
Regards
Shailaja
|
|
|
|
|
Is the bug reproductible ? I mean, the bug appear each time you're doing some specific actions ? Or is it totaly random ?
If the bug is reproductible, you can use the debugger (F5 to start and F9 to set breakpoints) and try to localize the bug in your code.
|
|
|
|
|
thanks for promp reply.
The bug comes abruptly mostly when the load on the application is more.
The application is comunicating with remote PC for communication requests sent by that remote machine and it is also sending the requests as well as response to the remote machine.
and it writes log of every send and receive operation.
when number of requests received go high that time the problem is occuring.
|
|
|
|
|
I Think you are using the List Class in your program and during some memory operation it is failing .
give me you app if possible i will try to sort out bug
-----------------------------
"I Think this Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
i am trying to send the file to your email id but no success.
mail is bounced
|
|
|
|
|
Which Email address Mine
alok#efextra.com
-----------------------------
"I Think this Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
hi everybody,
i have a little problem (maybe very easy to solve for some), but i can't find out how to solve it.
it is about tab controls (CTabCtrl ) and the way to set controls in it.
actually, i have many texts (CStatic ) which i would like to appear only depending on the selected tab. I cannot "attach" my static texts with the Tab control directly in the dialog editor, so how could i do ?
I only found that i initialize the tab control in OnInitDialog() (dialog-based application) ; and TCN_SELCHANGE overload allow me to catch a tab selection change.
thanks in advance for your answers.
TOXCCT >>> GEII power [toxcct][VisualCalc]
|
|
|
|
|
See the following on http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_core_using_ctabctrl.asp[^]
Using CTabCtrl
A "tab control" is analogous to the dividers in a notebook or the labeled folders in a file cabinet. Use the tab control, represented by class CTabCtrl, to show multiple pages of information or controls to a user, one at a time, in a format that suggests a peer or logical relationship between each page.
What do you want to know more about?
Tab Controls and Property Sheets
Tab Control Examples
Tabs and Tab Control Attributes
Making Owner-Drawn Tabs
Working with a Tab Control
Creating the Tab Control
Adding Tabs to a Tab Control
Processing Tab Control Notification Messages
SkyWalker
|
|
|
|
|
you need to create pages for each tab.
Those pages are CPropertySheet. You can create dialogs, one for each tab, in the resource editor, and create the pages when you create the CTabCtrl.
when the dialog receives a TCN_SELCHANGE, you simply have to show/hide the appropriate propertysheet.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
If you just need a Tab control on your dialog, then you can use a CPropertySheet instead (just look at the MSDN to see how to use it): you will suply a dialog resource for each PropertyPage inside of it.
Otherwise, if your Tab control is included in an existing dialog (with other controls,...), take a look at this article: http://www.codeproject.com/tabctrl/ctabctrlssl.asp[^]
Hope this helps
|
|
|
|
|
Hi!
I m a beginner in VC++. I just started working on a project in VC++ 6.0. I am developing an SDI application. I am using template class :
CTypedPtrList <coblist, cmytype*=""> m_MyList;
in the document to get all values from database.
I populate the list in the initial update function of VIEW.
class CMyType : public CObject
{
HTREEITEM hti;
CString sName;
CString sID;
int nCount;
};
CMyType *pNT = new CMyType();
GetDocument()->m_myListofNodes.AddTail(pNT);
On closing the application, I get following error:
ERROR # 1
/////////////////////////////////////////////////////////////
MySystem - Untitled: MySystem.exe - Application Error
//////////////////////////////////////////////////////////////
The instruction at "0x10213035" refrenced memory at "0x00000015".
The memory could not be "read".
Click on OK to terminate the program.
/////////////////////////////////////////////////////////////////
If i try to delete the item from list, then window pops up saying that tell this problem to Microsoft.
ERROR#2
////////////////////////////////////////////////////////////
"MySystem MFC Application has encountered a problem and needs to close. We are sorry for the inconvenience."
On pressing DONT SEND, it gives the ERROR # 1.
If application is run in Debug mode, then it gives
ERROR # 3
///////////////////////////////////////////////////////////////
Unhandled exception in MySystem.exe (MSVCRTD.DLL):0xC0000005 Access violation
By pressing OK, it takes me to CBHEAP.C file at:
// unlink entry from list
pPrev->pEntryPrev->pEntryNext = pPrev->pEntryNext;
pPrev->pEntryNext->pEntryPrev = pPrev->pEntryPrev;
...
I really dont know whats going on ...
It will be really pleasant if any one can help me out.
Thnx
|
|
|
|
|
I want to not save the directory browse in a cfiledialog.
To do this I use the OFN_NOCHANGEDIR flag as it is said everywhere.
That doesn't work (
The directory is saved in spite of the OFN_NOCHANGEDIR flag.
Does anyone know this problem? How can I solve it?
Thanks for your help
Forest
|
|
|
|
|
how do u get the arrow key events in a window??what is the handler uses this??
|
|
|
|
|
Trap Window WM_KEYDOWN Message and check nChar (in mfc) and wParam( in Win32api) for these code
VK_LEFT or 25 --> LEFT ARROW key
VK_UP or 26 -->UP ARROW key
VK_RIGHT or 27 -->RIGHT ARROW key
VK_DOWN or 28 --> DOWN ARROW key
-----------------------------
"I Think this Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
Hi,
we have an active x controls for webcam interface and i need to create a DLL with VC and use the same in a 3rd party application.
i.e i need to control the webcam through DLL
During creation of the DLL i dont have any issues, while calling the function from a console application - am getting windows assertion failed error..?
Can anyone guide me the settings if i need to make any inorder to control the dll which has activex in it..
Thanks in advance,
Pramod.
|
|
|
|
|
Hello,
Can anyone help me out with a function for converting hex numbers to dec numbers?
Thanks
Mythri
|
|
|
|
|
Little Hack
char strDex[10];
int hex=0x10,iDec;
sprintf(strDec,"%d",hex);
iDec=atoi(strDec);
-----------------------------
"I Think this Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
Little Hack
char strDex[10];
int hex=0x10,iDec;
sprintf(strDec,"%d",hex);
iDec=atoi(strDec);
and iDec contain required Decimal Number
-----------------------------
"I Think this Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|
Numbers are just numbers ! It's just their representation that changes !
For example if you have an integer that is equal to 5, it's binary representation will be 0101, it's hexadecimal representation will be 0x5 and it's decimal representation will be 5. But it is still the same number !!
So your question makes non-sense. Or maybe you want to ask how to print it in hex representation or decimal representation ?? Or maybe you want to convert a string that holds an hex number into a dec number ?? Or what else ... ?
So be more precise in your question.
|
|
|
|
|
You get exactly the same, as hex and dec (and other more) are different representations of the same number!
SkyWalker
|
|
|
|
|
/*I copy these code from Charles Petzold's Programming Windows. The functions in the WM_PAINT Message confused me a lot. Is there anyboday kindly enough to add comments to these function in details, thank you!
*/
#include <windows.h>
#define ID_TIMER 1
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("DigClock") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Digital Clock"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
void DisplayDigit (HDC hdc, int iNumber)
{
static BOOL fSevenSegment [10][7] = {
1, 1, 1, 0, 1, 1, 1, // 0
0, 0, 1, 0, 0, 1, 0, // 1
1, 0, 1, 1, 1, 0, 1, // 2
1, 0, 1, 1, 0, 1, 1, // 3
0, 1, 1, 1, 0, 1, 0, // 4
1, 1, 0, 1, 0, 1, 1, // 5
1, 1, 0, 1, 1, 1, 1, // 6
1, 0, 1, 0, 0, 1, 0, // 7
1, 1, 1, 1, 1, 1, 1, // 8
1, 1, 1, 1, 0, 1, 1 } ; // 9
static POINT ptSegment [7][6] = {
7, 6, 11, 2, 31, 2, 35, 6, 31, 10, 11, 10,
6, 7, 10, 11, 10, 31, 6, 35, 2, 31, 2, 11,
36, 7, 40, 11, 40, 31, 36, 35, 32, 31, 32, 11,
7, 36, 11, 32, 31, 32, 35, 36, 31, 40, 11, 40,
6, 37, 10, 41, 10, 61, 6, 65, 2, 61, 2, 41,
36, 37, 40, 41, 40, 61, 36, 65, 32, 61, 32, 41,
7, 66, 11, 62, 31, 62, 35, 66, 31, 70, 11, 70 } ;
int iSeg ;
for (iSeg = 0 ; iSeg < 7 ; iSeg++)
if (fSevenSegment [iNumber][iSeg])
Polygon (hdc, ptSegment [iSeg], 6) ;
}
void DisplayTwoDigits (HDC hdc, int iNumber, BOOL fSuppress)
{
if (!fSuppress || (iNumber / 10 != 0))
DisplayDigit (hdc, iNumber / 10) ;
OffsetWindowOrgEx (hdc, -42, 0, NULL) ;
DisplayDigit (hdc, iNumber % 10) ;
OffsetWindowOrgEx (hdc, -42, 0, NULL) ;
}
void DisplayColon (HDC hdc)
{
POINT ptColon [2][4] = { 2, 21, 6, 17, 10, 21, 6, 25,
2, 51, 6, 47, 10, 51, 6, 55 } ;
Polygon (hdc, ptColon [0], 4) ;
Polygon (hdc, ptColon [1], 4) ;
OffsetWindowOrgEx (hdc, -12, 0, NULL) ;
}
void DisplayTime (HDC hdc, BOOL f24Hour, BOOL fSuppress)
{
SYSTEMTIME st ;
GetLocalTime (&st) ;
if (f24Hour)
DisplayTwoDigits (hdc, st.wHour, fSuppress) ;
else
DisplayTwoDigits (hdc, (st.wHour %= 12) ? st.wHour : 12, fSuppress) ;
DisplayColon (hdc) ;
DisplayTwoDigits (hdc, st.wMinute, FALSE) ;
DisplayColon (hdc) ;
DisplayTwoDigits (hdc, st.wSecond, FALSE) ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static BOOL f24Hour, fSuppress ;
static HBRUSH hBrushRed ;
static int cxClient, cyClient ;
HDC hdc ;
PAINTSTRUCT ps ;
TCHAR szBuffer [2] ;
switch (message)
{
case WM_CREATE:
hBrushRed = CreateSolidBrush (RGB (255, 0, 0)) ;
SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
// fall through
case WM_SETTINGCHANGE:
GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 2) ;
f24Hour = (szBuffer[0] == '1') ;
GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, 2) ;
fSuppress = (szBuffer[0] == '0') ;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
return 0 ;
case WM_TIMER:
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SetMapMode (hdc, MM_ANISOTROPIC) ;
SetWindowExtEx (hdc, 276, 72, NULL) ;
SetViewportExtEx (hdc, cxClient, cyClient, NULL) ;
SetWindowOrgEx (hdc, 138, 36, NULL) ;
SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
SelectObject (hdc, GetStockObject (NULL_PEN)) ;
SelectObject (hdc, hBrushRed) ;
DisplayTime (hdc, f24Hour, fSuppress) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
KillTimer (hwnd, ID_TIMER) ;
DeleteObject (hBrushRed) ;
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
|
|
|
|
|
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, GetStockObject (NULL_PEN)) ;
SelectObject (hdc, hBrushRed) ;
DisplayTime (hdc, f24Hour, fSuppress) ;
EndPaint (hwnd, &ps) ;
return 0 ;
-----------------------------
"I Think this Will Help"
-----------------------------
Alok Gupta
visit me at http://www.thisisalok.tk
|
|
|
|
|