;--------+---------+---------+---------+---------+---------+---------+---------+
;  RS485-Robot Version 1.0a Programmed by Futaba Corporation
;	Current Platform - windowsXP
;	Programmed in HSP ver3.0a  by onion software
;		& ExeWrightModW[ by v} (ExeWrightMod)
;		& ӂ邨ԂLite by eƂ (colorfulobject)
;		& header/macro and module Library  - rs485header, exobject, rs485comm
;--------+---------+---------+---------+---------+---------+---------+---------+
;/
;	2006/09/22 : 0.1a	@T	T[{ID1-20Œ
;	2006/09/25 : 0.2a	@U	T[{ID
;	2006/09/26 : 1.0a	@V	J
;		ʐM|[gݒiR{{bNXIjFCOM1`10
;		ʐMxݒiR{{bNXIjF9.6k-1.38M
;		ST[{ʒu0xi{^A[F1]L[j
;		ST[{gNOFFi{^A[F12]L[j
;		20T[{@\
;			T[{IDݒiĺAAbv/_E{^jF1`127
;			݃f[^\i`FbN{bNXj
;				݈ʒuF}999.9x
;				ݎԁF0.00`b
;				ݑxFϊ̂݁ip[^lj
;				ݕׁFdl(mA)
;				݉xFRS30xxx͉x()Ȃ̓p[^l
;			XCho[i蓮jF}150xA1x
;			E{^i蓮jF}150xA0.1x
;				wߒl\F}999.9x

#define	SoftName	"RS485-Robot"						;soft name
#define VerNum	 	"1.0a"								;version
#define	Copyright	"Copyright (C) 2006 Futaba Corporation"

#define ScrnX	870										;Screen Width
#define ScrnY	700 									;screen height

;/st@C쐬IvVw
; type=0(EXEt@C), orgpath=0(fBNgړ)
#packopt name "RS485-Robot"								;st@C
#packopt runtime "hsp3c.hrt"							;^C
#packopt hide 1											;EBhE\

;/ʂ̔\
;--------+---------+---------+---------+---------+---------+---------+---------+
; NɈu\̂𖳂B
; EXE쐬 uNCEBhE\vɂC[ExeWrightMod]
;--------+---------+---------+---------+---------+---------+---------+---------+
	gsel 0,-1											;ŏɉʔ\

#include "rs485header.as"								;RS485 header and module
#include "exobject.as"									;extension object macro
#include "rs485comm.as"									;RS485 communication module
#include "colorfulobject.as"							;Colorful object Module
#include "ExeWrightMod.hsp"								;Execution file Wright Module

;/[̏
;--------+---------+---------+---------+---------+---------+---------+---------+
; [̗̈ݒAp[^̃[h
;--------+---------+---------+---------+---------+---------+---------+---------+
;/ɏݖ߃W[̐ݒ:ExeWrightModW[ by v}
; INIt@C⃌WXgg킸Ag1KB̕ۑł܂B
;	f[^͐l^ϐp̔zƕ^ϐmoji̔z񂪒`ĂāA
;	킹1024bytẽgpłB
;		l^ϐp: p(0)->p(255)
;		^ϐmoji: moji(0)->moji(1023)
;--------+---------+---------+---------+---------+---------+---------+---------+
; p(100)̗̈gpAp(100)-(103)͉ʂ̂wxʒuEwxTCYɎgp
; p(104),p(105)͗\
#define pstart	100								;ŏ̔zԍ
#const	pScrnPosX			pstart				;ʂ̂wʒu
#const	pScrnPosY			pScrnPosX+1			;ʂ̂xʒu
#const	pScrnWidX			pScrnPosY+1			;ʂ̂wTCY
#const	pScrnWidY			pScrnWidX+1			;ʂ̂xTCY
#const	pRS485ComNum		pScrnWidY+3			;RS485|[gԍ
#const	pRS485BaudRate		pRS485ComNum+1		;RS485{[[g
#const	pManualNum			pRS485BaudRate+1	;蓮wߊpxID1-20
#const	pTorqueON			pManualNum+20		;gNID1-20
#const	pPresent			pTorqueON+20		;݃f[^ID1-20
#const	pServoID			pPresent+20			;T[{ID1-20

;/p[^̃[h
	onexit goto *exit_routine				;IĂяo
	DataLoad p,moji							;f[^zɃ[h
	; p[^̃N[ϐ
	dup ScrnPosX,p(pScrnPosX)
	dup ScrnPosY,p(pScrnPosY)
	dup ScrnWidX,p(pScrnWidX)
	dup ScrnWidY,p(pScrnWidY)
	dup RS485ComNum,p(pRS485ComNum)
	dup RS485BaudRate,p(pRS485BaudRate)
	dup ManualNum,p(pManualNum)
	dup TorqueON,p(pTorqueON)
	dup Present,p(pPresent)
	dup ServoID,p(pServoID)
	; eݒp[^̃ftHgl
	if ScrnWidX=0 { 						;1ԍŏ͉ʂ̂wTCY0Ȃ̂ŁB
		ScrnPosX=0
		ScrnPosY=0
		ScrnWidX=ScrnX
		ScrnWidY=ScrnY
		RS485ComNum=0
		RS485BaudRate=7
		ManualNum=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		TorqueON=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
		Present=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
		ServoID=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
	}

;/[̗̈ݒ
	dim FxGbxID,20 : dim SrvEdtID,20 : dim ServoUpdownID,20 : dim TorqueONChkID,20 : dim PresentChkID,20
	dim PresentPosionStcID,20 : dim PresentTimeStcID,20 : dim PresentSpeedStcID,20 : dim PresentLoadStcID,20
	dim PresentTempStcID,20 : dim ManualTrbID,20 : dim ManualStcID,20 : dim ManualUpdownID,20
	dim RefreshPresent,20 : dim Presentflg,20

;/ʂ̏
;--------+---------+---------+---------+---------+---------+---------+---------+
; ʃTCYA^CgAtHgAwiACAbZ[W
;--------+---------+---------+---------+---------+---------+---------+---------+
;/XN[̏
	screen 2,ScrnWidX,ScrnWidY,screen_hide|screen_fixedsize,ScrnPosX,ScrnPosY	;ʏ,\,TCYŒ
	title2 SoftName + "  Version " + VerNum				;^Cg\
	font msgothic,14 : objmode 2						;tHg"lr SVbN"

	syscolor COLOR_3DFACE								;{^\ʃJ[
	mref bmscr,67 : BackColor=bmscr(40)
	boxf 0,0,ScrnWidX,ScrnWidY							;wiF(D)

;/3DC̕`
#const	Frame_x1	4
#const	Frame_y1	4
#const	Erase_x1	520
#const	Erase_x2	Erase_x1+272
	frame3d Frame_x1,Frame_y1,ScrnWidX-6,ScrnWidY-12,Erase_x1,Erase_x2

;/bZ[W̕`
#const	POS_y1	Frame_y1+15
#const	POS_y2	POS_y1+35
#const	POS_y3	POS_y2+15

	color 0x7F,0x7F,0x7F								;ү(D)
	pos Erase_x1+8,ScrnWidY-18 : mes Copyright

;/JtIuWFNgW[̐ݒ:ӂ邨ԂLite by eƂ
;--------+---------+---------+---------+---------+---------+---------+---------+
; ̃EBhEŃIuWFNg̐F悤ɂB
;--------+---------+---------+---------+---------+---------+---------+---------+
	objcolorscreen

;/IuWFNg̔zu
;--------+---------+---------+---------+---------+---------+---------+---------+
; exobject.as ̃}NƃJtIuWFNgW[gp
;--------+---------+---------+---------+---------+---------+---------+---------+
; ʐM|[gX^eBbNRg[
	stcctl 20,POS_y1+3,70,14,"ʐM|[g",SS_RIGHT,ComNumStcID
	objcolor ComNumStcID,BackColor,RGB(0,0,0)
; ʐM|[gR{{bNX
	cmbobj 90,POS_y1-1,90,24,RS485ComNum,80,"     COM1\n     COM2\n     COM3\n     COM4\n     COM5\n     COM6\n     COM7\n     COM8\n     COM9\n    COM10",ComNumcmbID	;exobject.as ̃}N
	objcolor ComNumcmbID,RGB(255,255,191),RGB(255,0,0)
; ʐMxX^eBbNRg[
	stcctl 200,POS_y1+3,70,14,"ʐM[g",SS_RIGHT,BaudRateStcID
	objcolor BaudRateStcID,BackColor,RGB(0,0,0)
; ʐMxR{{bNX
	cmbobj 270,POS_y1-1,90,24,RS485BaudRate,80,"    9,600\n   14,400\n   19,200\n   28,800\n   38,400\n   57,600\n   76,800\n  115,200\n  153,600\n  230,400\n  460,800\n  691,200\n1,382,400",BaudRatecmbID
	objcolor BaudRatecmbID,RGB(255,255,191),RGB(255,0,0)

; ST[{ʒu0x{^
	btnobj 460,POS_y1,180,20,"ST[{ʒu0x [F1]",*btn_Pos0,Pos0BtnID
; ST[{gNOFF{^
	btnobj 660,POS_y1,180,20,"ST[{gNOFF [F12]",*btn_AllTorqueOFF,TorqueOFFBtnID

	SetWindowLong hwnd, GWL_STYLE, GetWindowLong (hwnd, GWL_STYLE) ^ $2000000

	repeat 20	;20T[{

; [Fx]O[v{bNX
		if (cnt\10)=0 {
			chkobj  20+(cnt/10)*420,POS_y2+(cnt\10)*80,410,620,"T[{ID ٸ - -ʒu-  --  -x-  --  -x-",x,FxGbxID(cnt)
			sendmsg objinfo (stat, 2), $F4, $7
			objcolor FxGbxID(cnt),BackColor,RGB(0,0,0)
		}

; T[{IDGfBbg{bNX
		edtctl 35+(cnt/10)*420,POS_y3+2+(cnt\10)*60,30,16,IDs,ES_RIGHT|ES_NUMBER,,SrvEdtID(cnt)
		settext SrvEdtID(cnt),str(ServoID(cnt))
		objcolor SrvEdtID(cnt),RGB(255,255,191),RGB(255,0,0)
; T[{IDAbv_ERg[
		updnctl 65+(cnt/10)*420,POS_y3+(cnt\10)*60,15,20,0x100,ServoUpdownID(cnt)
		updownrng ServoUpdownID(cnt),1,127
		updownpos ServoUpdownID(cnt),COMCTL_SET,ServoID(cnt)

; gNON/OFF`FbN{bNX
		chkobj 95+(cnt/10)*420,POS_y3+3+(cnt\10)*60,15,14,"",TorqueON(cnt),TorqueONChkID(cnt)
		objcolor TorqueONChkID(cnt),BackColor,RGB(0,0,0)
; \`FbN{bNX
		chkobj 120+(cnt/10)*420,POS_y3+3+(cnt\10)*60,15,14,"",Present(cnt),PresentChkID(cnt)
		objcolor PresentChkID(cnt),BackColor,RGB(0,0,0)

; ݈ʒu\X^eBbNRg[
		stcctl 145+(cnt/10)*420,POS_y3+2+(cnt\10)*60,50,16,"",SS_SUNKEN|SS_RIGHT,PresentPosionStcID(cnt)
		objcolor PresentPosionStcID(cnt),RGB(0,0,0),RGB(0,255,0)
; ݎԕ\X^eBbNRg[
		stcctl 200+(cnt/10)*420,POS_y3+2+(cnt\10)*60,50,16,"",SS_SUNKEN|SS_RIGHT,PresentTimeStcID(cnt)
		objcolor PresentTimeStcID(cnt),RGB(0,0,0),RGB(0,255,0)
; ݃Xs[h\X^eBbNRg[
		stcctl 255+(cnt/10)*420,POS_y3+2+(cnt\10)*60,50,16,"",SS_SUNKEN|SS_RIGHT,PresentSpeedStcID(cnt)
		objcolor PresentSpeedStcID(cnt),RGB(0,0,0),RGB(0,255,0)
; ݕו\X^eBbNRg[
		stcctl 310+(cnt/10)*420,POS_y3+2+(cnt\10)*60,50,16,"",SS_SUNKEN|SS_RIGHT,PresentLoadStcID(cnt)
		objcolor PresentLoadStcID(cnt),RGB(0,0,0),RGB(0,255,0)
; ݉x\X^eBbNRg[
		stcctl 365+(cnt/10)*420,POS_y3+2+(cnt\10)*60,50,16,"",SS_SUNKEN|SS_RIGHT,PresentTempStcID(cnt)
		objcolor PresentTempStcID(cnt),RGB(0,0,0),RGB(0,255,0)

; 蓮w߃gbNo[Rg[
		trbctl 30+(cnt/10)*420,POS_y3+22+(cnt\10)*60,327,32,TBS_TOP,ManualTrbID(cnt)
		objcolor ManualTrbID(cnt),BackColor,RGB(0,0,0)
		objcursor ManualTrbID(cnt),IDC_HAND
		trackrng ManualTrbID(cnt),-1500,1500
		reg=ManualTrbID(cnt) : repeat 149 : trackmrk reg,1,(cnt*20+20)-1500 : loop	;Trackbarڐ
		trackpos ManualTrbID(cnt),COMCTL_SET,ManualNum(cnt)
; 蓮w߃X^eBbNRg[
		stcctl 365+(cnt/10)*420,POS_y3+22+(cnt\10)*60,50,16,"",SS_SUNKEN|SS_RIGHT,ManualStcID(cnt)
		settext ManualStcID(cnt),strf("%0.1f",double(ManualNum(cnt))/10)
		objcolor ManualStcID(cnt),RGB(191,255,0),RGB(0,0,0)
; 蓮w߃Abv_ERg[
		updnctl 365+(cnt/10)*420,POS_y3+40+(cnt\10)*60,50,14,0x140, ManualUpdownID(cnt)
		updownrng ManualUpdownID(cnt),-1500,1500
		updownpos ManualUpdownID(cnt),COMCTL_SET,ManualNum(cnt)

	loop

;--------+---------+---------+---------+---------+---------+---------+---------+
;/VA|[g̐ݒ
;--------+---------+---------+---------+---------+---------+---------+---------+
;/RS485<->USBRo[^(BTE061),PCI<->RS485 CONTEC COM-2PD(PCI)H̃hCo[`FbN
; hCo[COM3-10COM1ɖ߂
	Directory=dir_cur						;ÑJgfBNg
	do
		if RS485ComNum<=1 : _break
		chdir dir_sys+"\\drivers"			;\system32\driversɈړ
		dirlist reg,"ftser2k.sys"			;ftser2k.sys̃`FbN
		if reg="ftser2k.sys\n" : _break
		dirlist reg,"ComDrv2k.sys"			;ComDrv2k.sys̃`FbN
		if reg="ComDrv2k.sys\n" : _break
		p(pRS485ComNum)=0 : RS485ComNum=p(pRS485ComNum) : objprm ComNumcmbID,RS485ComNum 
	until
	chdir Directory							;ÑJgfBNgɖ߂

;/VA|[g̃I[v
	rs485open RS485ComNum, RS485BaudRate, 20	;Timeout 20ms

;--------+---------+---------+---------+---------+---------+---------+---------+
;/ݏ̏ݒ
;--------+---------+---------+---------+---------+---------+---------+---------+
;/^C}[̊
#define WM_TIMER		0x113
#define ID_TIMER		1					;10ms timer ID
	oncmd  gosub *inttimer, WM_TIMER 
	SetTimer hwnd, ID_TIMER, 10, 0

;/IuWFNg̊
#define  WM_HSCROLL	0x114
#define  WM_VSCROLL	0x115
#define  WM_COMMAND	0x111
	oncmd gosub *hscroll,WM_HSCROLL
	oncmd gosub *vscroll,WM_VSCROLL
	oncmd gosub *command,WM_COMMAND

;/L[̊
	onkey gosub *intkey

;--------+---------+---------+---------+---------+---------+---------+---------+
;/C[`̏
;--------+---------+---------+---------+---------+---------+---------+---------+
	gsel 2,1								;CʑI\
	repeat 20
		reg=GetModelNumber(ServoID(cnt))	;ModelNumber擾
		objprm TorqueONChkID(cnt),GetTorqueEnable(ServoID(cnt));TorqueEnable擾
	loop

;/C[`
;--------+---------+---------+---------+---------+---------+---------+---------+
; C[`10msɃ[vA荞ݎ10mSƂɌ݃f[^荞ށB
;--------+---------+---------+---------+---------+---------+---------+---------+
	repeat -1
		await
		repeat 20
			if Presentflg(cnt) {
				GetReturnData ServoID(cnt),9
				if CheckSumFlg&Present(cnt) : RefreshPresent(cnt)=1
				Presentflg(cnt)=0
			}
		loop
	loop

;--------+---------+---------+---------+---------+---------+---------+---------+
; {^̏
;--------+---------+---------+---------+---------+---------+---------+---------+
;/{^"ST[{ʒu0x [F1]"
*btn_Pos0
	repeat 20
		TorqueON(cnt)=1 : objprm TorqueONChkID(cnt),TorqueON(cnt) : SetTorqueON ServoID(cnt)
		ManualNum(cnt)=0
		settext ManualStcID(cnt),strf("%0.1f",double(ManualNum(cnt))/10)
		trackpos ManualTrbID(cnt),COMCTL_SET,ManualNum(cnt)
		updownpos ManualUpdownID(cnt),COMCTL_SET,ManualNum(cnt)
		SetPositionTime ServoID(cnt),ManualNum(cnt),300
	loop
	return

;/{^"ST[{gNOFF [F12]"
*btn_AllTorqueOFF
	repeat 20 : TorqueON(cnt)=0 : objprm TorqueONChkID(cnt),TorqueON(cnt) : loop
	SetTorqueOFF 255 ;ST[{gNIt
	return

;--------+---------+---------+---------+---------+---------+---------+---------+
; L[荞݂̏
;--------+---------+---------+---------+---------+---------+---------+---------+
#define VK_F1	0x70
#define VK_F2	0x71
#define VK_F3	0x72
#define VK_F12	0x7B
*intkey
	switch wparam
	case VK_F1	;[F1]
		gosub *btn_Pos0
		swbreak
	case VK_F12	;[F12]
		gosub *btn_AllTorqueOFF
		swbreak
	swend
	return

;--------+---------+---------+---------+---------+---------+---------+---------+
; ^C}[荞݂̏
;--------+---------+---------+---------+---------+---------+---------+---------+
*inttimer
	IntTimerCnt++
	repeat 1,IntTimerCnt\20		;1̊荞݂1

		if Present(cnt) {
			Presentflg(cnt)=1
		} else {
			settext PresentPosionStcID(cnt),""
			settext PresentTimeStcID(cnt),""
			settext PresentSpeedStcID(cnt),""
			settext PresentLoadStcID(cnt),""
			settext PresentTempStcID(cnt),""
		}

		if RefreshPresent(cnt) {	;݃f[^\̏
			RefreshPresent(cnt)=0

			;/ ݈ʒu
			settext PresentPosionStcID(cnt),strf("%0.1f",double(GetBufPresentPosion(ServoID(cnt)))/10)
			switch abs(GetBufPresentPosion(ServoID(cnt))-ManualNum(cnt))
			case 0
			case 1
			case 2
			case 3
				objcolor PresentPosionStcID(cnt),RGB(0,0,0),RGB(0,255,0)	;<}0.3()
				swbreak
			case 4
			case 5
				objcolor PresentPosionStcID(cnt),RGB(0,0,0),RGB(255,255,0)	;}0.4-0.5()
				swbreak
			case 6
			case 7
			case 8
			case 9
				objcolor PresentPosionStcID(cnt),RGB(0,0,0),RGB(255,191,0)	;}0.6-0.9()
				swbreak
			default
				objcolor PresentPosionStcID(cnt),RGB(0,0,0),RGB(255,0,0)	;>}1.0()
				swbreak
			swend

			;/ ݎ
			settext PresentTimeStcID(cnt),strf("%0.2f",double(GetBufPresentTime(ServoID(cnt)))/100)

			;/ ݑx
			settext PresentSpeedStcID(cnt),str(GetBufPresentSpeed(ServoID(cnt)))

			;/ ݕ
			if (GetBufModelNumber(ServoID(cnt))&0xFF00)=0x3000 {
				settext PresentLoadStcID(cnt),strf("%0.0f",double(GetBufPresentLoad(ServoID(cnt))))
			} else {
				settext PresentLoadStcID(cnt),strf("%0.0f",double(GetBufPresentLoad(ServoID(cnt)))*6.6)
			}

			;/ ݉x
			settext PresentTempStcID(cnt),str(GetBufPresentTemp(ServoID(cnt)))
			if (GetBufModelNumber(ServoID(cnt))&0xFF00)=0x3000 {				;RS30xxx
				Tempreg=limit(GetBufPresentTemp(ServoID(cnt)),0,80)
				if Tempreg>50 {
					objcolor PresentTempStcID(cnt),RGB(0,0,0),RGB(255,255-(Tempreg-51)*8,0)	;()->()
				} else {
					if Tempreg>20 {
						objcolor PresentTempStcID(cnt),RGB(0,0,0),RGB((Tempreg-21)*8,255,0)	;()->()
					} else {
						objcolor PresentTempStcID(cnt),RGB(0,0,0),RGB(0,255,255-Tempreg*12)	;()->()
					}
				}
			} else {
				objcolor PresentTempStcID(cnt),RGB(0,0,0),RGB(0,255,0)	;()
			}
		}

	loop

	return

;--------+---------+---------+---------+---------+---------+---------+---------+
; Abv_ERg[ƃgbNo[̓eςƂ̏
;--------+---------+---------+---------+---------+---------+---------+---------+
#define	SB_LINELEFT			0	;1PʃXN[
#define	SB_LINERIGHT		1	;E1PʃXN[
#define	SB_PAGELEFT			2	;փEBhE̕XN[
#define	SB_PAGERIGHT		3	;EփEBhE̕XN[
#define	SB_THUMBPOSITION	4	;XN[{bNX𑀍삵
#define	SB_THUMTRACK		5	;XN[{bNX𑀍쒆
#define	SB_LEFT				6	;ɃXN[
#define	SB_RIGHT			7	;EɃXN[
#define	SB_ENDSCROLL		8	;XN[I

*hscroll
	switch wparam&0x0F
	case SB_PAGELEFT
	case SB_PAGERIGHT
	case SB_THUMTRACK
		repeat 20
		switch lparam
		case objinfo_hwnd(ManualTrbID(cnt))	;蓮w߃gbNo[Rg[
			trackpos ManualTrbID(cnt),COMCTL_GET,NULL : ManualNum(cnt)=stat
			updownpos ManualUpdownID(cnt),COMCTL_SET,ManualNum(cnt)
			settext ManualStcID(cnt),strf("%0.1f",double(ManualNum(cnt))/10)
			SetPositionTime ServoID(cnt),ManualNum(cnt),0
			swbreak
		swend
		loop
		swbreak
	case SB_THUMBPOSITION
		repeat 20
		switch lparam
		case objinfo_hwnd(ManualUpdownID(cnt))	;蓮w߃Abv_ERg[
			updownpos ManualUpdownID(cnt),COMCTL_GET,NULL : ManualNum(cnt)=stat
			trackpos ManualTrbID(cnt),COMCTL_SET,ManualNum(cnt)
			settext ManualStcID(cnt),strf("%0.1f",double(ManualNum(cnt))/10)
			SetPositionTime ServoID(cnt),ManualNum(cnt),0
			swbreak
		swend
		loop
		swbreak
	swend
	
	return

;--------+---------+---------+---------+---------+---------+---------+---------+
; Abv_ERg[̓eςƂ̏
;--------+---------+---------+---------+---------+---------+---------+---------+
#define	SB_LINEUP			0	;
#define	SB_LINEDOWN			1	;
#define	SB_PAGEUP			2	;y[WAbv
#define	SB_PAGEDOWN			3	;y[WAbv
;#define SB_THUMBPOSITION	4	;lParam̉ʃ[hɃT̈ʒu
;#define SB_THUMTRACK		5	;Tړ
#define	SB_TOP				6	;[HOME]L[ꂽ
#define	SB_BOTTMOM			7	;EɃXN[
;#define SB_ENDSCROLL		8	;[END]L[ꂽ

*vscroll
	switch wparam&0x0F
	case SB_TOP
	case SB_BOTTMOM
	case SB_THUMBPOSITION
	case SB_THUMTRACK
		repeat 20
			switch lparam
			case objinfo_hwnd(ServoUpdownID(cnt))		;T[{hcAbv_ERg[
				updownpos ServoUpdownID(cnt),COMCTL_GET,NULL : ServoID(cnt)=stat 
				settext SrvEdtID(cnt),str(ServoID(cnt))
				swbreak
			swend
		loop
		swbreak
	swend
	return

;--------+---------+---------+---------+---------+---------+---------+---------+
; GfBbg{bNX/R{{bNX/`FbN{bNX̓eςƂ̏
;--------+---------+---------+---------+---------+---------+---------+---------+
#define	EN_UPDATE		0x400	;eς
#define	CBN_SELCHANGE 	1		;IڂύXꂽƂ 
#define	BN_CLICKED		0		;{^(`FbN{bNXjNbNꂽƂ

*command
	switch wparam>>16&0xFFFF
	case CBN_SELCHANGE
		switch lparam
		case objinfo_hwnd(ComNumcmbID)		;ʐM|[gR{{bNX
		case objinfo_hwnd(BaudRatecmbID)	;ʐMxR{{bNX
			rs485close : rs485open RS485ComNum, RS485BaudRate, 20	;Timeout 20ms
			swbreak
		swend
		objsel StopBtnID
		swbreak
	case EN_UPDATE
		repeat 20
			switch lparam
			case objinfo_hwnd(SrvEdtID(cnt))		;T[{hcGfBbg{bNX
				gettext SrvEdtID(cnt),IDs,5 : ServoID(cnt)=limit(int(IDs),1,127)
				updownpos ServoUpdownID(cnt),COMCTL_SET,ServoID(cnt)
				if int(IDs)!ServoID(cnt) : settext SrvEdtID(cnt),str(ServoID(cnt))
				swbreak
			swend
		loop
		swbreak
	case BN_CLICKED
		repeat 20
			switch lparam
			case objinfo_hwnd(TorqueONChkID(cnt))		;gNON`FbN{bNX
				objprm TorqueONChkID(cnt),TorqueON(cnt)^1
				SetTorqueEnable ServoID(cnt),TorqueON(cnt)
				swbreak
			swend
		loop
		swbreak
	swend
	return

;--------+---------+---------+---------+---------+---------+---------+---------+
; Ȉ݂
;--------+---------+---------+---------+---------+---------+---------+---------+
*exit_routine
	gsel 2,-1						;ʔ\
	KillTimer hwnd, ID_TIMER		;^C}[
	rs485close						;RS232CN[Y
	noteunsel						;obt@w

;/ʂ̂wxʒuEwxTCỸp[^z100Ԃ
	ScrnPosX=ginfo_wx1
	ScrnPosY=ginfo_wy1
	ScrnWidX=ginfo_winx
	ScrnWidY=ginfo_winy

	DataSave p						;ɏݖ
	end

;eof "RS485-Robot.hsp"
