# (C) 2003 XDA Developers  itsme@xs4all.nl
#
# $Header$
#
# note: commands should contain forward slashes
#       double quoted strings may contain dos-type backslashes in paths
#
# currently you have to manually switch the '300' and '420' in this file
# to switch between a ppc2002/ce3.00 and ppc2003/ce4.20 version of testpi.exe
#
multiversion_support=1
out:=../build
obj:=../build/ce

include ../local.mak

#!!! do not name this variable 'link', it confuses the linker.

# compiler flags
pmdef300:=/D _WIN32_WCE=300 /D "WIN32_PLATFORM_PSPC=310" /D UNDER_CE=300
pmdef420:=/D _WIN32_WCE=420 /D "WIN32_PLATFORM_PSPC=400" /D UNDER_CE=420
pmdef500:=/D _WIN32_WCE=500 /D "WIN32_PLATFORM_PSPC" /D UNDER_CE=500

#
# !! include pb420incs before include to get the right nled.h file
# /Zi /Od /Fd"$(out)" for debugging
# /O2      for release
cflags:=/Zi /nologo /W3 /O2 /c /Fo"$(obj)/" /I "..\include" /I "../dll" /I "../common" /EHsc /FI ../common/nowarn.h  /I ../include/msvc
targetdefs:=/D "ARM" /D "_ARM_" /D "ARMV4"
#/D "DEBUG" 
cdefs:=$(targetdefs) /D "UNICODE" /D "_UNICODE" /D "NDEBUG"
cdefs+=/D _CRT_SECURE_NO_WARNINGS /D _SECURE_SCL=0 /D _HAS_ITERATOR_DEBUGGING=0 /D NOMINMAX /D _AA_WITH_WINMAIN
dlldefs:=/D "_USRDLL"

# linker flags
lddllflags:=/entry:"_DllMainCRTStartup" /dll  /base:"0x00100000"
ldexeflags:=/entry:"WinMainCRTStartup" /base:"0x00010000"
ldplatformflags:=/subsystem:windowsce,3.00 /align:"4096" 
ldflags:=/nologo /stack:0x10000,0x1000 $(celdtargetflags) $(ldplatformflags)
ldflags+= /debug /map
ldflagsLARGE:=$(subst stack:0x10000,stack:0x20000,$(ldflags))
libpaths:=/libpath:"$(celib)" /libpath:"$(ppclib)"

all: $(obj) all2  BattLogger.arm.CAB setuptst.arm.CAB

../dll/cever_deps.h: ../dll/cever_deps.cpp
	perl generate_cever_h.pl ../dll/cever_deps.cpp > ../dll/cever_deps.h

$(obj):
	mkdir -p $(obj)



$(out)/gtststr.exe: tststr.cpp
	g++ -Wall -lshlwapi -o $@ $^

$(out)/wtststr.exe: tststr.cpp
	"$(w32cc)" /EHsc /Wall /wd4668 /wd4820 -o $@ shlwapi.lib $^

#Exports=Close Deinit IOControl Init Open PowerDown PowerUp Read Seek Write
####printf "LIBRARY rdodev.dll \r\n" > $(obj)/logdev.def
####printf "\r\n" >> $(obj)/logdev.def
####printf "EXPORTS \r\n" >> $(obj)/logdev.def
####$(foreach m,$(Exports),printf "    RDO_$(m)=$(m)\r\n" >> $(obj)/logdev.def; )
# ... /def:$(obj)/logdev.def
$(out)/logdev.dll: $(obj)/logdev.obj  $(obj)/stringutils.obj $(obj)/devicedriverloader.obj $(obj)/RegistryFunctions.obj $(obj)/debug.obj
	@"$(celd)" $(libpaths) $(ldflagsLARGE) /entry:"start" $(celdtargetflags) $(lddllflags)    /out:$@ $^ coredll.lib corelibc.lib secchk.lib ccrtrtti.lib
	@$(SIGNIT) $@
APPLIST+=logdev.dll
CLEANLIST+=$(out)/logdev.dll
CLEANLIST+=$(obj)/logdev.obj
CLEANLIST+=$(obj)/logdev.def

$(out)/logdev2.dll: $(obj)/logdev2.obj  $(obj)/stringutils.obj $(obj)/devicedriverloader.obj $(obj)/RegistryFunctions.obj $(obj)/debug.obj
	@"$(celd)" $(libpaths) $(ldflagsLARGE) /entry:"start" $(celdtargetflags) $(lddllflags)    /out:$@ $^ coredll.lib corelibc.lib secchk.lib ccrtrtti.lib
	@$(SIGNIT) $@
NPAPPLIST+=logdev2.dll
CLEANLIST+=$(out)/logdev2.dll
CLEANLIST+=$(obj)/logdev2.obj
CLEANLIST+=$(obj)/logdev2.def


$(out)/tstdll.dll: $(obj)/tstdll.obj
	@"$(celd)" $(libpaths) /entry:"entrypoint" $(celdtargetflags) /export:"entrypoint" /subsystem:windowsce /nodefaultlib:corelibc.lib /nodefaultlib:coredll.lib /nodefaultlib:oldnames /dll /out:$@ $^
APPLIST+=tstdll.dll
CLEANLIST+=$(out)/tstdll.dll
CLEANLIST+=$(obj)/tstdll.obj

cflags_setupdll:=/D "SETUPDLL_EXPORTS"
$(out)/setupdll.dll: $(obj)/setupdll.obj $(obj)/debug.obj $(obj)/stringutils.obj
	@"$(celd)" /entry:"_DllMainCRTStartup" $(celdtargetflags) /subsystem:windowsce $(libpaths) coredll.lib corelibc.lib $(extralibs) /dll /out:$@ $^
APPLIST+=setupdll.dll
CLEANLIST+=$(out)/setupdll.dll
CLEANLIST+=$(obj)/setupdll.obj

setuptst.arm.CAB:    setuptst.inf $(out)/setupdll.dll


$(obj)/edb.lib: edb.def
	"$(celibtool)" /def:$< /out:$@ $(celdtargetflags)


#$(obj)/dotst.obj: dotst.S
#	arm-wince-pe-gcc -c -o $@ $<

$(obj)/tstreadedb.obj: tstreadedb.cpp
	@"$(cecc)" $(pb500incs) $(cflags) $(cdefs) $(pmdef500) $^
$(obj)/tstpoom.obj: tstpoom.cpp
	@"$(cecc)" $(pb500incs) $(cflags) $(cdefs) $(pmdef500) $^
$(obj)/tstedb.obj: tstedb.cpp
	@"$(cecc)" $(pb500incs) $(cflags) $(cdefs) $(pmdef500) $^

ifdef multiversion_support
$(obj)/cever_deps300.obj: ../dll/cever_deps.cpp
	@"$(cecc)" $(cdefs) $(pmdef300) $(dlldefs) $(pb300incs) $(cflags) $^ /Fo"$@"
$(obj)/cever_deps420.obj: ../dll/cever_deps.cpp
	@"$(cecc)" $(cdefs) $(pmdef420) $(dlldefs) $(pb420incs) $(cflags) $^ /Fo"$@"
$(obj)/cever_deps500.obj: ../dll/cever_deps.cpp
	@"$(cecc)" $(cdefs) $(pmdef500) $(dlldefs) $(pb500incs) $(cflags) $^ /Fo"$@"
endif



#################################

define buildtarget

APPLIST+=$1
CLEANLIST+=$(out)/$1
CLEANLIST+=$(basename $(out)/$1).pdb
CLEANLIST+=$(basename $(out)/$1).map
CLEANLIST+=$(addprefix $(obj)/,$2)

$(out)/$1: $(addprefix $(obj)/,$2)

endef

define buildnptarget

NPAPPLIST+=$1
CLEANLIST+=$(out)/$1
CLEANLIST+=$(basename $(out)/$1).pdb
CLEANLIST+=$(basename $(out)/$1).map
CLEANLIST+=$(addprefix $(obj)/,$2)

$(out)/$1: $(addprefix $(obj)/,$2)

endef



define buildrules

$(call buildtarget,vibrate.exe,vibrate.obj debug.obj stringutils.obj)
$(call buildtarget,tstdev.exe,tstdev.obj debug.obj stringutils.obj devicedriverloader.obj RegistryFunctions.obj)
$(call buildtarget,loadflashdrv.exe,loadflashdrv.obj debug.obj stringutils.obj kernelmisc.obj cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj devicedriverloader.obj RegistryFunctions.obj)
$(call buildtarget,msmnand.exe,msmnand.obj debug.obj stringutils.obj)
$(call buildtarget,unloaddev.exe,unloaddev.obj debug.obj stringutils.obj RegistryFunctions.obj)
$(call buildtarget,loaddev.exe,loaddev.obj debug.obj stringutils.obj RegistryFunctions.obj)
$(call buildtarget,flushdev.exe,flushdev.obj debug.obj stringutils.obj)
$(call buildnptarget,tst-sha.exe,tst-sha.obj debug.obj stringutils.obj)
$(call buildnptarget,tstperfc.exe,tstperfc.obj debug.obj stringutils.obj)
$(call buildnptarget,tstidabug.exe,tstidabug.obj)
tstidabug_libs=/nodefaultlib:oldnames
$(call buildtarget,stackdumper.dll,stackdumper.obj printfformat.obj)
stackdumper_libs=/nodefaultlib:oldnames /entry:DllMain
$(call buildnptarget,tstxscale.exe,tstxscale.obj debug.obj stringutils.obj)
$(call buildnptarget,tsttimers.exe,tsttimers.obj debug.obj stringutils.obj)
$(call buildtarget,tstclock.exe,tstclock.obj debug.obj stringutils.obj)
$(call buildtarget,getspi.exe,getspi.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,tstbkl.exe,tstbkl.obj debug.obj stringutils.obj)
ifdef multiversion_support
$(call buildtarget,opendisk.exe,opendisk.obj debug.obj stringutils.obj  kernelmisc.obj  cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
endif
opendisk_libs:=toolhelp.lib
$(call buildnptarget,tstcrash.exe,tstcrash.obj debug.obj stringutils.obj)
$(call buildtarget,tstexc.exe,tstexc.obj debug.obj stringutils.obj)
$(call buildtarget,tstndis.exe,tstndis.obj debug.obj stringutils.obj)
cflags_tstndis=-I "$(pbsrc500)\PUBLIC\COMMON\DDK\INC"
tstndis_libs:=ndis.lib
$(call buildtarget,netstat.exe,netstat.obj debug.obj stringutils.obj)
netstat_libs:=iphlpapi.lib ws2.lib
$(call buildtarget,tstenumnet.exe,tstenumnet.obj debug.obj stringutils.obj)
tstenumnet_libs:=cellcore.lib
$(call buildtarget,regbk.exe,pregutl.obj debug.obj stringutils.obj)
$(call buildtarget,bkondisk.exe,bkondisk.obj debug.obj stringutils.obj)
$(call buildtarget,rdwlan.exe,rdwlan.obj debug.obj stringutils.obj)
$(call buildtarget,bksamsungflash.exe,bksamsungflash.obj debug.obj stringutils.obj)
$(call buildtarget,dervkey.exe,dervkey.obj debug.obj stringutils.obj asciiapis.obj)
dervkey_libs:=crypt32.lib
$(call buildtarget,tststrata.exe,tststrata.obj debug.obj stringutils.obj)
tststrata_libs:=toolhelp.lib
$(call buildtarget,logcells.exe,logcells.obj debug.obj stringutils.obj)
logcells_libs:=toolhelp.lib
$(call buildnptarget,tstsystime.exe,tstsystime.obj debug.obj stringutils.obj)
$(call buildnptarget,tstrng.exe,tstrng.obj debug.obj stringutils.obj)
ifdef multiversion_support
$(call buildtarget,tstwnd.exe,tstwnd.obj debug.obj stringutils.obj kernelmisc.obj  cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
endif
tstwnd_libs:=toolhelp.lib
$(call buildtarget,tststr.exe,tststr.obj)
tststr_libs=/nodefaultlib:oldnames
$(call buildtarget,phonevolume.exe,phonevolume.obj debug.obj stringutils.obj)
$(call buildnptarget,tstayg.exe,tstayg.obj debug.obj stringutils.obj)
$(call buildnptarget,tstgsmboot.exe,tstgsmboot.obj debug.obj stringutils.obj)
$(call buildnptarget,tstsock.exe,tstsock.obj debug.obj stringutils.obj)
tstsock_libs:=ws2.lib

$(call buildtarget,tsttapi.exe,tsttapi.obj debug.obj stringutils.obj RegistryFunctions.obj)
cflags_tsttapi=-I ../libril
tsttapi_libs=-libpath:../build/ce  ril.lib
$(call buildtarget,setcfwd.exe,setcfwd.obj debug.obj stringutils.obj)
cflags_setcfwd=-I ../libril
setcfwd_libs=-libpath:../build/ce  ril.lib

$(call buildtarget,setcbst.exe,setcbst.obj debug.obj stringutils.obj)
cflags_setcbst=-I ../libril
setcbst_libs=-libpath:../build/ce  ril.lib

$(call buildnptarget,send_ath.exe,send_ath.obj debug.obj stringutils.obj)
$(call buildtarget,circularbufmon.exe,circularbufmon.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,dbglog.exe,dbglog.obj debug.obj stringutils.obj vectorutils.obj kernelmisc.obj FileFunctions.obj)
$(call buildtarget,readdbglog.exe,readdbglog.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,gsmbufmon.exe,gsmbufmon.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,imabufmon.exe,imabufmon.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,qualbufmon.exe,qualbufmon.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,sambufmon.exe,sambufmon.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,rashup.exe,rashup.obj debug.obj stringutils.obj)
$(call buildnptarget,tstmsg.exe,tstmsg.obj debug.obj stringutils.obj)
$(call buildtarget,ledtest.exe,ledtest.obj debug.obj stringutils.obj)
$(call buildnptarget,tstmgwav.exe,tstmgwav.obj debug.obj stringutils.obj)
$(call buildtarget,appevt.exe,appevt.obj debug.obj stringutils.obj)
$(call buildtarget,logalive.exe,logalive.obj debug.obj stringutils.obj)
$(call buildtarget,teststartrek.exe,teststartrek.obj debug.obj stringutils.obj)
cflags_teststartrek=-D_BOOST_LITE -I "$(boost)"
$(call buildtarget,testphoton.exe,testphoton.obj debug.obj stringutils.obj)
cflags_testphoton=-D_BOOST_LITE -I "$(boost)"
$(call buildtarget,chaininfo.exe,chaininfo.obj debug.obj stringutils.obj)
$(call buildtarget,BattLogger.exe,BattLogger.obj debug.obj stringutils.obj RegistryFunctions.obj)
$(call buildtarget,tstitsutils.exe,tstitsutils.obj debug.obj stringutils.obj)
ifdef multiversion_support
$(call buildtarget,audiodev.exe,audiodev.obj debug.obj stringutils.obj  kernelmisc.obj  cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
endif
audiodev_libs:=toolhelp.lib
$(call buildnptarget,tstreadedb.exe,tstreadedb.obj debug.obj stringutils.obj edb.lib)
$(call buildtarget,tstpoom.exe,tstpoom.obj debug.obj stringutils.obj edb.lib)
tstpoom_libs:=ole32.lib oleaut32.lib
$(call buildtarget,tstedb.exe,tstedb.obj debug.obj stringutils.obj edb.lib)
$(call buildtarget,tstdb.exe,tstdb.obj debug.obj stringutils.obj)
$(call buildtarget,tststk.exe,tststk.obj debug.obj stringutils.obj)
ifdef multiversion_support
$(call buildtarget,tstsdid.exe,tstsdid.obj debug.obj stringutils.obj kernelmisc.obj  cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
tstsdid_libs:=toolhelp.lib
$(call buildtarget,loaddll.exe,loaddll.obj debug.obj stringutils.obj kernelmisc.obj  cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
loaddll_libs:=toolhelp.lib
cflags_loaddll:=/I "$(boost)"
endif
$(call buildtarget,loadklib.exe,loadklib.obj debug.obj stringutils.obj dllloader.obj kernelmisc.obj cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
cflags_loadklib=-I ../dllloader/
$(call buildtarget,tstreg.exe,tstreg.obj debug.obj stringutils.obj)
$(call buildtarget,wcetrace.exe,wcetrace.obj debug.obj stringutils.obj)
$(call buildtarget,tstkio.exe,tstkio.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,asynckeylog.exe,asynckeylog.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,tstdevio.exe,tstdevio.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildnptarget,antidebug.exe,antidebug.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildnptarget,tstserial.exe,tstserial.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,tstarg.exe,tstarg.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,prt.exe,prt.obj stringutils.obj)
$(call buildtarget,tstcreateproc.exe,tstcreateproc.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,tstshexec.exe,tstshexec.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,tstnot.exe,tstnot.obj debug.obj stringutils.obj vectorutils.obj)
tstnot_libs=aygshell.lib
$(call buildnptarget,tstdevnot.exe,tstdevnot.obj debug.obj stringutils.obj vectorutils.obj)
cflags_tstdevnot:=/I "$(boost)" -DBOOST_THREAD_NO_DATETIME -D_BOOST_LITE
tstdevnot_libs:=/libpath:"$(boost)/lib-arm"

$(call buildnptarget,tstwav.exe,tstwav.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildnptarget,tstomap.exe,tstomap.obj debug.obj stringutils.obj vectorutils.obj)
$(call buildtarget,tstdsk.exe,tstdsk.obj debug.obj stringutils.obj)
$(call buildtarget,tstcpu.exe,tstcpu.obj debug.obj stringutils.obj)
$(call buildtarget,tcpipdump.exe,tcpipdump.obj debug.obj stringutils.obj)
tcpipdump_libs=iphlpapi.lib
$(call buildtarget,tstbxj.exe,tstbxj.obj debug.obj stringutils.obj)
$(call buildtarget,tststores.exe,tststores.obj debug.obj stringutils.obj)
$(call buildtarget,tsttffswork.exe,tsttffswork.obj debug.obj stringutils.obj)
$(call buildtarget,tsttffs.exe,tsttffs.obj debug.obj stringutils.obj)
ifdef multiversion_support
$(call buildtarget,testpi.exe,testpi.obj debug.obj stringutils.obj kernelmisc.obj  cever_deps300.obj cever_deps420.obj cever_deps500.obj MemoryUsage.obj)
testpi_libs:= toolhelp.lib
endif
$(call buildtarget,setdevdata.exe,setdevdata.obj debug.obj stringutils.obj)
$(call buildnptarget,tstoemsbl.exe,tstoemsbl.obj debug.obj stringutils.obj RegistryFunctions.obj)
$(call buildtarget,loadxml.exe,loadxml.obj debug.obj stringutils.obj FileFunctions.obj)
loadxml_libs:=aygshell.lib
$(call buildnptarget,tstcs.exe,tstcs.obj debug.obj stringutils.obj)

endef

$(eval $(buildrules))

all2:  $(addprefix $(out)/,$(APPLIST))
np:  $(addprefix $(out)/,$(NPAPPLIST))

vpath .obj $(obj)
$(out)/%.exe: $(obj)/%.obj
	@"$(celd)" $(libpaths) $(ldflags) coredll.lib corelibc.lib $(extralibs) $(ldexeflags) $($(basename $(notdir $@))_libs) /out:$@ $^
	@$(SIGNIT) $@

$(out)/regbk.exe:
	@"$(celd)" $(libpaths) $(ldflags) coredll.lib corelibc.lib $(extralibs) $(ldexeflags) $($(basename $(notdir $@))_libs) /out:$@ $^
	@$(SIGNIT) $@

$(out)/%.dll: $(obj)/%.obj
	@"$(celd)" $(libpaths) $(ldflags) coredll.lib corelibc.lib $(extralibs) $(lddllflags) $($(basename $(notdir $@))_libs) /out:$@ $^
	@$(SIGNIT) $@

vpath .cpp . ../common/ ../dll/ ../dllloader/

$(obj)/%.obj: ../common/%.cpp
	@"$(cecc)" $(cdefs) $(pmdef500) $(pb500incs) $(cflags) $^
$(obj)/%.obj: ../dll/%.cpp
	@"$(cecc)" $(cdefs) $(pmdef500) $(pb500incs) $(cflags) $^
$(obj)/%.obj: ../dllloader/%.cpp
	@"$(cecc)" $(cdefs) $(pmdef500) $(pb500incs) $(cflags) $^

$(obj)/pregutl.obj: $(obj)/%.obj: ../src/%.cpp
	@"$(cecc)" $(cdefs) $(pmdef500) $(pb500incs) $(cflags) $^
$(obj)/%.obj: %.cpp
	@"$(cecc)" $(cflags_$(basename $(notdir $@))) $(cdefs) $(pmdef500) $(pb500incs) $(cflags) $^



clean:
	rm -f $(CLEANLIST)

ledtest: $(out)/ledtest.exe
	pput -f $(out)/ledtest.exe "%CSIDL_WINDOWS%"
	prun ledtest.exe

get:
	pget -f \ledtest.log $(out)
	cat $(out)/ledtest.log

htest: $(out)/chaininfo.exe
	pdel \storage\chaininfo.log
	pput -f $(out)/chaininfo.exe \\
	prun \chaininfo.exe

cabwizwm:=$(wm6sdk)/Tools/CabWiz/cabwiz.exe
romtools:=../../romtools
BattLogger.arm.CAB:    BattLogger.inf  $(out)/BattLogger.exe

%.arm.CAB:    %.inf
	@"$(cabwizwm)" $< /err $(obj)/$(basename $(notdir $@)).uerr /nouninstall /cpu arm
	@perl $(romtools)/tounicode.pl -d $(obj)/$(basename $(notdir $@)).uerr $(obj)/$(basename $(notdir $@)).err
	-@if grep -v "Warning: Section .DestinationDirs. key .[a-zA-Z]*. is not using the string ..InstallDir..\\|value .[A-Z][a-z]*. has an empty string\\|Section .DefaultInstall. key .AddReg. - there are no section entries to process" $(obj)/$(basename $(notdir $@)).err; then false; else echo created $@; fi
	-@$(SIGNIT) $@
	@$(SIGNIT) $@


btest: $(out)/BattLogger.exe
	pdel \storage\Battery.log
	pput -f $(out)/BattLogger.exe \\
	prun \BattLogger.exe

bget:
	pget -f \Battery.log $(out)
	cat $(out)/Battery.log

ptest: $(out)/testpi.exe
	pput -f $(out)/testpi.exe \windows
	pdel \testpi.log
	prun testpi.exe

pget:
	pget -f \testpi.log $(out)
	cat $(out)/testpi.log

dtest: $(out)/tstdsk.exe
	pput -f $(out)/tstdsk.exe \windows
	pdel \tstdsk.log
	prun tstdsk.exe

dget:
	pget -f \tstdsk.log $(out)
	cat $(out)/tstdsk.log

ftest: $(out)/tsttffs.exe
	pput -f $(out)/tsttffs.exe \windows
	pdel \tsttffs.log
	prun tsttffs.exe

fget:
	pget -f \tsttffs.log $(out)
	cat $(out)/tsttffs.log

setdevtest: $(out)/setdevdata.exe
	pput -f $(out)/setdevdata.exe \windows
	-pdel \setdevdata.log
	-rm $(out)/setdevdata.log
	prun setdevdata.exe
	sleep 2
	prun setdevdata.exe -o TMOBILE -l ENG
	sleep 2
	pget -f \setdevdata.log $(out)
	cat $(out)/setdevdata.log


atest:  $(out)/audiodev.exe
	pdel \storage\audiodev.log \audiodev.log
	pput -f $(out)/audiodev.exe \\
	pdebug -x \audiodev.exe

wtest:  $(out)/tstwnd.exe
	pdel \storage\tstwnd.log
	pput -f $(out)/tstwnd.exe \\
	prun \tstwnd.exe

ctest:  $(out)/logcells.exe
	pdel \storage\logcells.log
	pput -f $(out)/logcells.exe \\
	prun \logcells.exe

stest:  $(out)/tststrata.exe
	pdel \tststrata.log
	pput -f $(out)/tststrata.exe \\
	prun \tststrata.exe


strtest: $(out)/wtststr.exe $(out)/gtststr.exe $(out)/tststr.exe
	echo running msc tststr
	$(out)/wtststr.exe
	echo running gcc tststr
	$(out)/gtststr.exe
	echo running evc tststr
	pput -f $(out)/tststr.exe \\
	pdel \tststr.log
	prun  \tststr.exe
	sleep 1
	pget -c \tststr.log

otest:  $(out)/phonevolume.exe
	pdel \storage\phonevolume.log
	pput -f $(out)/phonevolume.exe \\

vtest: $(out)/getspi.exe
	pdel \getspi.log \storge\getspi.log
	pput -f $(out)/getspi.exe \\
	prun \getspi.exe
	sleep 5
	-pget -c \storage\getspi.log
	-pget -c \getspi.log

itest: $(out)/tstitsutils.exe
	pdel \storage\tstits.log
	pput -f $(out)/tstitsutils.exe \\
	pput -f $(out)/itsutils.dll \\
	prun \\tstitsutils.exe \\itsutils.dll
	sleep 2
	pget -c \storage\tstits.log

sdtest: $(out)/tstsdid.exe
	pdel \tstsdid.log
	pput -f $(out)/tstsdid.exe \\
	prun \tstsdid.exe
	sleep 2
	pget -c \tstsdid.log

kdtest: $(out)/tstdll.dll $(out)/loaddll.exe
	pput -v -f $(out)/tstdll.dll $(out)/loaddll.exe \\
	touch tstdll.cpp
	pdel \\loaddll.log
	prun loaddll tstdll.dll
	pget -c \\loaddll.log

edbtest: $(out)/tstedb.exe
	pdel \storage\tstedb.log
	pput -f $(out)/tstedb.exe "%CSIDL_WINDOWS%"
	prun \tstedb.exe \pim.vol

nn=$(subst .cpp,,$(n))
test: $(out)/$(nn).exe
	-pkill $(nn)
	pdel \$(nn).log
	pput -f $(out)/$(nn).exe "%CSIDL_WINDOWS%"
	prun $(nn)

# $(out)/$(nn).exe
autostart:
	-pput -f $(out)/$(nn).exe "%CSIDL_WINDOWS%"
	printf "#$(nn)" | pput -c -f %CSIDL_STARTUP%\\$(nn).lnk

# rdo1 -> logdev    [order=3]
#      target=rdo2
# rdo2 -> radio     [order=2]
# .. every device with order>=3  needs to have it's order incremented
installdev: ../build/logdev.dll
	pput -f ../build/logdev.dll "%CSIDL_WINDOWS%"
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunkdev
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunkdev :Dll=sz:radio.dll :Index=dword:00000002 :Order=dword:00000002 :Prefix=sz:RDO :Priority256=dword:00000093
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\QRADIO :Dll=sz:logdev.dll :target=sz:RDO2: :verbose=dword:14 :Flags=dword:8
	
	pregutl -s HKLM\\drivers\\builtin\\QRADIO :Order=dword:00000003
	
	pregutl -s HKLM\\drivers\\builtin\\NDISUIO	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\PPP	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\QCMD	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\Xpanel	:Order=dword:00000004
	
	pregutl -s HKLM\\drivers\\builtin\\RIL	:Order=dword:00000005
	pregutl -s HKLM\\drivers\\builtin\\SIM	:Order=dword:00000005
	pregutl -s HKLM\\drivers\\builtin\\Serial	:Order=dword:00000005
	pregutl -s HKLM\\drivers\\builtin\\ZeroConfig	:Order=dword:00000005
	pregutl -s HKLM\\drivers\\builtin\\ipv6hlp	:Order=dword:00000005
	
	pregutl -s HKLM\\drivers\\builtin\\SMS	:Order=dword:00000006
	pregutl -s HKLM\\drivers\\builtin\\Ethman	:Order=dword:00000006
	pregutl -s HKLM\\drivers\\builtin\\QDATA	:Order=dword:00000006
	
	pdel \\logdev.log \\log-*.log

stopdev:
	pregutl -s HKLM\\Drivers\\BuiltIn\\QRADIO :Dll=sz:radio.dll :Order=dword:00000002
	pregutl -d HKLM\\Drivers\\BuiltIn\\QRADIO :flags :target :verbose
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunkdev
	# for 220
	pregutl -s HKLM\\Drivers\\BuiltIn\\Serial_Data :Dll=sz:Serial_Data.dll
	pregutl -d HKLM\\Drivers\\BuiltIn\\Serial_Data :flags :verbose :target
#pregutl -s HKLM\\Drivers\\BuiltIn\\Serial_Cmd :Dll=sz:Serial_Cmd.dll
#pregutl -d HKLM\\Drivers\\BuiltIn\\Serial_Cmd :flags :verbose :target
#pregutl -d HKLM\\Drivers\\BuiltIn\\ThunkCmd
	preboot

installdev2: ../build/logdev.dll
	wm5unlock.bat
	pput -f ../build/logdev.dll "%CSIDL_WINDOWS%"
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunkdev
	# flags=4 : don't load by device.exe
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunkdev :Dll=sz:radio.dll :Index=dword:00000002 :Order=dword:00000002 :Prefix=sz:RDO :Priority256=dword:00000093 :Flags=dword:00000004
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\QRADIO :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunkdev :verbose=dword:14 :flags=dword:8
	pdel \\logdev.log \\log-*.log
	
ignore:
	pregutl -s HKLM\\drivers\\builtin\\NDISUIO	:Order=dword:00000003
	pregutl -s HKLM\\drivers\\builtin\\PPP	:Order=dword:00000003
	pregutl -s HKLM\\drivers\\builtin\\QCMD	:Order=dword:00000003
	pregutl -s HKLM\\drivers\\builtin\\Xpanel	:Order=dword:00000003
	
	pregutl -s HKLM\\drivers\\builtin\\RIL	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\SIM	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\Serial	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\ZeroConfig	:Order=dword:00000004
	pregutl -s HKLM\\drivers\\builtin\\ipv6hlp	:Order=dword:00000004
	
	pregutl -s HKLM\\drivers\\builtin\\SMS	:Order=dword:00000005
	pregutl -s HKLM\\drivers\\builtin\\Ethman	:Order=dword:00000005
	pregutl -s HKLM\\drivers\\builtin\\QDATA	:Order=dword:00000005
	

# install on cp220
installdev3: ../build/logdev.dll
	pput -f ../build/logdev.dll "%CSIDL_WINDOWS%"
	
	# install data hook
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunkdev
	# flags=4 : don't load by device.exe
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunkdev  :Dll=sz:Serial_data.Dll :Prefix=sz:COM :Index=dword:8 :Flags=dword:00000004
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\Serial_Data :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunkdev :verbose=dword:14 :flags=dword:8
	
	# install atcmd hook
#pregutl -c HKLM\\Drivers\\BuiltIn\\ThunkCmd
## flags=4 : don't load by device.exe
#pregutl -s HKLM\\Drivers\\BuiltIn\\ThunkCmd :Dll=sz:Serial_cmd.Dll :Prefix=sz:COM :Index=dword:8 :Flags=dword:00000004
## 8 = naked driver
#pregutl -s HKLM\\Drivers\\BuiltIn\\Serial_Cmd :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\ThunkCmd :verbose=dword:14 :flags=dword:8
	
	pdel \\logdev.log \\log-*.log

installqdev:
	# install on qualcomm phone
	wm5unlock.bat
	pput -f ../build/logdev.dll "%CSIDL_WINDOWS%"
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk0
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk1
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk2
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk3
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk7
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk9
	# flags=4+8 : don't load by device.exe, and naked
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk0 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD0 :Index=dword:0 :SioPort=dword:0
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk1 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD1 :Index=dword:1 :SioPort=dword:1
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk2 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD2 :Index=dword:2 :SioPort=dword:2
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk3 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD3 :Index=dword:3 :SioPort=dword:3
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk7 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD7 :Index=dword:7 :SioPort=dword:7
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk9 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD9 :Index=dword:9 :SioPort=dword:9
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD0 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk0 :verbose=dword:37 :flags=dword:8
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD1 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk1 :verbose=dword:37 :flags=dword:8
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD2 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk2 :verbose=dword:37 :flags=dword:8
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD3 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk3 :verbose=dword:37 :flags=dword:8
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD7 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk7 :verbose=dword:37 :flags=dword:8
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD9 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk9 :verbose=dword:37 :flags=dword:8
	
installqdev0:
	# install on qualcomm phone
	wm5unlock.bat
	pput -f ../build/logdev2.dll "%CSIDL_WINDOWS%"
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk0
	# flags=4+8 : don't load by device.exe, and naked
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk0 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD0 :Index=dword:0 :SioPort=dword:0
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD0 :Dll=sz:logdev2.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk0 :verbose=dword:37 :flags=dword:8
	
installqdev1:
	# install on qualcomm phone
	wm5unlock.bat
	pput -f ../build/logdev.dll "%CSIDL_WINDOWS%"
	pregutl -c HKLM\\Drivers\\BuiltIn\\Thunk1
	# flags=4+8 : don't load by device.exe, and naked
	pregutl -s HKLM\\Drivers\\BuiltIn\\Thunk1 :DeviceArrayIndex=dword:1 :DeviceType=dword:0 :Dll=sz:smd_com.dll :Flags=dword:C :Order=dword:4 :Prefix=sz:SMD :Tsp=sz:Unimodem.dll  :FriendlyName=sz:SMD1 :Index=dword:1 :SioPort=dword:1
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD1 :Dll=sz:logdev.dll :target=sz:Drivers\\\\BuiltIn\\\\Thunk1 :verbose=dword:37 :flags=dword:8
	

uninstallqdev:
	# install on qualcomm phone
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunk0
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunk1
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunk2
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunk3
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunk7
	pregutl -d HKLM\\Drivers\\BuiltIn\\Thunk9
	# 8 = naked driver
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD0 :Dll=sz:smd_com.dll 
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD1 :Dll=sz:smd_com.dll 
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD2 :Dll=sz:smd_com.dll 
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD3 :Dll=sz:smd_com.dll 
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD7 :Dll=sz:smd_com.dll 
	pregutl -s HKLM\\Drivers\\BuiltIn\\SMD9 :Dll=sz:smd_com.dll 
	

unloadqdev: ../build/unloaddev.exe
	pput -f ..\\build\\unloaddev.exe \\windows
	prun unloaddev SMD0:
	prun unloaddev SMD1:
	prun unloaddev SMD2:
	prun unloaddev SMD3:
	prun unloaddev SMD7:
	prun unloaddev SMD9:

unloaddev: ../build/unloaddev.exe
	pput -f ..\\build\\unloaddev.exe \\windows
	# stop on startrek
	prun unloaddev RDO1:
	# stop on cp220 
	prun unloaddev COM9:
	prun unloaddev COM2:


flushdev: ../build/flushdev.exe
	pput -f ..\\build\\flushdev.exe \\windows
	# stop on startrek
	prun flushdev RDO1:
	# stop on cp220 
	prun flushdev COM9:

tstarg: ../build/tstarg.exe
	pput -f ../build/tstarg.exe "%CSIDL_WINDOWS%"
	pmkdir "%CSIDL_PROGRAM_FILES%/tst arg"
	pput -f ../build/tstarg.exe "%CSIDL_PROGRAM_FILES%/tst arg"
	printf "#\"tstarg\"-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstarg_q_ns.lnk"
	printf "#\"tstarg\" -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstarg_q_s.lnk"
	printf "#tstarg-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstarg_nq_ns.lnk"
	printf "#tstarg -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstarg_nq_s.lnk"
	printf "#\"tstarg.exe\"-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstargx_q_ns.lnk"
	printf "#\"tstarg.exe\" -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstargx_q_s.lnk"
	printf "#tstarg.exe-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstargx_nq_ns.lnk"
	printf "#tstarg.exe -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/tstargx_nq_s.lnk"
	
	printf "#\"\\program files\\\tst arg\\\tstarg\"-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstarg_q_ns.lnk"
	printf "#\"\\program files\\\tst arg\\\tstarg\" -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstarg_q_s.lnk"
	printf "#\\program files\\\tst arg\\\tstarg-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstarg_nq_ns.lnk"
	printf "#\\program files\\\tst arg\\\tstarg -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstarg_nq_s.lnk"
	printf "#\"\\program files\\\tst arg\\\tstarg.exe\"-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstargx_q_ns.lnk"
	printf "#\"\\program files\\\tst arg\\\tstarg.exe\" -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstargx_q_s.lnk"
	printf "#\\program files\\\tst arg\\\tstarg.exe-1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstargx_nq_ns.lnk"
	printf "#\\program files\\\tst arg\\\tstarg.exe -1234 -5678" | pput -f -c "%CSIDL_PROGRAMS%/pftstargx_nq_s.lnk"

# wm65: .exe -> displays as 'exe icon',  otherwise displays as 'ms icon'
#       "pgmname"-firstarg  -> firstarg is not passed to proram

