Subversion Repositories Kolibri OS

Rev

Rev 5034 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5034 Rev 5041
Line 41... Line 41...
41
ends
41
ends
Line 42... Line 42...
42
 
42
 
43
BUTTONXSIZE = 60
43
BUTTONXSIZE = 60
44
BUTTONYSIZE = 60
44
BUTTONYSIZE = 60
45
BUTTONXSTART= 20
45
BUTTONXSTART= 20
46
BUTTONYSTART= 50
46
BUTTONYSTART= 55
47
BUTTONXSPACE= 10
47
BUTTONXSPACE= 10
48
BUTTONCOUNT = 8
48
BUTTONCOUNT = 8
49
ONCOLOR     = 0x0018c015
49
ONCOLOR     = 0x0018c015
Line -... Line 50...
-
 
50
OFFCOLOR    = 0x00db2521
-
 
51
 
-
 
52
;Flags
50
OFFCOLOR    = 0x00db2521
53
PIN_CONF_FLAG = 0
51
 
54
 
52
INIT:
55
INIT:
Line 53... Line 56...
53
	mov	    [btn_state], 0xFF
56
	mov	    [btn_state], 0xFF
Line 69... Line 72...
69
    mov 	[IOCTLs+IOCTL.output], eax
72
    mov 	[IOCTLs+IOCTL.output], eax
70
    mov 	eax, in_buf
73
    mov 	eax, in_buf
71
    mov 	[IOCTLs+IOCTL.input], eax
74
    mov 	[IOCTLs+IOCTL.input], eax
Line 72... Line 75...
72
 
75
 
-
 
76
    call    drivercomm.getlist
-
 
77
    test    eax, eax
-
 
78
    jnz     @f
-
 
79
    mcall   4, 5 shl 16 + 25, 1 shl 31 + 0xFF shl 16, noftdi_msg
73
    call    drivercomm.getlist
80
  @@:
-
 
81
    call    drivercomm.getlock
-
 
82
    mov     eax, [pid]
-
 
83
    cmp     eax, [out_buf]
-
 
84
    jz	    @f
-
 
85
    mcall   4, 5 shl 16 + 25, 1 shl 31 + 0xFF shl 16, devlkd_msg
-
 
86
    jmp     event_wait
-
 
87
  @@:
-
 
88
    mcall   4, 5 shl 16 + 25, 1 shl 31, welcio_msg
74
    call    drivercomm.getlock
89
    mov     [flags], 1 shl PIN_CONF_FLAG
-
 
90
    call    draw_window.no_redraw
-
 
91
    jmp     event_wait
75
    call    drivercomm.bitmode
92
  .init_cont:
-
 
93
    call    draw_window
Line 76... Line 94...
76
    call    drivercomm.baud
94
    mcall   4, 5 shl 16 + 25, 1 shl 31 + ONCOLOR, devrdy_msg
77
 
95
 
78
event_wait:
96
event_wait:
Line 106... Line 124...
106
button:
124
button:
107
	mov	    eax,17
125
	mov	    eax,17
108
	mcall
126
	mcall
Line 109... Line 127...
109
 
127
 
110
	cmp	    ah, 1
128
	cmp	    ah, 1
111
	jle	    .noclose
129
	jg	    .noclose
112
    call    drivercomm.unlock
130
    call    drivercomm.unlock
113
	mov	    eax, -1
131
	mov	    eax, -1
Line 114... Line 132...
114
	mcall
132
	mcall
115
 
133
 
116
 .noclose:
134
 .noclose:
-
 
135
	cmp	    ah, 10
-
 
136
	jge	    .toggleb
-
 
137
	mov	    ebx, [flags]
117
	cmp	    ah, 10
138
	and 	ebx, 1 shl PIN_CONF_FLAG
118
	jge	    .toggleb
139
	jnz	    event_wait
119
	movzx	edx, ah
140
	movzx	edx, ah
120
	dec	    ah
141
	dec	    ah
121
	dec	    ah
142
	dec	    ah
122
	mov	    cl, ah
143
	mov	    cl, ah
-
 
144
	mov	    ah ,1
-
 
145
	shl	    ah, cl
-
 
146
	mov	    al, [btn_io]
123
	mov	    ah ,1
147
	and	    al, ah
124
	shl	    ah, cl
148
	jz	    .input
-
 
149
	xor	    byte[btn_state], ah
125
	xor	    byte[btn_state], ah
150
  .input:
126
    push    edx
151
    call    draw_window.oloop_entry
127
    call    drivercomm.write
-
 
128
    call    drivercomm.read
152
    call    drivercomm.write
129
    pop     edx
153
    call    drivercomm.read
Line 130... Line 154...
130
	call	redraw_obutton
154
    ;call    drivercomm.pins
131
	jmp	    event_wait
155
	jmp	    event_wait
132
 
156
 
133
  .toggleb:
157
  .toggleb:
134
    cmp     ah, 18
158
    cmp     ah, 19
135
    jg	    event_wait
159
    jg	    .pinconf
136
    movzx	edx, ah
160
    movzx	edx, ah
137
	mov	    cl, ah
161
	mov	    cl, ah
138
	sub	    cl, 10
162
	sub	    cl, 10
139
	mov	    ah, 1
163
	mov	    ah, 1
140
	shl	    ah, cl
164
	shl	    ah, cl
Line -... Line 165...
-
 
165
	xor	    byte[btn_io], ah
-
 
166
	call	draw_tbutton
-
 
167
	jmp	    event_wait
-
 
168
 
-
 
169
  .pinconf:
-
 
170
    cmp     ah, 20
-
 
171
    mov     eax, [flags]
-
 
172
    and     eax, 1 shl PIN_CONF_FLAG
-
 
173
    jz	    .no_conf
-
 
174
    call    drivercomm.bitmode
-
 
175
    call    drivercomm.baud
141
	xor	    byte[btn_io], ah
176
  .no_conf:
142
	call	draw_tbutton
177
    xor     [flags], 1 shl PIN_CONF_FLAG
143
	jmp	    event_wait
178
    jmp     INIT.init_cont
144
 
179
 
145
drivercomm:				;Driver communication procs
180
drivercomm:				;Driver communication procs
Line 161... Line 196...
161
    mov     [edi], eax
196
    mov     [edi], eax
162
    mov     eax, [dev]
197
    mov     eax, [dev]
163
    mov     [edi+4], eax
198
    mov     [edi+4], eax
164
    mov     [edi+8], dword 1
199
    mov     [edi+8], dword 1
165
    mov     al, [btn_state]
200
    mov     al, [btn_state]
166
    mov     byte[edi+12], al
201
    mov     ecx, 4
-
 
202
    add     edi, 12
-
 
203
    rep     stosb
167
    mcall   68, 17, IOCTLs
204
    mcall   68, 17, IOCTLs
168
    ret
205
    ret
Line 169... Line 206...
169
 
206
 
170
  .read:
207
  .read:
171
    mov     [IOCTLs+IOCTL.io_code], 9
208
    mov     [IOCTLs+IOCTL.io_code], 9
172
    mov     edi, in_buf
209
    mov     edi, in_buf
173
    mov     eax, [pid]
210
    mov     eax, [pid]
174
    mov     [edi], eax
211
    mov     [edi], eax
175
    mov     eax, [dev]
212
    mov     eax, [dev]
176
    mov     [edi+4], eax
213
    mov     [edi+4], eax
177
    mov     [edi+8], dword 1
214
    mov     [edi+8], dword 3
178
    mcall   68, 17, IOCTLs
215
    mcall   68, 17, IOCTLs
179
    mov     al, byte[out_buf]
216
    test    eax, eax
-
 
217
    jz	    .read_ok
180
    mov     [btn_state], al
218
    debug_print 'Error'
-
 
219
    newline
-
 
220
 .read_ok:
-
 
221
    mov     al, byte[out_buf+2]
181
    newline
222
    mov     [btn_state], al
Line 182... Line 223...
182
    ret
223
    ret
183
 
224
 
184
  .getlock:
225
  .getlock:
Line 201... Line 242...
201
    mov     [IOCTLs+IOCTL.io_code], eax
242
    mov     [IOCTLs+IOCTL.io_code], eax
202
    mcall   68, 17, IOCTLs
243
    mcall   68, 17, IOCTLs
203
    mov     edi, out_buf
244
    mov     edi, out_buf
204
    mov     eax, [edi+12]
245
    mov     eax, [edi+12]
205
    mov     [dev], eax
246
    mov     [dev], eax
-
 
247
    mov     eax, [edi]
206
    ret
248
    ret
Line 207... Line 249...
207
 
249
 
208
  .bitmode:
250
  .bitmode:
209
	mov		[IOCTLs+IOCTL.io_code], 11
251
	mov		[IOCTLs+IOCTL.io_code], 11
210
    mov     edi, in_buf
252
    mov     edi, in_buf
211
	mov	    eax, [pid]
253
	mov	    eax, [pid]
212
	mov	    [edi], eax
254
	mov	    [edi], eax
213
	mov	    eax, [dev]
255
	mov	    eax, [dev]
214
	mov	    [edi+4], eax
256
	mov	    [edi+4], eax
215
	xor	    eax, eax
257
	xor	    eax, eax
216
	mov	    al, [btn_io]
258
	mov	    ah, [btn_io]
217
	mov	    ah, 0x04
259
	mov	    al, 0x01
218
	mov	    [edi+8], eax
260
	mov	    [edi+8], eax
219
    mcall   68, 17, IOCTLs
261
    mcall   68, 17, IOCTLs
Line -... Line 262...
-
 
262
    ret
-
 
263
 
-
 
264
  .pins:
-
 
265
    mov [IOCTLs+IOCTL.io_code], 22
-
 
266
    mov edi, in_buf
-
 
267
    mov eax, [pid]
-
 
268
    mov [edi], eax
-
 
269
    mov eax, [dev]
-
 
270
    mov [edi+4], eax
-
 
271
    mcall 68, 17, IOCTLs
-
 
272
    mov al, byte[out_buf]
-
 
273
    mov [btn_state], al
220
    ret
274
    ret
221
 
275
 
222
  .unlock:
276
  .unlock:
223
    mov     eax, [pid]
277
    mov     eax, [pid]
224
    mov     edi, in_buf
278
    mov     edi, in_buf
Line 247... Line 301...
247
	mov	    edx, 0x14E1E1E1
301
	mov	    edx, 0x14E1E1E1
248
	mov	    esi, 0x808899ff
302
	mov	    esi, 0x808899ff
249
	mov	    edi, title
303
	mov	    edi, title
250
	mcall
304
	mcall
Line 251... Line -...
251
 
-
 
252
	mov	edx, BUTTONCOUNT+1
305
 
-
 
306
  .no_redraw:
253
  .oloop:
307
	mcall	    8, ((BUTTONXSIZE+BUTTONXSPACE)*BUTTONCOUNT-30) shl 16 + 60, 25 shl 16 + 12, 20, 0x00E1E1E1
254
    push    edx
308
	mov	    eax, [flags]
255
    call    draw_obutton
309
	and	    eax, 1 shl PIN_CONF_FLAG
256
    pop     edx
-
 
257
    dec     edx
310
	jz	    .no_toggles
258
    cmp     edx, 1
-
 
259
    jnz     .oloop
-
 
260
 
311
	mcall	    4, ((BUTTONXSIZE+BUTTONXSPACE)*BUTTONCOUNT-27) shl 16 + 28, 1 shl 31, fnsh_btn
261
	mov	edx, BUTTONCOUNT+9
312
	mov	    edx, BUTTONCOUNT+9
262
  .tloop:
313
  .tloop:
263
    push    edx
314
    push    edx
264
    call    draw_tbutton
315
    call    draw_tbutton
265
    pop     edx
316
    pop     edx
266
    dec     edx
317
    dec     edx
267
    cmp     edx, 9
318
    cmp     edx, 9
-
 
319
    jnz     .tloop
-
 
320
    jmp     @f
-
 
321
  .no_toggles:
-
 
322
	mcall 4, ((BUTTONXSIZE+BUTTONXSPACE)*BUTTONCOUNT-27) shl 16 + 28, 1 shl 31, conf_btn
-
 
323
  @@:
-
 
324
  .oloop_entry:
-
 
325
	mov	edx, BUTTONCOUNT+1
-
 
326
  .oloop:
-
 
327
    push    edx
-
 
328
    call    draw_obutton
-
 
329
    pop     edx
-
 
330
    dec     edx
-
 
331
    cmp     edx, 1
Line 268... Line 332...
268
    jnz     .tloop
332
    jnz     .oloop
269
 
333
 
270
	mov	    eax, 12
334
	mov	    eax, 12
271
	mov	    ebx, 2
335
	mov	    ebx, 2
Line 369... Line 433...
369
 
433
 
370
btn_state   db ?
434
btn_state   db ?
371
btn_io	    db ?
435
btn_io	    db ?
372
dev		    dd ?
436
dev		dd ?
373
pid			dd ?
437
pid		dd ?
374
counter     dd ?
438
flags	    dd ?
-
 
439
drv_name    db 'usbother', 0
-
 
440
noftdi_msg  db 'No FTDI connected', 0
-
 
441
devrdy_msg  db 'First FTDI is ready', 0
-
 
442
devlkd_msg  db 'First FTDI is locked', 0
-
 
443
welcio_msg  db 'Please, choose pin state', 0
-
 
444
conf_btn    db 'Configure', 0
375
drv_name    db 'usbother', 0
445
fnsh_btn    db 'Finish', 0
376
off_text    db 'OFF', 0
446
off_text    db 'OFF', 0
377
on_text     db 'ON', 0
447
on_text     db 'ON', 0
378
i_text	    db 'I', 0
448
i_text	    db 'I', 0
379
o_text	    db 'O', 0
449
o_text	    db 'O', 0