mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 01:42:30 +00:00
restored the blue.sys driver
svn path=/trunk/; revision=7790
This commit is contained in:
parent
9e88919457
commit
859e0dceee
|
@ -1,15 +0,0 @@
|
|||
PATH_TO_TOP = ../../../..
|
||||
|
||||
TARGET_BOOTSTRAP = no
|
||||
|
||||
TARGET_TYPE = dynlink
|
||||
|
||||
TARGET_NAME = mpu401
|
||||
|
||||
TARGET_GCCLIBS = winmm
|
||||
|
||||
TARGET_OBJECTS = mpu401.o
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
|
@ -1,34 +0,0 @@
|
|||
// These were missed out of mmsystem.h so I define them here until I get
|
||||
// round to submitting a patch for mmsystem.h :)
|
||||
|
||||
#define DRVM_INIT 100
|
||||
#define DRVM_EXIT 101
|
||||
#define DRVM_DISABLE 102
|
||||
#define DRVM_ENABLE 103
|
||||
|
||||
#define MODM_INIT DRVM_INIT
|
||||
#define MODM_GETNUMDEVS 1
|
||||
#define MODM_GETDEVCAPS 2
|
||||
#define MODM_OPEN 3
|
||||
#define MODM_CLOSE 4
|
||||
#define MODM_PREPARE 5
|
||||
#define MODM_UNPREPARE 6
|
||||
#define MODM_DATA 7
|
||||
#define MODM_LONGDATA 8
|
||||
#define MODM_RESET 9
|
||||
#define MODM_GETVOLUME 10
|
||||
#define MODM_SETVOLUME 11
|
||||
#define MODM_CACHEPATCHES 12
|
||||
#define MODM_CACHEDRUMPATCHES 13
|
||||
|
||||
#define MIDM_INIT DRVM_INIT
|
||||
#define MIDM_GETNUMDEVS 53
|
||||
#define MIDM_GETDEVCAPS 54
|
||||
#define MIDM_OPEN 55
|
||||
#define MIDM_CLOSE 56
|
||||
#define MIDM_PREPARE 57
|
||||
#define MIDM_UNPREPARE 58
|
||||
#define MIDM_ADDBUFFER 59
|
||||
#define MIDM_START 60
|
||||
#define MIDM_STOP 61
|
||||
#define MIDM_RESET 62
|
|
@ -1,369 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: services/dd/mpu401/dll/mpu401.c
|
||||
* PURPOSE: MPU-401 MIDI driver WINMM interface
|
||||
* PROGRAMMER: Andrew Greenwood
|
||||
* UPDATE HISTORY:
|
||||
* Sept 28, 2003: Created
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
typedef UINT *LPUINT;
|
||||
#include <mmsystem.h>
|
||||
#include "messages.h"
|
||||
|
||||
|
||||
#define DBG printf
|
||||
|
||||
|
||||
// Erm... This is in mmsystem i think:
|
||||
LONG APIENTRY DefDriverProc(DWORD dwDriverIdentifier,
|
||||
HANDLE hDriver,
|
||||
UINT message, // Bug in ptypes32.h
|
||||
LONG lParam1,
|
||||
LONG lParam2);
|
||||
|
||||
|
||||
|
||||
|
||||
STATIC int MessageLength(BYTE b)
|
||||
{
|
||||
if (b > 0xf8) return 1;
|
||||
|
||||
switch(b)
|
||||
{
|
||||
case 0xf0 : case 0xf4 : case 0xf5 : case 0xf6 : case 0xf7 :
|
||||
return 1;
|
||||
case 0xf1 : case 0xf3 :
|
||||
return 2;
|
||||
case 0xf2 :
|
||||
return 3;
|
||||
}
|
||||
|
||||
switch(b & 0xf0)
|
||||
{
|
||||
case 0x80 : case 0x90 : case 0xa0 : case 0xb0 : case 0xe0 :
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0; // must be a status byte
|
||||
}
|
||||
|
||||
|
||||
DWORD APIENTRY modMessage(DWORD id, DWORD msg, DWORD dwUser,
|
||||
DWORD dwParam1, DWORD dwParam2)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case MODM_GETNUMDEVS :
|
||||
DBG("MODM_GETNUMDEVS\n");
|
||||
break;
|
||||
|
||||
case MODM_GETDEVCAPS :
|
||||
DBG("MODM_GETDEVCAPS\n");
|
||||
break;
|
||||
|
||||
case MODM_OPEN :
|
||||
DBG("MODM_OPEN\n");
|
||||
break;
|
||||
|
||||
case MODM_CLOSE :
|
||||
DBG("MODM_CLOSE\n");
|
||||
break;
|
||||
|
||||
case MODM_DATA :
|
||||
/*
|
||||
MODM_DATA requests that the driver process a short MIDI message.
|
||||
|
||||
PARAMETERS
|
||||
id : ?
|
||||
dwUser : ?
|
||||
dwParam1 : MIDI message packed into a 32-bit number
|
||||
dwParam2 : ?
|
||||
|
||||
RETURN VALUES
|
||||
???
|
||||
*/
|
||||
{
|
||||
int i;
|
||||
BYTE b[4];
|
||||
DBG("MODM_DATA\n");
|
||||
for (i = 0; i < 4; i ++)
|
||||
{
|
||||
b[i] = (BYTE)(dwParam1 % 256);
|
||||
dwParam1 /= 256;
|
||||
}
|
||||
// midiOutWrite(data, length, client?)
|
||||
// somehow we need to keep track of running status
|
||||
// return midiOutWrite(b, modMIDIlength((PMIDIALLOC)dwUser, b[0]),
|
||||
// (PMIDIALLOC)dwUser);
|
||||
}
|
||||
|
||||
case MODM_LONGDATA :
|
||||
DBG("MODM_LONGDATA\n");
|
||||
break;
|
||||
|
||||
case MODM_RESET :
|
||||
DBG("MODM_RESET\n");
|
||||
break;
|
||||
|
||||
case MODM_SETVOLUME :
|
||||
DBG("MODM_SETVOLUME\n");
|
||||
break;
|
||||
|
||||
case MODM_GETVOLUME :
|
||||
DBG("MODM_GETVOLUME\n");
|
||||
break;
|
||||
|
||||
case MODM_CACHEPATCHES :
|
||||
DBG("MODM_CACHEPATCHES\n");
|
||||
break;
|
||||
|
||||
case MODM_CACHEDRUMPATCHES :
|
||||
DBG("MODM_CACHEDRUMPATCHES\n");
|
||||
break;
|
||||
}
|
||||
|
||||
// return MMSYSERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
LRESULT DriverProc(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage,
|
||||
LPARAM lParam1, LPARAM lParam2)
|
||||
/*
|
||||
ROUTINE
|
||||
DriverProc
|
||||
|
||||
PURPOSE
|
||||
Process driver messages
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
uiMessage : Which operation to perform
|
||||
lParam1 : Message-dependent
|
||||
lParam2 : Message-dependent
|
||||
|
||||
NOTES
|
||||
For parameters that aren't listed in the messages, they are not
|
||||
used.
|
||||
|
||||
Loading and unloading messages occur in this order:
|
||||
DRV_LOAD - DRV_ENABLE - DRV_OPEN
|
||||
DRV_CLOSE - DRV_DISABLE - DRV_FREE
|
||||
*/
|
||||
{
|
||||
switch(uiMessage)
|
||||
{
|
||||
case DRV_LOAD :
|
||||
/*
|
||||
DRV_LOAD notifies the driver that it has been loaded. It should
|
||||
then make sure it can function properly.
|
||||
|
||||
PARAMETERS
|
||||
(No Parameters)
|
||||
|
||||
RETURN VALUES
|
||||
Non-zero if successful
|
||||
Zero if not
|
||||
*/
|
||||
DBG("DRV_LOAD\n");
|
||||
break;
|
||||
|
||||
case DRV_FREE :
|
||||
/*
|
||||
DRV_FREE notifies the driver that it is being unloaded. It
|
||||
should make sure it releases any memory or other resources.
|
||||
|
||||
PARAMETERS
|
||||
hDriver : Hande of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Nothing
|
||||
*/
|
||||
DBG("DRV_FREE\n");
|
||||
break;
|
||||
|
||||
case DRV_OPEN :
|
||||
/*
|
||||
DRV_OPEN directs the driver to open a new instance.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
lParam1 : Wide string specifying configuration
|
||||
information, or this can be NULL
|
||||
lParam2 : 32-bit driver-specific data
|
||||
|
||||
RETURN VALUES
|
||||
Non-zero if successful
|
||||
Zero if not
|
||||
*/
|
||||
DBG("DRV_OPEN\n");
|
||||
break;
|
||||
|
||||
case DRV_CLOSE :
|
||||
/*
|
||||
DRV_CLOSE directs the driver to close the specified instance.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
lParam1 : 32-bit value passed from DriverClose()
|
||||
lParam2 : 32-bit value passed from DriverClose()
|
||||
|
||||
RETURN VALUES
|
||||
Non-zero if successful
|
||||
Zero if not
|
||||
*/
|
||||
DBG("DRV_CLOSE\n");
|
||||
break;
|
||||
|
||||
case DRV_ENABLE :
|
||||
/*
|
||||
DRV_ENABLE enables the driver (as if you didn't see THAT one
|
||||
coming!)
|
||||
|
||||
PARAMETERS
|
||||
hDriver : Handle of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Nothing
|
||||
*/
|
||||
DBG("DRV_ENABLE\n");
|
||||
break;
|
||||
|
||||
case DRV_DISABLE :
|
||||
/*
|
||||
DRV_DISABLE disables the driver - see above comment ;) This
|
||||
message comes before DRV_FREE.
|
||||
|
||||
PARAMETERS
|
||||
hDriver : Handle of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Nothing
|
||||
*/
|
||||
DBG("DRV_DISABLE\n");
|
||||
break;
|
||||
|
||||
case DRV_QUERYCONFIGURE :
|
||||
/*
|
||||
DRV_QUERYCONFIGURE asks the driver if it supports custom
|
||||
configuration.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Non-zero to indicate the driver can display a config dialog
|
||||
Zero if not
|
||||
*/
|
||||
DBG("DRV_QUERYCONFIGURE\n");
|
||||
break;
|
||||
|
||||
case DRV_CONFIGURE :
|
||||
/*
|
||||
DRV_CONFIGURE requests the driver to display a configuration
|
||||
dialog box.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identified of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
lParam1 : Handle of the parent window of the dialog
|
||||
lParam2 : Address of a DRVCONFIGINFO, or NULL
|
||||
|
||||
RETURN VALUES
|
||||
DRVCNF_OK The configuration was successful
|
||||
DRVCNF_CANCEL The user cancelled the dialog box
|
||||
DRVCNF_RESTART The configuration requires a reboot
|
||||
*/
|
||||
DBG("DRV_CONFIGURE\n");
|
||||
break;
|
||||
|
||||
case DRV_INSTALL :
|
||||
/*
|
||||
DRV_INSTALL notifies the driver that it is being installed.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
lParam2 : Address of a DEVCONFIGINFO, or NULL
|
||||
|
||||
RETURN VALUES
|
||||
DRVCNF_OK The configuration was successful
|
||||
DRVCNF_CANCEL The user cancelled the dialog box
|
||||
DRVCNF_RESTART The configuration requires a reboot
|
||||
*/
|
||||
DBG("DRV_INSTALL\n");
|
||||
break;
|
||||
|
||||
case DRV_REMOVE :
|
||||
/*
|
||||
DRV_REMOVE notifies the driver that it is being removed from the
|
||||
system.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Nothing
|
||||
*/
|
||||
DBG("DRV_REMOVE\n");
|
||||
break;
|
||||
|
||||
case DRV_POWER :
|
||||
/*
|
||||
DRV_POWER notifies the driver that power is being turned on/off.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Nothing
|
||||
*/
|
||||
DBG("DRV_POWER\n");
|
||||
|
||||
case DRV_EXITSESSION :
|
||||
/*
|
||||
DRV_EXITSESSION notifies the driver that Windows is shutting down.
|
||||
|
||||
PARAMETERS
|
||||
dwDriverID : Identifier of the installable driver
|
||||
hDriver : Handle of the installable driver instance
|
||||
|
||||
RETURN VALUES
|
||||
Nothing
|
||||
*/
|
||||
|
||||
// case DRV_PNPINSTALL : break;
|
||||
default :
|
||||
return DefDriverProc(dwDriverID, hDriver, uiMessage, lParam1, lParam2);
|
||||
}
|
||||
|
||||
return DefDriverProc(dwDriverID, hDriver, uiMessage, lParam1, lParam2);
|
||||
}
|
||||
|
||||
|
||||
BOOL CALLBACK DProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// if (uMsg == WM_INITDIALOG)
|
||||
// return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void Test()
|
||||
{
|
||||
// HWND Dlg = CreateDialog(GetModuleHandle(NULL), "Config", NULL, DProc);
|
||||
HWND Z = CreateWindow("Static", "", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 20, 20, NULL, NULL, GetModuleHandle(NULL), NULL);
|
||||
if (DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(1001), Z, DProc) == -1)
|
||||
MessageBox(NULL, "Error", "Error", MB_OK | MB_TASKMODAL);
|
||||
}
|
Binary file not shown.
|
@ -1,14 +0,0 @@
|
|||
LIBRARY mpu401
|
||||
|
||||
DESCRIPTION "MPU401 driver DLL"
|
||||
|
||||
EXETYPE WINDOWS
|
||||
|
||||
EXPORTS
|
||||
DriverProc
|
||||
;mxdMessage
|
||||
;auxMessage
|
||||
;wodMessage
|
||||
;widMessage
|
||||
modMessage = modSynthMessage
|
||||
Test
|
|
@ -1,4 +0,0 @@
|
|||
EXPORTS
|
||||
DriverProc
|
||||
modMessage
|
||||
Test
|
|
@ -1,415 +0,0 @@
|
|||
00000000 A __loader_flags__
|
||||
00000000 A __minor_image_version__
|
||||
00000000 A __minor_os_version__
|
||||
00000000 A __minor_subsystem_version__
|
||||
00000001 A __dll__
|
||||
00000001 A __major_image_version__
|
||||
00000003 A __subsystem__
|
||||
00000004 A __major_os_version__
|
||||
00000004 A __major_subsystem_version__
|
||||
00000200 A __file_alignment__
|
||||
00001000 A __section_alignment__
|
||||
00001000 A __size_of_heap_commit__
|
||||
00001000 A __size_of_stack_commit__
|
||||
00100000 A __size_of_heap_reserve__
|
||||
00200000 A __size_of_stack_reserve__
|
||||
10000000 A __image_base__
|
||||
10001000 t .text
|
||||
10001000 T __end__
|
||||
10001000 T _DllMainCRTStartup@12
|
||||
10001000 T _end
|
||||
10001000 T end
|
||||
10001000 t lab
|
||||
10001090 t ___dll_exit
|
||||
10001100 T _atexit
|
||||
10001130 T __onexit
|
||||
10001150 t .text
|
||||
10001150 T ___do_frame_init
|
||||
10001170 T ___do_frame_fini
|
||||
10001190 t .text
|
||||
10001190 t .text
|
||||
10001190 t _MessageLength
|
||||
1000130c T _modMessage
|
||||
1000130c T _modMessage@20
|
||||
100014f0 T _DriverProc
|
||||
10001664 T _DProc@16
|
||||
1000167e T _Test
|
||||
10001700 t .text
|
||||
10001700 T _DefDriverProc@20
|
||||
10001710 t .text
|
||||
10001710 t .text
|
||||
10001710 t .text
|
||||
10001710 T _DllMain@12
|
||||
10001720 t .text
|
||||
10001720 T ___do_global_dtors
|
||||
10001750 T ___do_global_ctors
|
||||
100017b0 T ___main
|
||||
10001820 t .text
|
||||
10001820 t _size_of_encoded_value
|
||||
10001870 t _read_uleb128
|
||||
100018b0 t _read_sleb128
|
||||
10001900 t _read_encoded_value_with_base
|
||||
10001a00 t _init_object_mutex
|
||||
10001a20 t _init_object_mutex_once
|
||||
10001aa0 T ___register_frame_info_bases
|
||||
10001b30 T ___register_frame_info
|
||||
10001b50 T ___register_frame
|
||||
10001b80 T ___register_frame_info_table_bases
|
||||
10001c10 T ___register_frame_info_table
|
||||
10001c30 T ___register_frame_table
|
||||
10001c50 T ___deregister_frame_info_bases
|
||||
10001d40 T ___deregister_frame_info
|
||||
10001d50 T ___deregister_frame
|
||||
10001d80 t _base_from_object
|
||||
10001dd0 t _get_cie_encoding
|
||||
10001e80 t _fde_unencoded_compare
|
||||
10001ea0 t _fde_single_encoding_compare
|
||||
10001f20 t _fde_mixed_encoding_compare
|
||||
10001fc0 t _frame_heapsort
|
||||
10002140 t _classify_object_over_fdes
|
||||
10002260 t _add_fdes
|
||||
10002370 t _linear_search_fdes
|
||||
10002490 t _search_object
|
||||
10002710 T __Unwind_Find_FDE
|
||||
10002860 t _init_object
|
||||
10002af0 t _fde_split
|
||||
10002bb0 t .text
|
||||
10002bb0 T ___w32_sharedptr_initialize
|
||||
10002d70 t .text
|
||||
10002d70 t .text
|
||||
10002d70 T ___dllonexit
|
||||
10002d80 t .text
|
||||
10002d80 T _fflush
|
||||
10002d90 t .text
|
||||
10002d90 T _free
|
||||
10002da0 t .text
|
||||
10002da0 T __errno
|
||||
10002db0 t .text
|
||||
10002db0 T _malloc
|
||||
10002dc0 t .text
|
||||
10002dc0 T _printf
|
||||
10002dd0 t .text
|
||||
10002dd0 T _strlen
|
||||
10002de0 t .text
|
||||
10002de0 T _abort
|
||||
10002df0 t .text
|
||||
10002df0 T _strtoul
|
||||
10002e00 t .text
|
||||
10002e00 T _memset
|
||||
10002e10 t .text
|
||||
10002e10 t .text
|
||||
10002e10 t .text
|
||||
10002e10 T _CreateWindowExA@48
|
||||
10002e20 t .text
|
||||
10002e20 T _DialogBoxParamA@20
|
||||
10002e30 t .text
|
||||
10002e30 T _MessageBoxA@16
|
||||
10002e40 t .text
|
||||
10002e40 t .text
|
||||
10002e40 t .text
|
||||
10002e40 T _GetModuleHandleA@4
|
||||
10002e50 t .text
|
||||
10002e50 T _CreateMutexA@12
|
||||
10002e60 t .text
|
||||
10002e60 T _InterlockedIncrement@4
|
||||
10002e70 t .text
|
||||
10002e70 T _Sleep@4
|
||||
10002e80 t .text
|
||||
10002e80 T _ReleaseMutex@4
|
||||
10002e90 t .text
|
||||
10002e90 T _WaitForSingleObject@8
|
||||
10002ea0 t .text
|
||||
10002ea0 T _FindAtomA@4
|
||||
10002eb0 t .text
|
||||
10002eb0 T _AddAtomA@4
|
||||
10002ec0 t .text
|
||||
10002ec0 T _GetAtomNameA@12
|
||||
10002ed0 t .text
|
||||
10002ed0 t .text
|
||||
10002ed0 t .text
|
||||
10002ed0 t .text
|
||||
10002ed0 t ___reg_frame_ctor
|
||||
10002ee0 t ___dereg_frame_dtor
|
||||
10002ef0 T ___CTOR_LIST__
|
||||
10002ef0 T __CTOR_LIST__
|
||||
10002ef4 t .ctors
|
||||
10002efc T ___DTOR_LIST__
|
||||
10002efc T __DTOR_LIST__
|
||||
10002f00 t .dtors
|
||||
10002f08 T etext
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 d .data
|
||||
10003000 D __data_start__
|
||||
10003000 d _initialized
|
||||
10003004 d _p.0
|
||||
10003010 d .data
|
||||
10003010 d _once.0
|
||||
10003020 d .data
|
||||
10003020 d ___w32_sharedptr
|
||||
10003024 D ___w32_sharedptr_terminate
|
||||
10003028 D ___w32_sharedptr_unexpected
|
||||
1000302c D ___w32_sharedptr_unseen_objects
|
||||
10003030 D ___w32_sharedptr_seen_objects
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 d .data
|
||||
10003040 D __CRT_MT
|
||||
10003050 d .data
|
||||
10003050 D __data_end__
|
||||
10004000 r .eh_frame
|
||||
10004000 r .eh_frame
|
||||
10004000 R ___EH_FRAME_BEGIN__
|
||||
10004368 r .eh_frame
|
||||
10004368 r ___EH_FRAME_END__
|
||||
1000436c R ___RUNTIME_PSEUDO_RELOC_LIST__
|
||||
1000436c R ___RUNTIME_PSEUDO_RELOC_LIST_END__
|
||||
1000436c R __RUNTIME_PSEUDO_RELOC_LIST__
|
||||
1000436c R __RUNTIME_PSEUDO_RELOC_LIST_END__
|
||||
10005000 b .bss
|
||||
10005000 B __bss_start__
|
||||
10005000 b _first_atexit
|
||||
10005010 b _next_atexit
|
||||
10005020 b .bss
|
||||
10005020 b _obj
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b .bss
|
||||
10005040 b _marker.1
|
||||
10005050 b _object_mutex
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005060 b .bss
|
||||
10005080 B __bss_end__
|
||||
10006000 e .edata
|
||||
10006028 e name
|
||||
10006034 e afuncs
|
||||
10006040 e anames
|
||||
1000604c e anords
|
||||
10006052 e n3
|
||||
1000605d e n1
|
||||
10006062 e n2
|
||||
10007000 i .idata$2
|
||||
10007000 I __head_libkernel32_a
|
||||
10007014 i .idata$2
|
||||
10007014 I __head_libmsvcrt_a
|
||||
10007028 i .idata$2
|
||||
10007028 I __head_libuser32_a
|
||||
1000703c i .idata$2
|
||||
1000703c I __head_libwinmm_a
|
||||
10007064 i .idata$4
|
||||
10007068 i .idata$4
|
||||
10007068 i hname
|
||||
1000706c i .idata$4
|
||||
10007070 i .idata$4
|
||||
10007074 i .idata$4
|
||||
10007078 i .idata$4
|
||||
1000707c i .idata$4
|
||||
10007080 i .idata$4
|
||||
10007084 i .idata$4
|
||||
10007088 i .idata$4
|
||||
1000708c i .idata$4
|
||||
10007090 i .idata$4
|
||||
10007094 i .idata$4
|
||||
10007094 i hname
|
||||
10007098 i .idata$4
|
||||
1000709c i .idata$4
|
||||
100070a0 i .idata$4
|
||||
100070a4 i .idata$4
|
||||
100070a8 i .idata$4
|
||||
100070ac i .idata$4
|
||||
100070b0 i .idata$4
|
||||
100070b4 i .idata$4
|
||||
100070b8 i .idata$4
|
||||
100070bc i .idata$4
|
||||
100070c0 i .idata$4
|
||||
100070c4 i .idata$4
|
||||
100070c4 i hname
|
||||
100070c8 i .idata$4
|
||||
100070cc i .idata$4
|
||||
100070d0 i .idata$4
|
||||
100070d4 i .idata$4
|
||||
100070d8 i .idata$4
|
||||
100070d8 i hname
|
||||
100070dc i .idata$4
|
||||
100070e0 i .idata$5
|
||||
100070e4 i .idata$5
|
||||
100070e4 I __imp__AddAtomA@4
|
||||
100070e4 i fthunk
|
||||
100070e8 i .idata$5
|
||||
100070e8 I __imp__CreateMutexA@12
|
||||
100070ec i .idata$5
|
||||
100070ec I __imp__FindAtomA@4
|
||||
100070f0 i .idata$5
|
||||
100070f0 I __imp__GetAtomNameA@12
|
||||
100070f4 i .idata$5
|
||||
100070f4 I __imp__GetModuleHandleA@4
|
||||
100070f8 i .idata$5
|
||||
100070f8 I __imp__InterlockedIncrement@4
|
||||
100070fc i .idata$5
|
||||
100070fc I __imp__ReleaseMutex@4
|
||||
10007100 i .idata$5
|
||||
10007100 I __imp__Sleep@4
|
||||
10007104 i .idata$5
|
||||
10007104 I __imp__WaitForSingleObject@8
|
||||
10007108 i .idata$5
|
||||
1000710c i .idata$5
|
||||
10007110 i .idata$5
|
||||
10007110 I __imp____dllonexit
|
||||
10007110 i fthunk
|
||||
10007114 i .idata$5
|
||||
10007114 I __imp___errno
|
||||
10007118 i .idata$5
|
||||
10007118 I __imp__abort
|
||||
1000711c i .idata$5
|
||||
1000711c I __imp__fflush
|
||||
10007120 i .idata$5
|
||||
10007120 I __imp__free
|
||||
10007124 i .idata$5
|
||||
10007124 I __imp__malloc
|
||||
10007128 i .idata$5
|
||||
10007128 I __imp__memset
|
||||
1000712c i .idata$5
|
||||
1000712c I __imp__printf
|
||||
10007130 i .idata$5
|
||||
10007130 I __imp__strlen
|
||||
10007134 i .idata$5
|
||||
10007134 I __imp__strtoul
|
||||
10007138 i .idata$5
|
||||
1000713c i .idata$5
|
||||
10007140 i .idata$5
|
||||
10007140 I __imp__CreateWindowExA@48
|
||||
10007140 i fthunk
|
||||
10007144 i .idata$5
|
||||
10007144 I __imp__DialogBoxParamA@20
|
||||
10007148 i .idata$5
|
||||
10007148 I __imp__MessageBoxA@16
|
||||
1000714c i .idata$5
|
||||
10007150 i .idata$5
|
||||
10007154 i .idata$5
|
||||
10007154 I __imp__DefDriverProc@20
|
||||
10007154 i fthunk
|
||||
10007158 i .idata$5
|
||||
1000715c i .idata$6
|
||||
10007168 i .idata$6
|
||||
10007178 i .idata$6
|
||||
10007184 i .idata$6
|
||||
10007194 i .idata$6
|
||||
100071a8 i .idata$6
|
||||
100071c0 i .idata$6
|
||||
100071d0 i .idata$6
|
||||
100071d8 i .idata$6
|
||||
100071f0 i .idata$6
|
||||
10007200 i .idata$6
|
||||
1000720c i .idata$6
|
||||
10007214 i .idata$6
|
||||
10007220 i .idata$6
|
||||
10007228 i .idata$6
|
||||
10007234 i .idata$6
|
||||
10007240 i .idata$6
|
||||
1000724c i .idata$6
|
||||
10007258 i .idata$6
|
||||
10007264 i .idata$6
|
||||
10007278 i .idata$6
|
||||
1000728c i .idata$6
|
||||
1000729c i .idata$6
|
||||
100072ac i .idata$7
|
||||
100072b0 i .idata$7
|
||||
100072b4 i .idata$7
|
||||
100072b8 i .idata$7
|
||||
100072bc i .idata$7
|
||||
100072c0 i .idata$7
|
||||
100072c4 i .idata$7
|
||||
100072c8 i .idata$7
|
||||
100072cc i .idata$7
|
||||
100072d0 i .idata$7
|
||||
100072d0 I __libkernel32_a_iname
|
||||
100072e0 i .idata$7
|
||||
100072e4 i .idata$7
|
||||
100072e8 i .idata$7
|
||||
100072ec i .idata$7
|
||||
100072f0 i .idata$7
|
||||
100072f4 i .idata$7
|
||||
100072f8 i .idata$7
|
||||
100072fc i .idata$7
|
||||
10007300 i .idata$7
|
||||
10007304 i .idata$7
|
||||
10007308 i .idata$7
|
||||
10007308 I __libmsvcrt_a_iname
|
||||
10007314 i .idata$7
|
||||
10007318 i .idata$7
|
||||
1000731c i .idata$7
|
||||
10007320 i .idata$7
|
||||
10007320 I __libuser32_a_iname
|
||||
1000732c i .idata$7
|
||||
10007330 i .idata$7
|
||||
10007330 I __libwinmm_a_iname
|
||||
10008000 d .rsrc
|
||||
10009000 d .reloc
|
|
@ -1,61 +0,0 @@
|
|||
#include <defines.h>
|
||||
#include <reactos/resource.h>
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
1001 DIALOGEX 0, 0, 230, 230
|
||||
STYLE WS_POPUP | WS_BORDER | DS_CENTER | DS_MODALFRAME | WS_CAPTION | DS_ABSALIGN | WS_SYSMENU
|
||||
FONT 8, "Tahoma", FW_BOLD, 0
|
||||
CAPTION "Settings"
|
||||
BEGIN
|
||||
GROUPBOX "", 0, 5, 2, 220, 203
|
||||
|
||||
LTEXT "Sample Device Technology :", 666, 11, 10, 210, 12
|
||||
COMBOBOX "", 666, 10, 20, 210, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Playback Samples Using :", 666, 11, 40, 150, 12
|
||||
COMBOBOX "", 666, 10, 50, 210, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Record Samples Using :", 666, 11, 70, 150, 12
|
||||
COMBOBOX "", 666, 10, 80, 210, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "OK", 666, 90, 210, 50, 14
|
||||
|
||||
PUSHBUTTON "Settings", 666, 160, 40, 50, 14
|
||||
PUSHBUTTON "Settings", 666, 160, 70, 50, 14
|
||||
|
||||
LTEXT "Sample playback is DISABLED.", 666, 11, 180, 210, 12
|
||||
END
|
||||
|
||||
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
|
||||
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", RES_STR_COMPANY_NAME
|
||||
VALUE "FileDescription", "MPU-401 MIDI Driver DLL\0"
|
||||
VALUE "FileVersion", "0.0.1\0"
|
||||
VALUE "InternalName", "mpu401\0"
|
||||
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
|
||||
VALUE "OriginalFilename", "mpu401.dll\0"
|
||||
VALUE "ProductName", RES_STR_PRODUCT_NAME
|
||||
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
# $Id: makefile,v 1.23 2004/01/20 19:35:59 silverblade Exp $
|
||||
# $Id: makefile,v 1.24 2004/01/20 20:00:45 weiden Exp $
|
||||
|
||||
PATH_TO_TOP = ../../..
|
||||
|
||||
|
@ -6,11 +6,9 @@ TARGET_BOOTSTRAP = yes
|
|||
|
||||
TARGET_TYPE = driver
|
||||
|
||||
TARGET_NAME = mpu401
|
||||
TARGET_NAME = blue
|
||||
|
||||
TARGET_OBJECTS = mpu401.o \
|
||||
portio.o \
|
||||
settings.o
|
||||
TARGET_OBJECTS = blue.o
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
|
|
|
@ -1,406 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: services/dd/mpu401/mpu401.c
|
||||
* PURPOSE: MPU-401 MIDI device driver
|
||||
* PROGRAMMER: Andrew Greenwood
|
||||
* UPDATE HISTORY:
|
||||
* Sept 26, 2003: Copied from beep.c as template
|
||||
* Sept 27, 2003: Implemented MPU-401 init & playback
|
||||
*/
|
||||
|
||||
/* INCLUDES ****************************************************************/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
//#include <ddk/ntddbeep.h>
|
||||
|
||||
//#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
#include "mpu401.h"
|
||||
|
||||
|
||||
/* INTERNAL VARIABLES ******************************************************/
|
||||
|
||||
UINT DeviceCount = 0;
|
||||
|
||||
|
||||
/* FUNCTIONS ***************************************************************/
|
||||
|
||||
NTSTATUS InitDevice(
|
||||
IN PWSTR RegistryPath,
|
||||
IN PVOID Context)
|
||||
{
|
||||
// PDEVICE_INSTANCE Instance = Context;
|
||||
PDEVICE_OBJECT DeviceObject; // = Context;
|
||||
PDEVICE_EXTENSION Parameters; // = DeviceObject->DeviceExtension;
|
||||
UNICODE_STRING DeviceName = UNICODE_STRING_INITIALIZER(L"\\Device\\MPU401_Out_0");
|
||||
UNICODE_STRING SymlinkName = UNICODE_STRING_INITIALIZER(L"\\??\\MPU401_Out_0");
|
||||
// CONFIG Config;
|
||||
RTL_QUERY_REGISTRY_TABLE Table[2];
|
||||
NTSTATUS s;
|
||||
|
||||
// This is TEMPORARY, to ensure that we don't process more than 1 device.
|
||||
// I'll remove this limitation in the future.
|
||||
if (DeviceCount > 0)
|
||||
{
|
||||
DPRINT("Sorry - only 1 device supported by MPU401 driver at present :(\n");
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
DPRINT("Creating IO device\n");
|
||||
|
||||
s = IoCreateDevice(Context, // driverobject
|
||||
sizeof(DEVICE_EXTENSION),
|
||||
&DeviceName,
|
||||
FILE_DEVICE_SOUND, // Correct?
|
||||
0,
|
||||
FALSE,
|
||||
&DeviceObject);
|
||||
|
||||
if (!NT_SUCCESS(s))
|
||||
return s;
|
||||
|
||||
DPRINT("Device Extension at 0x%x\n", DeviceObject->DeviceExtension);
|
||||
Parameters = DeviceObject->DeviceExtension;
|
||||
|
||||
DPRINT("Creating DOS link\n");
|
||||
|
||||
/* Create the dos device link */
|
||||
IoCreateSymbolicLink(&SymlinkName,
|
||||
&DeviceName);
|
||||
|
||||
DPRINT("Initializing device\n");
|
||||
|
||||
// DPRINT("Allocating memory for parameters structure\n");
|
||||
// Bodged:
|
||||
// Parameters = (PDEVICE_EXTENSION)ExAllocatePool(NonPagedPool, sizeof(DEVICE_EXTENSION));
|
||||
// DeviceObject->DeviceExtension = Parameters;
|
||||
// Parameters = Instance->DriverObject->DriverExtension;
|
||||
|
||||
DPRINT("DeviceObject at 0x%x, DeviceExtension at 0x%x\n", DeviceObject, Parameters);
|
||||
|
||||
if (! Parameters)
|
||||
{
|
||||
DPRINT("NULL POINTER!\n");
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
// Instance->DriverObject->DriverExtension = Parameters;
|
||||
|
||||
DPRINT("Setting reg path\n");
|
||||
Parameters->RegistryPath = RegistryPath;
|
||||
// Parameters->DriverObject = Instance->DriverObject;
|
||||
|
||||
DPRINT("Zeroing table memory and setting query routine\n");
|
||||
RtlZeroMemory(Table, sizeof(Table));
|
||||
Table[0].QueryRoutine = LoadSettings;
|
||||
|
||||
DPRINT("Setting port and IRQ defaults\n");
|
||||
Parameters->Port = DEFAULT_PORT;
|
||||
Parameters->IRQ = DEFAULT_IRQ;
|
||||
|
||||
// Only to be enabled once we can get support for multiple cards working :)
|
||||
/*
|
||||
DPRINT("Loading settings from: %S\n", RegistryPath);
|
||||
|
||||
s = RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE, RegistryPath, Table,
|
||||
&Parameters, NULL);
|
||||
*/
|
||||
|
||||
if (! NT_SUCCESS(s))
|
||||
return s;
|
||||
|
||||
DPRINT("Port 0x%x IRQ %d\n", Parameters->Port, Parameters->IRQ);
|
||||
|
||||
// Instance->P
|
||||
|
||||
// Enter UART mode (should be done in init phase
|
||||
if (! InitUARTMode(Parameters->Port))
|
||||
{
|
||||
DPRINT("UART mode initialization FAILED!\n");
|
||||
// Set state indication somehow
|
||||
// Failure - what error code do we give?!
|
||||
// return STATUS_????
|
||||
}
|
||||
|
||||
DeviceCount ++;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static NTSTATUS STDCALL
|
||||
MPU401Create(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Handles user mode requests
|
||||
* ARGUMENTS:
|
||||
* DeviceObject = Device for request
|
||||
* Irp = I/O request packet describing request
|
||||
* RETURNS: Success or failure
|
||||
*/
|
||||
{
|
||||
DPRINT("MPU401Create() called!\n");
|
||||
|
||||
// Initialize the MPU-401
|
||||
// ... do stuff ...
|
||||
|
||||
|
||||
// Play a note to say we're alive:
|
||||
// WaitToSend(MPU401_PORT);
|
||||
// MPU401_WRITE_DATA(MPU401_PORT, 0x90);
|
||||
// WaitToSend(MPU401_PORT);
|
||||
// MPU401_WRITE_DATA(MPU401_PORT, 0x50);
|
||||
// WaitToSend(MPU401_PORT);
|
||||
// MPU401_WRITE_DATA(MPU401_PORT, 0x7f);
|
||||
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp,
|
||||
IO_NO_INCREMENT);
|
||||
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
static NTSTATUS STDCALL
|
||||
MPU401Close(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Handles user mode requests
|
||||
* ARGUMENTS:
|
||||
* DeviceObject = Device for request
|
||||
* Irp = I/O request packet describing request
|
||||
* RETURNS: Success or failure
|
||||
*/
|
||||
{
|
||||
PDEVICE_EXTENSION DeviceExtension;
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT("MPU401Close() called!\n");
|
||||
|
||||
DeviceExtension = DeviceObject->DeviceExtension;
|
||||
|
||||
Status = STATUS_SUCCESS;
|
||||
|
||||
Irp->IoStatus.Status = Status;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp,
|
||||
IO_NO_INCREMENT);
|
||||
|
||||
return(Status);
|
||||
}
|
||||
|
||||
|
||||
static NTSTATUS STDCALL
|
||||
MPU401Cleanup(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Handles user mode requests
|
||||
* ARGUMENTS:
|
||||
* DeviceObject = Device for request
|
||||
* Irp = I/O request packet describing request
|
||||
* RETURNS: Success or failure
|
||||
*/
|
||||
{
|
||||
UINT Channel;
|
||||
DPRINT("MPU401Cleanup() called!\n");
|
||||
|
||||
// Reset the device (should we do this?)
|
||||
for (Channel = 0; Channel <= 15; Channel ++)
|
||||
{
|
||||
// All notes off
|
||||
// MPU401_WRITE_MESSAGE(MPU401_PORT, 0xb0 + Channel, 123, 0);
|
||||
// All controllers off
|
||||
// MPU401_WRITE_MESSAGE(MPU401_PORT, 0xb0 + Channel, 121, 0);
|
||||
}
|
||||
|
||||
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp,
|
||||
IO_NO_INCREMENT);
|
||||
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
static NTSTATUS STDCALL
|
||||
MPU401DeviceControl(PDEVICE_OBJECT DeviceObject,
|
||||
PIRP Irp)
|
||||
/*
|
||||
* FUNCTION: Handles user mode requests
|
||||
* ARGUMENTS:
|
||||
* DeviceObject = Device for request
|
||||
* Irp = I/O request packet describing request
|
||||
* RETURNS: Success or failure
|
||||
*/
|
||||
{
|
||||
PIO_STACK_LOCATION Stack;
|
||||
PDEVICE_EXTENSION DeviceExtension;
|
||||
UINT ByteCount;
|
||||
PBYTE Data;
|
||||
|
||||
DPRINT("MPU401DeviceControl() called!\n");
|
||||
|
||||
DeviceExtension = DeviceObject->DeviceExtension;
|
||||
Stack = IoGetCurrentIrpStackLocation(Irp);
|
||||
|
||||
switch(Stack->Parameters.DeviceIoControl.IoControlCode)
|
||||
{
|
||||
case IOCTL_MIDI_PLAY :
|
||||
{
|
||||
DPRINT("Received IOCTL_MIDI_PLAY\n");
|
||||
Data = (PBYTE) Irp->AssociatedIrp.SystemBuffer;
|
||||
|
||||
DPRINT("Sending %d bytes of MIDI data to 0x%d:\n", Stack->Parameters.DeviceIoControl.InputBufferLength, DeviceExtension->Port);
|
||||
|
||||
for (ByteCount = 0; ByteCount < Stack->Parameters.DeviceIoControl.InputBufferLength; ByteCount ++)
|
||||
{
|
||||
DPRINT("0x%x ", Data[ByteCount]);
|
||||
|
||||
MPU401_WRITE_BYTE(DeviceExtension->Port, Data[ByteCount]);
|
||||
// if (WaitToSend(MPU401_PORT))
|
||||
// MPU401_WRITE_DATA(MPU401_PORT, Data[ByteCount]);
|
||||
}
|
||||
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
return(STATUS_SUCCESS);
|
||||
|
||||
/*
|
||||
DeviceExtension = DeviceObject->DeviceExtension;
|
||||
Stack = IoGetCurrentIrpStackLocation(Irp);
|
||||
BeepParam = (PBEEP_SET_PARAMETERS)Irp->AssociatedIrp.SystemBuffer;
|
||||
|
||||
Irp->IoStatus.Information = 0;
|
||||
|
||||
if (Stack->Parameters.DeviceIoControl.IoControlCode != IOCTL_BEEP_SET)
|
||||
{
|
||||
Irp->IoStatus.Status = STATUS_NOT_IMPLEMENTED;
|
||||
IoCompleteRequest(Irp,
|
||||
IO_NO_INCREMENT);
|
||||
return(STATUS_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
if ((Stack->Parameters.DeviceIoControl.InputBufferLength != sizeof(BEEP_SET_PARAMETERS))
|
||||
|| (BeepParam->Frequency < BEEP_FREQUENCY_MINIMUM)
|
||||
|| (BeepParam->Frequency > BEEP_FREQUENCY_MAXIMUM))
|
||||
{
|
||||
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
|
||||
IoCompleteRequest(Irp,
|
||||
IO_NO_INCREMENT);
|
||||
return(STATUS_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
DueTime.QuadPart = 0;
|
||||
*/
|
||||
/* do the beep!! */
|
||||
/* DPRINT("Beep:\n Freq: %lu Hz\n Dur: %lu ms\n",
|
||||
pbsp->Frequency,
|
||||
pbsp->Duration);
|
||||
|
||||
if (BeepParam->Duration >= 0)
|
||||
{
|
||||
DueTime.QuadPart = (LONGLONG)BeepParam->Duration * -10000;
|
||||
|
||||
KeSetTimer(&DeviceExtension->Timer,
|
||||
DueTime,
|
||||
&DeviceExtension->Dpc);
|
||||
|
||||
HalMakeBeep(BeepParam->Frequency);
|
||||
DeviceExtension->BeepOn = TRUE;
|
||||
KeWaitForSingleObject(&DeviceExtension->Event,
|
||||
Executive,
|
||||
KernelMode,
|
||||
FALSE,
|
||||
NULL);
|
||||
}
|
||||
else if (BeepParam->Duration == (DWORD)-1)
|
||||
{
|
||||
if (DeviceExtension->BeepOn == TRUE)
|
||||
{
|
||||
HalMakeBeep(0);
|
||||
DeviceExtension->BeepOn = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
HalMakeBeep(BeepParam->Frequency);
|
||||
DeviceExtension->BeepOn = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
DPRINT("Did the beep!\n");
|
||||
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
IoCompleteRequest(Irp,
|
||||
IO_NO_INCREMENT);
|
||||
return(STATUS_SUCCESS);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
static NTSTATUS STDCALL
|
||||
MPU401Unload(PDRIVER_OBJECT DriverObject)
|
||||
{
|
||||
DPRINT("MPU401Unload() called!\n");
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS STDCALL
|
||||
DriverEntry(PDRIVER_OBJECT DriverObject,
|
||||
PUNICODE_STRING RegistryPath)
|
||||
/*
|
||||
* FUNCTION: Called by the system to initalize the driver
|
||||
* ARGUMENTS:
|
||||
* DriverObject = object describing this driver
|
||||
* RegistryPath = path to our configuration entries
|
||||
* RETURNS: Success or failure
|
||||
*/
|
||||
{
|
||||
// PDEVICE_EXTENSION DeviceExtension;
|
||||
// PDEVICE_OBJECT DeviceObject;
|
||||
// DEVICE_INSTANCE Instance;
|
||||
// Doesn't support multiple instances (yet ...)
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT("MPU401 Device Driver 0.0.1\n");
|
||||
|
||||
// Is this really necessary? Yes! (Talking to myself again...)
|
||||
// Instance.DriverObject = DriverObject;
|
||||
// previous instance = NULL...
|
||||
|
||||
// DeviceExtension->RegistryPath = RegistryPath;
|
||||
|
||||
DriverObject->Flags = 0;
|
||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = (PDRIVER_DISPATCH)MPU401Create;
|
||||
DriverObject->MajorFunction[IRP_MJ_CLOSE] = (PDRIVER_DISPATCH)MPU401Close;
|
||||
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = (PDRIVER_DISPATCH)MPU401Cleanup;
|
||||
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH)MPU401DeviceControl;
|
||||
DriverObject->DriverUnload = (PDRIVER_UNLOAD)MPU401Unload;
|
||||
|
||||
// Major hack to just get this damn thing working:
|
||||
Status = InitDevice(RegistryPath, DriverObject); // ????
|
||||
|
||||
// DPRINT("Enumerating devices at %wZ\n", RegistryPath);
|
||||
|
||||
// Status = EnumDeviceKeys(RegistryPath, PARMS_SUBKEY, InitDevice, (PVOID)&DeviceObject); // &Instance;
|
||||
|
||||
// check error
|
||||
|
||||
/* set up device extension */
|
||||
// DeviceExtension = DeviceObject->DeviceExtension;
|
||||
// DeviceExtension->BeepOn = FALSE;
|
||||
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
/* EOF */
|
|
@ -1,145 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: services/dd/mpu401/mpu401.h
|
||||
* PURPOSE: MPU-401 MIDI device driver header
|
||||
* PROGRAMMER: Andrew Greenwood
|
||||
* UPDATE HISTORY:
|
||||
* Sept 26, 2003: Created
|
||||
*/
|
||||
|
||||
#ifndef __INCLUDES_MPU401_H__
|
||||
#define __INCLUDES_MPU401_H__
|
||||
|
||||
#define DEFAULT_PORT 0x330
|
||||
#define DEFAULT_IRQ 9
|
||||
|
||||
#define DEVICE_SUBKEY L"Devices"
|
||||
#define PARMS_SUBKEY L"Parameters"
|
||||
|
||||
#define REGISTRY_PORT L"Port"
|
||||
|
||||
// At the moment, we just support a single device with fixed parameters:
|
||||
#define MPU401_PORT DEFAULT_PORT
|
||||
#define MPU401_IRQ DEFAULT_IRQ
|
||||
|
||||
#define MPU401_TIMEOUT 10000
|
||||
|
||||
#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND
|
||||
// wave base 0
|
||||
#define IOCTL_MIDI_BASE 0x0080
|
||||
|
||||
#define IOCTL_MIDI_GET_CAPABILITIES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define IOCTL_MIDI_SET_STATE CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MIDI_GET_STATE CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MIDI_SET_VOLUME CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define IOCTL_MIDI_GET_VOLUME CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
|
||||
#define IOCTL_MIDI_PLAY CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MIDI_RECORD CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MIDI_CACHE_PATCHES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
#define IOCTL_MIDI_CACHE_DRUM_PATCHES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
|
||||
|
||||
|
||||
// The MPU-401 has 2 ports, usually 0x330 and 0x331, which are known as
|
||||
// "data" and "status/command", respectively. These macros deal with
|
||||
// reading from and writing to these ports:
|
||||
|
||||
#define MPU401_WRITE_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp, x)
|
||||
#define MPU401_READ_DATA(bp) READ_PORT_UCHAR((PUCHAR) bp)
|
||||
#define MPU401_WRITE_COMMAND(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+1, x)
|
||||
#define MPU401_READ_STATUS(bp) READ_PORT_UCHAR((PUCHAR) bp+1)
|
||||
|
||||
|
||||
// Flow control
|
||||
|
||||
#define MPU401_READY_TO_SEND(bp) \
|
||||
MPU401_READ_STATUS(bp) & 0x80
|
||||
|
||||
#define MPU401_READY_TO_RECEIVE(bp) \
|
||||
MPU401_READ_STATUS(bp) & 0x40
|
||||
|
||||
|
||||
#define MPU401_WRITE_BYTE(bp, x) \
|
||||
if (WaitToSend(bp)) MPU401_WRITE_DATA(bp, x)
|
||||
|
||||
#define MPU401_WRITE_MESSAGE(bp, status, da, db) \
|
||||
MPU401_WRITE(bp, status); \
|
||||
MPU401_WRITE(bp, da); \
|
||||
MPU401_WRITE(bp, db)
|
||||
|
||||
//#define MPU401_READ(bp)
|
||||
// if (WaitToRead(bp)) ... ???
|
||||
|
||||
/*
|
||||
DEVICE_EXTENSION contains the settings for each individual device
|
||||
*/
|
||||
|
||||
typedef struct _DEVICE_EXTENSION
|
||||
{
|
||||
PWSTR RegistryPath;
|
||||
PDRIVER_OBJECT DriverObject;
|
||||
UINT Port;
|
||||
UINT IRQ;
|
||||
// KDPC Dpc;
|
||||
// KTIMER Timer;
|
||||
// KEVENT Event;
|
||||
// BOOLEAN BeepOn;
|
||||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
||||
|
||||
/*
|
||||
DEVICE_INSTANCE contains ???
|
||||
*/
|
||||
|
||||
typedef struct _DEVICE_INSTANCE
|
||||
{
|
||||
// pPrevGDI
|
||||
PDRIVER_OBJECT DriverObject;
|
||||
} DEVICE_INSTANCE, *PDEVICE_INSTANCE;
|
||||
|
||||
/*
|
||||
CONFIG contains device parameters (port/IRQ)
|
||||
THIS STRUCTURE IS REDUNDANT
|
||||
*/
|
||||
|
||||
//typedef struct _CONFIG
|
||||
//{
|
||||
// UINT Port;
|
||||
// UINT IRQ;
|
||||
//} CONFIG, *PCONFIG;
|
||||
|
||||
/*
|
||||
Some callback typedefs
|
||||
*/
|
||||
|
||||
typedef NTSTATUS REGISTRY_CALLBACK_ROUTINE(PWSTR RegistryPath, PVOID Context);
|
||||
typedef REGISTRY_CALLBACK_ROUTINE *PREGISTRY_CALLBACK_ROUTINE;
|
||||
|
||||
|
||||
/*
|
||||
Prototypes for functions in portio.c :
|
||||
*/
|
||||
|
||||
BOOLEAN WaitToSend(UINT BasePort);
|
||||
BOOLEAN WaitToReceive(UINT BasePort);
|
||||
BOOLEAN InitUARTMode(UINT BasePort);
|
||||
|
||||
/*
|
||||
Prototypes for functions in settings.c :
|
||||
*/
|
||||
|
||||
NTSTATUS EnumDeviceKeys(
|
||||
IN PUNICODE_STRING RegistryPath,
|
||||
IN PWSTR SubKey,
|
||||
IN PREGISTRY_CALLBACK_ROUTINE Callback,
|
||||
IN PVOID Context);
|
||||
|
||||
NTSTATUS LoadSettings(
|
||||
IN PWSTR ValueName,
|
||||
IN ULONG ValueType,
|
||||
IN PVOID ValueData,
|
||||
IN ULONG ValueLength,
|
||||
IN PVOID Context,
|
||||
IN PVOID EntryContext);
|
||||
|
||||
#endif
|
|
@ -1,38 +0,0 @@
|
|||
#include <defines.h>
|
||||
#include <reactos/resource.h>
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
|
||||
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", RES_STR_COMPANY_NAME
|
||||
VALUE "FileDescription", "MPU-401 MIDI Driver\0"
|
||||
VALUE "FileVersion", "0.0.1\0"
|
||||
VALUE "InternalName", "mpu401\0"
|
||||
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
|
||||
VALUE "OriginalFilename", "mpu401.sys\0"
|
||||
VALUE "ProductName", RES_STR_PRODUCT_NAME
|
||||
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: services/dd/mpu401/portio.c (see also mpu401.h)
|
||||
* PURPOSE: MPU-401 MIDI port I/O helper
|
||||
* PROGRAMMER: Andrew Greenwood
|
||||
* UPDATE HISTORY:
|
||||
* Sept 26, 2003: Created
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <ddk/ntddk.h>
|
||||
#include "mpu401.h"
|
||||
|
||||
|
||||
BOOLEAN WaitToSend(UINT BasePort)
|
||||
{
|
||||
int TimeOut;
|
||||
|
||||
DbgPrint("WaitToSend ");
|
||||
|
||||
// Check if it's OK to send
|
||||
for (TimeOut = MPU401_TIMEOUT;
|
||||
! MPU401_READY_TO_SEND(BasePort) && TimeOut > 0;
|
||||
TimeOut --);
|
||||
|
||||
// If a time-out occurs, we report failure
|
||||
if (! TimeOut)
|
||||
{
|
||||
DbgPrint("FAILED\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DbgPrint("SUCCEEDED\n");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN WaitToReceive(UINT BasePort)
|
||||
{
|
||||
int TimeOut;
|
||||
|
||||
DbgPrint("WaitToSend ");
|
||||
|
||||
// Check if it's OK to receive
|
||||
for (TimeOut = MPU401_TIMEOUT;
|
||||
! MPU401_READY_TO_RECEIVE(BasePort) && TimeOut > 0;
|
||||
TimeOut --);
|
||||
|
||||
// If a time-out occurs, we report failure
|
||||
if (! TimeOut)
|
||||
{
|
||||
DbgPrint("FAILED\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DbgPrint("SUCCEEDED\n");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN InitUARTMode(UINT BasePort)
|
||||
{
|
||||
UINT TimeOut;
|
||||
UCHAR Status = 0;
|
||||
|
||||
DbgPrint("InitUARTMode() called\n");
|
||||
|
||||
// Check if it's OK to send
|
||||
if (! WaitToSend(BasePort))
|
||||
return FALSE;
|
||||
|
||||
DbgPrint("Resetting MPU401\n");
|
||||
|
||||
// Send an MPU reset:
|
||||
MPU401_WRITE_COMMAND(BasePort, 0xff);
|
||||
|
||||
// Check if it's OK to receive (some cards will ignore the above reset
|
||||
// command and so will not issue an ACK, so time out is NOT an error)
|
||||
DbgPrint("Waiting for an ACK\n");
|
||||
if (WaitToReceive(BasePort))
|
||||
{
|
||||
// Check to make sure the reset was acknowledged:
|
||||
for (TimeOut = MPU401_TIMEOUT;
|
||||
Status = (MPU401_READ_DATA(BasePort) & 0xfe) && TimeOut > 0;
|
||||
TimeOut --);
|
||||
}
|
||||
|
||||
DbgPrint("Entering UART mode\n");
|
||||
// Now we kick the MPU401 into UART ("dumb") mode
|
||||
MPU401_WRITE_COMMAND(BasePort, 0x3f);
|
||||
|
||||
return TRUE;
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
----------------------------------
|
||||
REACTOS MPU-401 MIDI DEVICE DRIVER
|
||||
by Andrew Greenwood
|
||||
----------------------------------
|
||||
|
||||
This driver initializes the MPU-401 MIDI/joystick port found on
|
||||
most sound cards, and allows the sending of simple messages.
|
||||
|
||||
It's far from complete, and at present will only support 1 device.
|
||||
|
||||
In Bochs, the MIDI output will be played using whatever device is
|
||||
set up in Windows as your MIDI output.
|
||||
|
||||
For real hardware, the output will be played to whatever device is
|
||||
attached to your MIDI/joystick port, or, in some cases, the wave-table
|
||||
or other synth on-board your card (note: this is NOT an FM synth
|
||||
driver!)
|
||||
|
||||
|
||||
Thanks to Vizzini and all the other great ReactOS developers for
|
||||
helping me code this driver and also for giving me encouragement.
|
||||
|
||||
I'd also like to thank Jeff Glatt, whose MIDI and MPU-401
|
||||
documentation has been a valuable resource to me over the past few
|
||||
years, and who provided me with almost all of my knowledge of MIDI
|
||||
and MPU-401. His site is at: www.borg.com/~jglatt/
|
||||
|
||||
- Andrew "Silver Blade" Greenwood
|
|
@ -1,24 +0,0 @@
|
|||
#ifndef NDEBUG
|
||||
#define TEST_STATUS(s) \
|
||||
if (! NT_SUCCESS(s)) \
|
||||
{ \
|
||||
if (s == STATUS_NO_MORE_ENTRIES) \
|
||||
DPRINT("NTSTATUS == NO MORE ENTRIES\n") \
|
||||
else if (s == STATUS_BUFFER_OVERFLOW) \
|
||||
DPRINT("NTSTATUS == BUFFER OVERFLOW\n") \
|
||||
else if (s == STATUS_BUFFER_TOO_SMALL) \
|
||||
DPRINT("NTSTATUS == BUFFER TOO SMALL\n") \
|
||||
else if (s == STATUS_INVALID_PARAMETER) \
|
||||
DPRINT("NTSTATUS == INVALID PARAMETER\n") \
|
||||
else if (s == STATUS_OBJECT_NAME_NOT_FOUND) \
|
||||
DPRINT("NTSTATUS == OBJECT NAME NOT FOUND\n") \
|
||||
else if (s == STATUS_INVALID_HANDLE) \
|
||||
DPRINT("NTATATUS == INVALID_HANDLE\n") \
|
||||
else if (s == STATUS_ACCESS_DENIED) \
|
||||
DPRINT("NTSTATUS == ACCESS_DENIED\n") \
|
||||
else \
|
||||
DPRINT("NTSTATUS == FAILURE (???)\n"); \
|
||||
}
|
||||
#else
|
||||
#define TEST_STATUS(s)
|
||||
#endif
|
|
@ -1,306 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: services/dd/mpu401/settings.c
|
||||
* PURPOSE: MPU-401 MIDI device driver setting management
|
||||
* PROGRAMMER: Andrew Greenwood
|
||||
* UPDATE HISTORY:
|
||||
* Sept 27, 2003: Created
|
||||
*/
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include "mpu401.h"
|
||||
|
||||
// #define NDEBUG
|
||||
#include <debug.h>
|
||||
#include "sbdebug.h" // our own debug helper
|
||||
|
||||
|
||||
NTSTATUS
|
||||
OpenDevicesKey(
|
||||
IN PWSTR RegistryPath,
|
||||
OUT PHANDLE Key)
|
||||
/*
|
||||
Description:
|
||||
Create a volatile key under this driver's Services node to contain
|
||||
the device name list.
|
||||
|
||||
Parameters:
|
||||
RegistryPath The location of the registry entry
|
||||
Key The key in the registry
|
||||
|
||||
Return Value:
|
||||
NT status STATUS_SUCCESS if successful (duh...)
|
||||
*/
|
||||
{
|
||||
NTSTATUS s;
|
||||
HANDLE hKey;
|
||||
OBJECT_ATTRIBUTES oa;
|
||||
UNICODE_STRING uStr;
|
||||
|
||||
// Attempt to open the key
|
||||
|
||||
RtlInitUnicodeString(&uStr, RegistryPath);
|
||||
|
||||
InitializeObjectAttributes(&oa, &uStr, OBJ_CASE_INSENSITIVE, NULL,
|
||||
(PSECURITY_DESCRIPTOR)NULL);
|
||||
|
||||
s = ZwOpenKey(&hKey, KEY_CREATE_SUB_KEY, &oa);
|
||||
|
||||
if (! NT_SUCCESS(s))
|
||||
return s; // Problem
|
||||
|
||||
|
||||
// Now create sub key
|
||||
|
||||
RtlInitUnicodeString(&uStr, (PWSTR) DEVICE_SUBKEY);
|
||||
|
||||
InitializeObjectAttributes(&oa, &uStr, OBJ_CASE_INSENSITIVE, hKey,
|
||||
(PSECURITY_DESCRIPTOR)NULL);
|
||||
|
||||
s = ZwCreateKey(Key, KEY_ALL_ACCESS, &oa, 0, NULL, REG_OPTION_VOLATILE,
|
||||
NULL);
|
||||
|
||||
ZwClose(hKey);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NTSTATUS EnumDeviceKeys(
|
||||
IN PUNICODE_STRING RegistryPath,
|
||||
IN PWSTR SubKey,
|
||||
IN PREGISTRY_CALLBACK_ROUTINE Callback,
|
||||
IN PVOID Context)
|
||||
/*
|
||||
Description:
|
||||
Enumerate the device subkeys in the driver's registry entry, and
|
||||
call the specified callback routine for each device.
|
||||
|
||||
Parameters:
|
||||
RegistryPath The location of the registry entry
|
||||
Subkey The device's subkey
|
||||
Callback A routine called for each device
|
||||
Context ???
|
||||
|
||||
Return Value:
|
||||
NT status STATUS_SUCCESS if successful
|
||||
*/
|
||||
{
|
||||
NTSTATUS s;
|
||||
OBJECT_ATTRIBUTES oa;
|
||||
HANDLE hKey, hSubKey;
|
||||
UNICODE_STRING SubkeyName;
|
||||
ULONG i;
|
||||
|
||||
// Attempt to open the key
|
||||
|
||||
InitializeObjectAttributes(&oa, RegistryPath, OBJ_CASE_INSENSITIVE,
|
||||
NULL, (PSECURITY_DESCRIPTOR)NULL);
|
||||
|
||||
s = ZwOpenKey(&hKey, KEY_READ, &oa);
|
||||
|
||||
TEST_STATUS(s); // debugging
|
||||
|
||||
if (! NT_SUCCESS(s))
|
||||
return s; // Problem
|
||||
|
||||
RtlInitUnicodeString(&SubkeyName, SubKey);
|
||||
|
||||
DPRINT("Subkey: %wZ\n", &SubkeyName);
|
||||
|
||||
InitializeObjectAttributes(&oa, &SubkeyName, OBJ_CASE_INSENSITIVE,
|
||||
hKey, (PSECURITY_DESCRIPTOR)NULL);
|
||||
|
||||
s = ZwOpenKey(&hSubKey, KEY_ENUMERATE_SUB_KEYS, &oa);
|
||||
|
||||
ZwClose(hKey);
|
||||
|
||||
TEST_STATUS(s); // debugging
|
||||
|
||||
if (! NT_SUCCESS(s))
|
||||
return s;
|
||||
|
||||
|
||||
// And now, the enumeration
|
||||
|
||||
for (i = 0;; i ++)
|
||||
{
|
||||
KEY_BASIC_INFORMATION Info;
|
||||
PKEY_BASIC_INFORMATION pInfo;
|
||||
ULONG ResultLength = 0;
|
||||
ULONG Size = 0;
|
||||
PWSTR Pos;
|
||||
PWSTR Name;
|
||||
|
||||
// Find the length of the subkey data
|
||||
|
||||
// Info.NameLength = 0; // TEMPORARY!
|
||||
|
||||
s = ZwEnumerateKey(hSubKey, i, KeyBasicInformation, &Info,
|
||||
sizeof(Info), &ResultLength);
|
||||
|
||||
if (s == STATUS_NO_MORE_ENTRIES)
|
||||
break;
|
||||
|
||||
DPRINT("Found an entry, allocating memory...\n");
|
||||
|
||||
// Size = Info.NameLength + FIELD_OFFSET(KEY_BASIC_INFORMATION, Name[0]);
|
||||
Size = ResultLength + FIELD_OFFSET(KEY_BASIC_INFORMATION, Name[0]);
|
||||
|
||||
DPRINT("Size is %d\n", Size);
|
||||
|
||||
pInfo = (PKEY_BASIC_INFORMATION) ExAllocatePool(PagedPool, Size);
|
||||
|
||||
if (pInfo == NULL)
|
||||
{
|
||||
DPRINT("INSUFFICIENT RESOURCES!\n");
|
||||
s = STATUS_INSUFFICIENT_RESOURCES;
|
||||
break;
|
||||
}
|
||||
|
||||
DPRINT("Re-enumerating...\n");
|
||||
|
||||
s = ZwEnumerateKey(hSubKey, i, KeyBasicInformation, pInfo, Size,
|
||||
&ResultLength);
|
||||
|
||||
// TEST_STATUS(s); // debugging
|
||||
|
||||
if (! NT_SUCCESS(s))
|
||||
{
|
||||
ExFreePool((PVOID) pInfo);
|
||||
s = STATUS_INTERNAL_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
DPRINT("Allocating memory for name...\n");
|
||||
|
||||
Name = ExAllocatePool(PagedPool,
|
||||
RegistryPath->Length + sizeof(WCHAR) +
|
||||
SubkeyName.Length + sizeof(WCHAR) +
|
||||
pInfo->NameLength + sizeof(UNICODE_NULL));
|
||||
|
||||
if (Name == NULL)
|
||||
{
|
||||
DPRINT("INSUFFICIENT RESOURCES!");
|
||||
ExFreePool((PVOID) pInfo);
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
// Copy the key name
|
||||
RtlCopyMemory((PVOID)Name, (PVOID)RegistryPath->Buffer, RegistryPath->Length);
|
||||
Pos = Name + (RegistryPath->Length / sizeof(WCHAR));
|
||||
Pos[0] = '\\';
|
||||
Pos++;
|
||||
|
||||
// Copy the parameters sub key name
|
||||
RtlCopyMemory((PVOID)Pos, (PVOID)SubKey, SubkeyName.Length); //SubkeyName?
|
||||
Pos += SubkeyName.Length / sizeof(WCHAR);
|
||||
Pos[0] = '\\';
|
||||
Pos ++;
|
||||
|
||||
// Copy the device sub key name
|
||||
RtlCopyMemory((PVOID)Pos, (PVOID)pInfo->Name, pInfo->NameLength);
|
||||
Pos += pInfo->NameLength / sizeof(WCHAR);
|
||||
Pos[0] = UNICODE_NULL;
|
||||
|
||||
ExFreePool((PVOID)pInfo);
|
||||
|
||||
DPRINT("Calling callback...\n");
|
||||
|
||||
s = (*Callback)(Name, Context);
|
||||
|
||||
if (! NT_SUCCESS(s))
|
||||
{ DPRINT("Callback FAILED\n");
|
||||
break;}
|
||||
}
|
||||
|
||||
ZwClose(hSubKey);
|
||||
|
||||
DPRINT("%d device registry keys found\n", i);
|
||||
|
||||
if ((i == 0) && (s == STATUS_NO_MORE_ENTRIES))
|
||||
return STATUS_DEVICE_CONFIGURATION_ERROR;
|
||||
|
||||
return s == STATUS_NO_MORE_ENTRIES ? STATUS_SUCCESS : s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NTSTATUS LoadSettings(
|
||||
IN PWSTR ValueName,
|
||||
IN ULONG ValueType,
|
||||
IN PVOID ValueData,
|
||||
IN ULONG ValueLength,
|
||||
IN PVOID Context,
|
||||
IN PVOID EntryContext)
|
||||
/*
|
||||
Description:
|
||||
Read the settings for a particular device
|
||||
|
||||
Parameters:
|
||||
ValueName The value to read from the registry
|
||||
ValueType ?
|
||||
ValueData ?
|
||||
ValueLength ?
|
||||
Context The configuration structure to write to
|
||||
EntryContext ?
|
||||
|
||||
Return Value:
|
||||
NT status STATUS_SUCCESS if successful
|
||||
*/
|
||||
{
|
||||
PDEVICE_EXTENSION DeviceInfo = Context;
|
||||
|
||||
if (ValueType == REG_DWORD)
|
||||
{
|
||||
if (! _wcsicmp(ValueName, REGISTRY_PORT))
|
||||
{
|
||||
DeviceInfo->Port = *(PULONG) ValueData;
|
||||
DPRINT("Registry port = 0x%x\n", DeviceInfo->Port);
|
||||
}
|
||||
|
||||
// More to come... (config.c)
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// ?
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NTSTATUS SaveSettings(
|
||||
IN PWSTR RegistryPath,
|
||||
IN ULONG Port,
|
||||
IN ULONG IRQ,
|
||||
IN ULONG DMA)
|
||||
/*
|
||||
Description:
|
||||
Saves the settings for a particular device
|
||||
|
||||
Parameters:
|
||||
RegistryPath Where to save the settings to
|
||||
Port The device's port number
|
||||
IRQ The device's interrupt number
|
||||
DMA The device's DMA channel
|
||||
|
||||
Return Value:
|
||||
NT status STATUS_SUCCESS if successful
|
||||
*/
|
||||
{
|
||||
NTSTATUS s;
|
||||
|
||||
DPRINT("SaveSettings() unimplemented\n");
|
||||
|
||||
// UNIMPLEMENTED;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include <ddk/ntddk.h>
|
||||
#include "mpu401.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// NTSTATUS s;
|
||||
// PHANDLE Handle;
|
||||
// PIO_STATUS_BLOCK Status;
|
||||
DWORD BytesReturned;
|
||||
BYTE Test[3]; // Will store MIDI data
|
||||
BYTE Notes[] = {50, 52, 54, 55, 57, 59, 61};
|
||||
HANDLE Device;
|
||||
UINT Note;
|
||||
UINT Junk;
|
||||
|
||||
printf("Test program for MPU401 driver\n");
|
||||
|
||||
Device = CreateFile("\\\\.\\MPU401_Out_0", GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
NULL,
|
||||
OPEN_EXISTING,
|
||||
FILE_FLAG_NO_BUFFERING,
|
||||
NULL);
|
||||
|
||||
if (Device == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
printf("Device is busy or could not be found.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("Device is open, let's play some music...\n");
|
||||
|
||||
Test[0] = 0x90;
|
||||
Test[2] = 0x7f;
|
||||
|
||||
for (Note = 0; Note < sizeof(Notes); Note ++)
|
||||
{
|
||||
Test[1] = Notes[Note];
|
||||
|
||||
DeviceIoControl(
|
||||
Device,
|
||||
IOCTL_MIDI_PLAY,
|
||||
&Test,
|
||||
sizeof(Test),
|
||||
NULL,
|
||||
0,
|
||||
&BytesReturned,
|
||||
NULL
|
||||
);
|
||||
|
||||
for (Junk = 0; Junk < 100000; Junk ++); // Pause
|
||||
}
|
||||
|
||||
|
||||
/* s = IoCreateFile(Handle, GENERIC_READ | GENERIC_WRITE,
|
||||
OBJ_KERNEL_HANDLE,
|
||||
Status,
|
||||
0,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
FILE_OPEN,
|
||||
FILE_NON_DIRECTORY_FILE,
|
||||
NULL,
|
||||
0,
|
||||
CreateFileTypeNone,
|
||||
NULL,
|
||||
0);
|
||||
*/
|
||||
}
|
|
@ -1,519 +0,0 @@
|
|||
/*
|
||||
playmidi.c
|
||||
|
||||
MIDI playback tester
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
// typedef UINT *LPUINT;
|
||||
#include <mmsystem.h>
|
||||
#include <malloc.h>
|
||||
|
||||
|
||||
struct GENERIC_CHUNK
|
||||
{
|
||||
char Header[4];
|
||||
ULONG Length;
|
||||
} GENERIC_CHUNK;
|
||||
|
||||
|
||||
struct MTHD_CHUNK
|
||||
{
|
||||
char Header[4];
|
||||
ULONG Length;
|
||||
USHORT Format;
|
||||
USHORT NumTracks;
|
||||
USHORT Division;
|
||||
} MTHD_CHUNK;
|
||||
|
||||
|
||||
struct MidiMessage
|
||||
{
|
||||
UINT Time;
|
||||
UCHAR Status;
|
||||
UCHAR Data1;
|
||||
UCHAR Data2;
|
||||
UCHAR Data3;
|
||||
};
|
||||
|
||||
|
||||
struct MessageQueue
|
||||
{
|
||||
UINT MessageCount;
|
||||
UINT MessageCapacity;
|
||||
UINT QueuePos;
|
||||
struct MidiMessage* Messages; // MQ[trk][entry]
|
||||
};
|
||||
|
||||
|
||||
struct Song
|
||||
{
|
||||
USHORT Format;
|
||||
USHORT NumTracks;
|
||||
USHORT Division; // correct?
|
||||
struct MessageQueue* Tracks;
|
||||
};
|
||||
|
||||
|
||||
struct Song Song;
|
||||
|
||||
|
||||
USHORT SwapShortBytes(USHORT *Value)
|
||||
{
|
||||
return *Value = ((*Value % 256) * 256) + (*Value / 256);
|
||||
}
|
||||
|
||||
|
||||
ULONG SwapLongBytes(ULONG *Value)
|
||||
{
|
||||
BYTE b[4];
|
||||
INT i;
|
||||
|
||||
for (i = 0; i < 4; i ++)
|
||||
{
|
||||
b[i] = *Value % 256;
|
||||
*Value /= 256;
|
||||
}
|
||||
|
||||
printf("SLB : %u %u %u %u\n", b[0], b[1], b[2], b[3]);
|
||||
|
||||
return *Value = (b[0] * 256 * 256 *256) +
|
||||
(b[1] * 256 * 256) +
|
||||
(b[2] * 256) +
|
||||
b[3];
|
||||
}
|
||||
|
||||
|
||||
ULONG ReadVarLen(FILE* f, ULONG *b)
|
||||
{
|
||||
char c;
|
||||
ULONG v;
|
||||
|
||||
*b ++;
|
||||
|
||||
if ((v = getc(f)) & 0x80)
|
||||
{
|
||||
v &= 0x7f;
|
||||
do
|
||||
{
|
||||
v = (v << 7) + ((c = getc(f)) & 0x7f);
|
||||
*b ++;
|
||||
}
|
||||
while (c & 0x80);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN QueueMessage(UINT Track, struct MidiMessage* Msg)
|
||||
{
|
||||
PVOID OldPtr = NULL;
|
||||
|
||||
// printf("QueueMessage called\n");
|
||||
|
||||
if (Song.Tracks[Track].MessageCount + 1 > Song.Tracks[Track].MessageCapacity)
|
||||
{
|
||||
Song.Tracks[Track].MessageCapacity += 1;
|
||||
OldPtr = Song.Tracks[Track].Messages;
|
||||
|
||||
// printf("Allocating %d bytes - ", Song.Tracks[Track].MessageCapacity * sizeof(struct MidiMessage));
|
||||
|
||||
Song.Tracks[Track].Messages =
|
||||
realloc(Song.Tracks[Track].Messages,
|
||||
Song.Tracks[Track].MessageCapacity * sizeof(struct MidiMessage));
|
||||
|
||||
// printf("0x%x\n", Song.Tracks[Track].Messages);
|
||||
|
||||
if (! Song.Tracks[Track].Messages)
|
||||
{
|
||||
Song.Tracks[Track].Messages = OldPtr;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// Copy the message
|
||||
Song.Tracks[Track].Messages[Song.Tracks[Track].MessageCount] = *Msg;
|
||||
|
||||
// printf("Message 0x%x %d %d %d\n", Msg->Status, Msg->Data1, Msg->Data2, Msg->Data3);
|
||||
|
||||
Song.Tracks[Track].MessageCount ++;
|
||||
// printf("Msg count %u\n", Song.Tracks[Track].MessageCount);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN DequeueMessage(UINT Track, struct MidiMessage* Msg)
|
||||
{
|
||||
printf("Dequeueing message from %u < %u\n", Song.Tracks[Track].QueuePos, Song.Tracks[Track].MessageCount);
|
||||
|
||||
if (Song.Tracks[Track].QueuePos >= Song.Tracks[Track].MessageCount)
|
||||
{
|
||||
printf("No more messages in queue\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*Msg = Song.Tracks[Track].Messages[Song.Tracks[Track].QueuePos];
|
||||
|
||||
Song.Tracks[Track].QueuePos ++;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
UINT GetMessageLength(BYTE b)
|
||||
{
|
||||
switch(b)
|
||||
{
|
||||
case 0xf0 : // case 0xf4 : case 0xf5 : case 0xf6 : case 0xf7 :
|
||||
return 0; // ignore
|
||||
case 0xf1 : case 0xf3 :
|
||||
return 2;
|
||||
case 0xf2 :
|
||||
return 3;
|
||||
case 0xff : // meta event
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (b > 0xf8) return 1;
|
||||
|
||||
switch(b & 0xf0)
|
||||
{
|
||||
case 0x80 : case 0x90 : case 0xa0 : case 0xb0 : case 0xe0 :
|
||||
return 2;
|
||||
case 0xc0 : case 0xd0 :
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0; // must be a status byte
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
UINT ReadEvent(FILE* f, struct MidiMessage* Msg)
|
||||
{
|
||||
ULONG Bytes = 0;
|
||||
ULONG MsgLen = 0;
|
||||
UCHAR Status;
|
||||
PVOID NextByte = NULL;
|
||||
|
||||
Msg->Data1 = 0;
|
||||
Msg->Data2 = 0;
|
||||
Msg->Data3 = 0;
|
||||
|
||||
Msg->Time = ReadVarLen(f, &Bytes); // Increment ?
|
||||
// Bytes = 4; // WRONG!
|
||||
// printf("Message at %u : ", Msg->Time);
|
||||
Status = getc(f);
|
||||
Bytes ++;
|
||||
|
||||
// Figure out if we're using running status or not
|
||||
if (Status & 0x80)
|
||||
{
|
||||
Msg->Status = Status;
|
||||
NextByte = &Msg->Data1;
|
||||
// printf("NRS\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
Bytes --;
|
||||
MsgLen --; // ok?
|
||||
Msg->Data1 = Status;
|
||||
NextByte = &Msg->Data2;
|
||||
}
|
||||
|
||||
Bytes += MsgLen = GetMessageLength(Msg->Status);
|
||||
// printf("Len(%u) ", Bytes);
|
||||
|
||||
|
||||
// if (Bytes <= 4) // System messages are ignored
|
||||
// {
|
||||
if (Msg->Status == 0xf0)
|
||||
{
|
||||
ReadVarLen(f, &Bytes); // we don't care!
|
||||
while ((! feof(f)) && (Status = fgetc(f) != 0x7f))
|
||||
{
|
||||
Bytes ++;
|
||||
}
|
||||
// printf("Ignored %u bytes of SysEx\n", Bytes);
|
||||
return Bytes;
|
||||
}
|
||||
|
||||
else if (Msg->Status == 0xff) // meta event
|
||||
{
|
||||
UCHAR METype, MELen;
|
||||
// process the message somehow... (pass song pointer?)
|
||||
METype = getc(f); // What type of event it is
|
||||
MELen = getc(f); // How long it is
|
||||
fseek(f, MELen, SEEK_CUR);
|
||||
if (METype == 0x2f) // track end
|
||||
return FALSE;
|
||||
// printf("Found a meta-event of type %u, length %u (ignored it)\n", METype, MELen);
|
||||
return Bytes + MELen;
|
||||
}
|
||||
|
||||
else if (Msg->Status > 0xf0)
|
||||
return Bytes + 1;
|
||||
// }
|
||||
// else if (Bytes > 4 + 3)
|
||||
// {
|
||||
// printf("MIDI bytecount > 3. THIS SHOULD NOT HAPPEN!\n");
|
||||
// }
|
||||
|
||||
// printf("Reading %u bytes .. ", MsgLen);
|
||||
fread(NextByte, 1, MsgLen, f);
|
||||
|
||||
// printf("Message 0x%x %d %d %d\n", Msg->Status, Msg->Data1, Msg->Data2, Msg->Data3);
|
||||
|
||||
if (feof(f))
|
||||
return FALSE;
|
||||
|
||||
return Bytes;
|
||||
}
|
||||
|
||||
|
||||
UINT Trk = 0;
|
||||
|
||||
BOOLEAN ReadChunk(FILE* f)
|
||||
{
|
||||
struct GENERIC_CHUNK Chunk;
|
||||
|
||||
fread(&Chunk, sizeof(GENERIC_CHUNK), 1, f);
|
||||
SwapLongBytes(&Chunk.Length);
|
||||
|
||||
if (feof(f))
|
||||
return FALSE;
|
||||
|
||||
if (! strncmp(Chunk.Header, "MThd", 4))
|
||||
{
|
||||
int i;
|
||||
|
||||
struct MTHD_CHUNK HeaderChunk;
|
||||
memcpy(&HeaderChunk, &Chunk, sizeof(GENERIC_CHUNK));
|
||||
printf("Found MThd chunk\n");
|
||||
|
||||
fread(&HeaderChunk.Format, 1, Chunk.Length, f);
|
||||
SwapShortBytes(&HeaderChunk.Format);
|
||||
SwapShortBytes(&HeaderChunk.NumTracks);
|
||||
SwapShortBytes(&HeaderChunk.Division);
|
||||
|
||||
Song.Format = HeaderChunk.Format;
|
||||
Song.NumTracks = HeaderChunk.NumTracks;
|
||||
Song.Division = HeaderChunk.Division;
|
||||
|
||||
Song.Tracks = malloc(Song.NumTracks * sizeof(struct MessageQueue));
|
||||
|
||||
for (i = 0; i < Song.NumTracks; i ++)
|
||||
{
|
||||
Song.Tracks[i].MessageCount = 0;
|
||||
Song.Tracks[i].MessageCapacity = 0;
|
||||
Song.Tracks[i].QueuePos = 0;
|
||||
Song.Tracks[i].Messages = NULL;
|
||||
}
|
||||
|
||||
switch(HeaderChunk.Format)
|
||||
{
|
||||
case 0 :
|
||||
printf("Single track format\n");
|
||||
if (HeaderChunk.NumTracks > 1)
|
||||
{
|
||||
printf("Found more than one track!\n");
|
||||
return FALSE;
|
||||
}
|
||||
printf("1 track\n");
|
||||
break;
|
||||
|
||||
case 1 :
|
||||
printf("Multi-track format\n");
|
||||
if (HeaderChunk.NumTracks < 1)
|
||||
{
|
||||
printf("MIDI file contains no tracks!\n");
|
||||
return FALSE;
|
||||
}
|
||||
printf("%u track(s)\n", HeaderChunk.NumTracks);
|
||||
break;
|
||||
|
||||
default :
|
||||
printf("Unsupported format!\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
else if (! strncmp(Chunk.Header, "MTrk", 4))
|
||||
{
|
||||
struct MidiMessage Msg;
|
||||
UINT ByteCount = 0;
|
||||
|
||||
// Song.Tracks[Trk].MessageCapacity = 0;
|
||||
// Song.Tracks[Trk].MessageCount = 0;
|
||||
// Song.Tracks[Trk].Messages = NULL;
|
||||
|
||||
printf("Found an MTrk chunk - length %u\n", Chunk.Length);
|
||||
|
||||
Msg.Time = 0; // this gets incremented
|
||||
|
||||
while (ReadEvent(f, &Msg))
|
||||
{
|
||||
if (Msg.Status >= 0xf0)
|
||||
continue;
|
||||
|
||||
if ((Msg.Data1 & 0x80) ||
|
||||
(Msg.Data2 & 0x80) ||
|
||||
(Msg.Data3 & 0x80))
|
||||
{
|
||||
printf("WARNING: Malformed MIDI message: 0x%x %u %u %u\n", Msg.Status, Msg.Data1, Msg.Data2, Msg.Data3);
|
||||
}
|
||||
// else
|
||||
// printf("0x%x %u %u %u\n", Msg.Status, Msg.Data1, Msg.Data2, Msg.Data3);
|
||||
|
||||
if (! QueueMessage(Trk, &Msg))
|
||||
{
|
||||
UINT i;
|
||||
|
||||
printf("Out of memory\n");
|
||||
|
||||
for (i = 0; i < Trk; i ++)
|
||||
{
|
||||
free(Song.Tracks[Trk].Messages);
|
||||
}
|
||||
free(Song.Tracks);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
printf("%u messages were processed\n", Song.Tracks[Trk].MessageCount);
|
||||
|
||||
Trk ++;
|
||||
|
||||
|
||||
// while (ByteCount < Chunk.Length)
|
||||
// {
|
||||
// printf("%u < %u ?\n", ByteCount, Chunk.Length);
|
||||
// ByteCount += ReadEvent(f, &Msg);
|
||||
// ...
|
||||
// }
|
||||
|
||||
// fseek(f, Chunk.Length, SEEK_CUR);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// skip it...
|
||||
printf("Haven't got a clue what this chunk is: %s\n", Chunk.Header);
|
||||
fseek(f, Chunk.Length, SEEK_CUR);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN Load(char* Filename)
|
||||
{
|
||||
FILE* f = fopen(Filename, "rb");
|
||||
|
||||
if (! f)
|
||||
{
|
||||
printf("File not found!\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// fread(&Header, 1, 4, f);
|
||||
// printf("Header = %s\n", Header);
|
||||
|
||||
// if (strncmp(Header, "MThd", 4))
|
||||
// {
|
||||
// printf("Not a MIDI file!\n");
|
||||
// return FALSE;
|
||||
// }
|
||||
|
||||
while (! feof(f))
|
||||
if (! ReadChunk(f)) break;
|
||||
|
||||
// fread(&Length, 4, 1, f);
|
||||
// Length = SwapLongBytes(Length);
|
||||
|
||||
// if (Length != 6)
|
||||
// {
|
||||
// printf("Abnormal MThd chunk length : %u\n", Length);
|
||||
// return FALSE;
|
||||
// }
|
||||
|
||||
// fread(&Format, 2, 1, f);
|
||||
// Format = SwapShortBytes(Format);
|
||||
// fread(&NumTracks, 2, 1, f);
|
||||
// NumTracks = SwapShortBytes(NumTracks);
|
||||
|
||||
|
||||
// Ignore this for now:
|
||||
// fread(&Division, 2, 1, f);
|
||||
|
||||
fclose(f);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
#define PACK_MIDI(s, d1, d2, d3) \
|
||||
(d3 * 256 * 256 * 256) + \
|
||||
(d2 * 256 * 256) + \
|
||||
(d1 * 256) + s
|
||||
|
||||
|
||||
BOOLEAN Play()
|
||||
{
|
||||
printf("Now playing - press any key to stop...\n");
|
||||
UINT Trk;
|
||||
struct MidiMessage Msg;
|
||||
HANDLE Timer;
|
||||
LARGE_INTEGER ns;
|
||||
HMIDIOUT Device;
|
||||
|
||||
if (midiOutOpen(&Device, -1, NULL, 0, CALLBACK_NULL) != MMSYSERR_NOERROR)
|
||||
{
|
||||
printf("midiOutOpen() failed!\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Timer = CreateWaitableTimer(NULL, TRUE, "PlayMidiTimer");
|
||||
|
||||
while(DequeueMessage(5, &Msg)) // fix this
|
||||
{
|
||||
if (Msg.Time > 0)
|
||||
{
|
||||
ns.QuadPart = 20000 * Msg.Time;
|
||||
ns.QuadPart = - ns.QuadPart;
|
||||
SetWaitableTimer(Timer, &ns, 0, NULL, NULL, FALSE);
|
||||
WaitForSingleObject(Timer, INFINITE);
|
||||
}
|
||||
|
||||
printf("%u : ", Msg.Time);
|
||||
printf("0x%x %d %d %d\n", Msg.Status, Msg.Data1, Msg.Data2, Msg.Data3);
|
||||
midiOutShortMsg(Device, PACK_MIDI(Msg.Status, Msg.Data1, Msg.Data2, Msg.Data3));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
printf("MIDI Playback Test Applet\n");
|
||||
printf("by Andrew Greenwood\n\n");
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
printf("Need a filename\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("Playing %s\n", argv[1]);
|
||||
|
||||
if (Load(argv[1]))
|
||||
if (! Play())
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
Binary file not shown.
|
@ -1,907 +0,0 @@
|
|||
MIDI Playback Test Applet
|
||||
by Andrew Greenwood
|
||||
|
||||
Playing test.mid
|
||||
SLB : 0 0 0 6
|
||||
Found MThd chunk
|
||||
Multi-track format
|
||||
14 track(s)
|
||||
SLB : 0 0 0 38
|
||||
Found an MTrk chunk - length 38
|
||||
0 < 38 ?
|
||||
Message at 0 : Len(5) Found a meta-event of type 81, length 3 (ignored it)
|
||||
8 < 38 ?
|
||||
Message at 0 : Len(5) Found a meta-event of type 88, length 4 (ignored it)
|
||||
17 < 38 ?
|
||||
Message at 86012 : Len(5) Found a meta-event of type 81, length 3 (ignored it)
|
||||
25 < 38 ?
|
||||
Message at 768 : Len(5) Found a meta-event of type 81, length 3 (ignored it)
|
||||
33 < 38 ?
|
||||
Message at 175363 : Len(5) Found a meta-event of type 47, length 0 (ignored it)
|
||||
SLB : 0 0 10 122
|
||||
Found an MTrk chunk - length 2682
|
||||
0 < 2682 ?
|
||||
Message at 0 : Len(5) Found a meta-event of type 1, length 8 (ignored it)
|
||||
13 < 2682 ?
|
||||
Message at 1 : Len(5) Reading 1 bytes .. Message 0xc3 90 3 120
|
||||
18 < 2682 ?
|
||||
Message at 8 : Len(7) Reading 3 bytes .. Message 0xb3 7 116 129
|
||||
25 < 2682 ?
|
||||
Message at 2231 : Len(7) Reading 3 bytes .. Message 0x93 59 110 92
|
||||
32 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
38 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
44 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
50 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 129 108
|
||||
56 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 129 68
|
||||
62 < 2682 ?
|
||||
Message at 2489 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
68 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
74 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
80 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
86 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
92 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
98 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 96 131
|
||||
104 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
110 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
116 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 131 4
|
||||
122 < 2682 ?
|
||||
Message at 2489 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
128 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
134 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
140 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
146 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
152 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
158 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
164 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
170 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
176 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
182 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 96 131
|
||||
188 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
194 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
200 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
206 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
212 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 132 68
|
||||
218 < 2682 ?
|
||||
Message at 2491 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
224 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
230 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
236 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
242 < 2682 ?
|
||||
Message at 64 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
248 < 2682 ?
|
||||
Message at 448 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
254 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
260 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
266 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
272 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
278 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
284 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
290 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
296 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
302 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
308 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
314 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
320 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
326 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
332 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
338 < 2682 ?
|
||||
Message at 52 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
344 < 2682 ?
|
||||
Message at 52 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
350 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
356 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
362 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
368 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
374 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
380 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
386 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
392 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
398 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
404 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
410 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
416 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
422 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
428 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
434 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 131 44
|
||||
440 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 132 68
|
||||
446 < 2682 ?
|
||||
Message at 8666 : Len(6) Reading 2 bytes .. Message 0x93 0 147 59
|
||||
452 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 92 131 59
|
||||
458 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 4 147 62
|
||||
464 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 44 131 62
|
||||
470 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 4 147 59
|
||||
476 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 108 131 59
|
||||
483 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 68 147 57
|
||||
490 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
496 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
502 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
508 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
514 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
520 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
526 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 96 131 57
|
||||
532 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 0 147 55
|
||||
538 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 60 131 55
|
||||
545 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x83 4 147 57
|
||||
552 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x83 44 131 57
|
||||
558 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x83 4 147 57
|
||||
564 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x83 92 131 57
|
||||
570 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x83 4 147 57
|
||||
576 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 57
|
||||
583 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 100 147 57
|
||||
589 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
595 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
601 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
607 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
613 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 96 131 57
|
||||
619 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 0 147 55
|
||||
625 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
631 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
637 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 60 131 55
|
||||
644 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x84 68 147 59
|
||||
651 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x84 92 131 59
|
||||
657 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x84 4 147 62
|
||||
663 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x84 44 131 62
|
||||
669 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x84 4 147 64
|
||||
675 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 64
|
||||
682 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
688 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
694 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
700 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
706 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
712 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
718 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
724 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 59
|
||||
730 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
736 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 57
|
||||
742 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
748 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 57
|
||||
754 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
760 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 60 131 55
|
||||
767 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 52
|
||||
773 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 52
|
||||
779 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
785 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
791 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
797 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 60 131 57
|
||||
804 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
810 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
816 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
822 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
828 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
834 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 60 131 57
|
||||
841 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
847 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
853 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
859 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 44 131 55
|
||||
865 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
871 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x83 44 131 59
|
||||
878 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x83 100 147 57
|
||||
884 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 57
|
||||
891 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
897 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 59
|
||||
904 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 100 147 60
|
||||
910 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
916 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
922 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
928 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
934 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 44 131 59
|
||||
940 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
946 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 60
|
||||
953 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
959 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
965 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
971 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
977 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
983 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
989 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
995 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
1001 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1007 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1013 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1019 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
1025 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1031 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1037 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 100 147 57
|
||||
1043 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 57
|
||||
1050 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1056 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 59
|
||||
1063 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1069 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
1075 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 100 147 60
|
||||
1081 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
1087 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1093 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
1099 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1105 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
1111 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1117 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
1123 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1129 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 44 131 57
|
||||
1135 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
1141 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 55
|
||||
1148 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1154 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 96 131 59
|
||||
1160 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 0 147 57
|
||||
1166 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1172 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1178 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1184 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 68 147 57
|
||||
1191 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 57
|
||||
1198 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1204 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 59
|
||||
1211 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1217 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
1223 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 100 147 60
|
||||
1229 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 60
|
||||
1235 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1241 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 44 131 59
|
||||
1247 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1253 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 60
|
||||
1260 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1266 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
1272 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1278 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1284 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
1290 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
1296 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
1302 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
1308 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1314 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1320 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1326 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
1332 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1338 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
1344 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 100 147 57
|
||||
1350 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 57
|
||||
1357 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1363 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 12 131 59
|
||||
1370 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1376 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 60
|
||||
1382 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
1388 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 59
|
||||
1394 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1400 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 60
|
||||
1406 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 62
|
||||
1412 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 62
|
||||
1418 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 60
|
||||
1424 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 60
|
||||
1430 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 64
|
||||
1436 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 124 131 64
|
||||
1442 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 64
|
||||
1448 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x82 124 131 64
|
||||
1455 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 68 147 59
|
||||
1462 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 48 131 59
|
||||
1468 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 0 147 57
|
||||
1474 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 44 131 57
|
||||
1480 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
1486 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
1492 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
1498 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 96 131 57
|
||||
1504 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 0 147 55
|
||||
1510 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
1516 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
1522 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x82 124 131 55
|
||||
1529 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x89 4 195 62
|
||||
1536 < 2682 ?
|
||||
Message at 0 : Len(7) Reading 3 bytes .. Message 0x93 59 110 92
|
||||
1543 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1549 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
1555 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1561 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 129 108
|
||||
1567 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 129 68
|
||||
1573 < 2682 ?
|
||||
Message at 2489 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1579 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1585 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1591 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1597 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1603 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1609 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 96 131
|
||||
1615 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
1621 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
1627 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 131 4
|
||||
1633 < 2682 ?
|
||||
Message at 2489 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
1639 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1645 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1651 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1657 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
1663 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
1669 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1675 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1681 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1687 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1693 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 96 131
|
||||
1699 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
1705 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1711 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1717 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
1723 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 132 68
|
||||
1729 < 2682 ?
|
||||
Message at 2491 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1735 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1741 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
1747 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1753 < 2682 ?
|
||||
Message at 64 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
1759 < 2682 ?
|
||||
Message at 448 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1765 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1771 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1777 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1783 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1789 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1795 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1801 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
1807 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1813 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
1819 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1825 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
1831 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1837 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
1843 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1849 < 2682 ?
|
||||
Message at 52 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1855 < 2682 ?
|
||||
Message at 52 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1861 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1867 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1873 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
1879 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1885 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1891 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1897 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1903 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1909 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 60
|
||||
1915 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1921 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1927 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1933 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
1939 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1945 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 131 44
|
||||
1951 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
1957 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
1963 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1969 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
1975 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
1981 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1987 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
1993 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
1999 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2005 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
2011 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2017 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2023 < 2682 ?
|
||||
Message at 444 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2029 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2035 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2041 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2047 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2053 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2059 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2065 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2071 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2077 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2083 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2089 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2095 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2101 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2107 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
2113 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2119 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2125 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2131 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2137 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2143 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
2149 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2155 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2161 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2167 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2173 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2179 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2185 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2191 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2197 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
2203 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2209 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2215 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2221 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 96 131
|
||||
2227 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
2233 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2239 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2245 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2251 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 68
|
||||
2257 < 2682 ?
|
||||
Message at 2489 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2263 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2269 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2275 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2281 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2287 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
2293 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2299 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2305 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
2311 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2317 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2323 < 2682 ?
|
||||
Message at 444 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2329 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2335 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2341 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2347 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2353 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2359 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2365 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2371 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2377 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2383 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2389 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2395 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2401 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2407 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 100 147
|
||||
2413 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2419 < 2682 ?
|
||||
Message at 441 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2425 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 129 12
|
||||
2431 < 2682 ?
|
||||
Message at 443 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2437 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
2443 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2449 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
2455 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2461 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
2467 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2473 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
2479 < 2682 ?
|
||||
Message at 62 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2485 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
2491 < 2682 ?
|
||||
Message at 60 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2497 < 2682 ?
|
||||
Message at 64 : Len(6) Reading 2 bytes .. Message 0x93 110 124 131
|
||||
2503 < 2682 ?
|
||||
Message at 64 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2509 < 2682 ?
|
||||
Message at 64 : Len(6) Reading 2 bytes .. Message 0x93 110 130 124
|
||||
2515 < 2682 ?
|
||||
Message at 448 : Len(6) Reading 2 bytes .. Message 0x93 110 129 68
|
||||
2521 < 2682 ?
|
||||
Message at 2491 : Len(6) Reading 2 bytes .. Message 0x93 110 48 131
|
||||
2527 < 2682 ?
|
||||
Message at 59 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
2533 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 44 131
|
||||
2539 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2545 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2551 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2557 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 96 131
|
||||
2563 < 2682 ?
|
||||
Message at 57 : Len(6) Reading 2 bytes .. Message 0x93 110 0 147
|
||||
2569 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 92 131
|
||||
2575 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 4 147
|
||||
2581 < 2682 ?
|
||||
Message at 55 : Len(6) Reading 2 bytes .. Message 0x93 110 130 124
|
||||
2587 < 2682 ?
|
||||
Message at 439 : Len(6) Reading 2 bytes .. Message 0x93 110 197 4
|
||||
2593 < 2682 ?
|
||||
Message at 6535 : Len(6) Reading 2 bytes .. Message 0x93 120 0 195
|
||||
2599 < 2682 ?
|
||||
Message at 80 : Len(6) Reading 2 bytes .. Message 0x93 0 147 59
|
||||
2605 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 92 131 59
|
||||
2611 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 4 147 62
|
||||
2617 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 44 131 62
|
||||
2623 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x93 4 147 59
|
||||
2629 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 108 131 59
|
||||
2636 < 2682 ?
|
||||
Message at 110 : Len(7) Reading 3 bytes .. Message 0x81 68 147 57
|
||||
2643 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 57
|
||||
2649 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 55
|
||||
2655 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 55
|
||||
2661 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 59
|
||||
2667 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 92 131 59
|
||||
2673 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 4 147 57
|
||||
2679 < 2682 ?
|
||||
Message at 110 : Len(6) Reading 2 bytes .. Message 0x81 96 131 57
|
||||
SLB : 110 129 60 131
|
||||
Haven't got a clue what this chunk is: n
|
||||
SLB : 131 60 129 110
|
Loading…
Reference in a new issue