Subversion Repositories Kolibri OS

Rev

Rev 9771 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9108 Doczom 1
use32
2
  org    0
3
 
4
  db     'MENUET01'
5
  dd     1
6
  dd     START
7
  dd     I_END       ; а §¬Ґа Їа®Ја ¬¬л
8
  dd     MEM         ; Є®«ЁзҐбвў® Ї ¬пвЁ
9
  dd     STACKTOP
9771 Doczom 10
  dd     PATH
9108 Doczom 11
  dd     0
12
include '..\..\macros.inc'
13
include '..\..\KOSfuncs.inc'
9199 Doczom 14
 
9108 Doczom 15
START:
16
;;установка маска событий на получение переписовки и нажатия на кнопку
17
       mcall SF_SET_EVENTS_MASK,0x05
18
;load driver
19
       mcall SF_SYS_MISC, SSF_LOAD_DRIVER_PE, path_drv, 0
20
       mov dword[drv_struct.handl],eax
21
       test eax,eax ;проверка загрузки
9771 Doczom 22
       jz  error_drv
9760 Doczom 23
main:
24
       mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
9771 Doczom 25
       cmp   byte[PATH], 0
26
       jz    still
9760 Doczom 27
       call add_file
9108 Doczom 28
still:           ;void main()
29
       call draw
30
;;ожидание события в течении 2000мс
31
       mcall SF_WAIT_EVENT_TIMEOUT,200 ;2 second
32
       dec eax                   ; redraw request ?
33
       je   still
34
       cmp eax,2             ;button
35
       jz button
36
       jmp still
37
 
38
button:
39
       mcall SF_GET_BUTTON
40
 
41
       cmp eax,1
42
       jz still
43
       dec ah
44
       je exit
45
;; id button micro_info = 8
46
       cmp ah,7 ;// ah-1=7
47
       jnz still
48
       xor byte[flag_micro_info],1
49
       jmp still
9771 Doczom 50
 
51
align 4
9108 Doczom 52
draw:
53
       mcall SF_REDRAW, SSF_BEGIN_DRAW
9771 Doczom 54
       mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
9108 Doczom 55
 
56
       mov eax,SF_CREATE_WINDOW
57
       mov ebx,0x00ff013f
58
       mov ecx,0x001500cc
59
       mov edx,0x14000000
60
       add edx,[sc.work]
61
       mov edi,title
62
       mcall
63
 
64
       mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
65
 
9771 Doczom 66
       cmp       byte[PATH], 0
67
       jz        @f
9760 Doczom 68
       dec       dword[update_flag]
9771 Doczom 69
       jnz       @f
9760 Doczom 70
       call      add_new_item
71
       mov       dword[update_flag], 30
72
@@:
73
 
9108 Doczom 74
       cmp byte[flag_micro_info],1
75
       mov eax,SF_CHANGE_WINDOW
76
       mov ebx,-1
77
       mov ecx,ebx;-1
78
       jz draw.micro
79
 
80
       mov esi,0x000000cc
81
       mov edx,0x0000013f
82
       mcall
83
;;создание кнопки переключения режима
84
       mov eax,SF_DEFINE_BUTTON
85
       mov ebx,0x01250010
86
       mov ecx,0x001d0015
87
       mov edx,0x00000008
88
       mov esi,[sc.work_button]
89
       mcall
90
;;вывод знака на кнопку
91
;;так как функция writeText не должна изменять регистры
92
;;присвоения в регистры eax и ecx происходят только 1 раз
93
;; Далее, так как текст выводится почти всегда с одинаковым
94
;; смещением вниз(равным 15)  дынные(строки) имеют одинаковый
95
;; размер , то используется инструкция add
96
       mov eax,SF_DRAW_TEXT
97
       mov ebx,0x01290020
98
       mov ecx,0x81000000
99
       add ecx,[sc.work_text]
100
       mov edx,_up
101
       mcall
102
 
103
       ;вывод "Tctl:"
104
       mov ebx,0x000a0020
105
       mov ecx,0x90000000
106
       add ecx,[sc.work_text]
107
       mov edx,_Tctl
108
       mcall
109
 
110
       ;вывод "Tmax:"
111
       add ebx,0x15
112
       add edx,7
113
       mcall
114
 
115
       ;вывод "Tcrit:"
116
       add ebx,0x2a
117
       add edx,7
118
       mcall
119
 
120
       ;вывод "Tccd1:"
121
       add ebx,0x19
122
       add edx,7
123
       mcall
124
 
125
       ;вывод "Tccd2:"
126
       add ebx,0x15
127
       add edx,7
128
       mcall
129
 
130
       ;вывод "Tccd3:"
131
       add ebx,0x15
132
       add edx,7
133
       mcall
134
 
135
       ;вывод "Tccd4:"
136
       add ebx,0x15
137
       add edx,7
138
       mcall
139
 
140
       ;вывод "Tccd5:"
141
       mov ebx,0x00a50078
142
       add edx,7
143
       mcall
144
 
145
       ;вывод "Tccd6:"
146
       add ebx,0x15
147
       add edx,7
148
       mcall
149
 
150
       ;вывод "Tccd7:"
151
       add ebx,0x15
152
       add edx,7
153
       mcall
154
 
155
       ;вывод "Tccd8:"
156
       add ebx,0x15
157
       add edx,7
158
       mcall
159
 
160
       ;вывод "Tdie:"
161
       mov ebx,0x00a5005f
162
       add edx,7
163
       mcall
164
 
165
       ;вывод "Tcrit hyst:"
166
       mov ebx,0x000a004a
167
       add edx,7
168
       mcall
169
;;;;;;input data driver;;;;;;;;;
170
       mov eax,0x004a0020
9771 Doczom 171
       mov ebx, drv_data.Tctl  ;вывод данных от драйвера
9108 Doczom 172
       call write_data
173
 
174
       add eax,0x15
9858 Doczom 175
       mov byte[write_data.defaunt_color], 1
9771 Doczom 176
       mov ebx, drv_data.Tmax
9108 Doczom 177
       call write_data
178
 
179
       add eax,0x2a
9858 Doczom 180
       mov byte[write_data.defaunt_color], 1
9771 Doczom 181
       mov ebx, drv_data.Tcrit
9108 Doczom 182
       call write_data
183
 
184
       add eax,0x19
9771 Doczom 185
       mov ebx, drv_data.Tccd1
9108 Doczom 186
       call write_data
187
 
188
       add eax,0x15
189
       add ebx,4
190
       call write_data
191
 
192
       add eax,0x15
193
       add ebx,4
194
       call write_data
195
 
196
       add eax,0x15
197
       add ebx,4
198
       call write_data
199
 
200
       mov eax,0x00E50078
201
       add ebx,4
202
       call write_data
203
 
204
       add eax,0x15
205
       add ebx,4
206
       call write_data
207
 
208
       add eax,0x15
209
       add ebx,4
210
       call write_data
211
 
212
       add eax,0x15
213
       add ebx,4
214
       call write_data
215
 
216
       mov eax,0x00E5005f
9771 Doczom 217
       mov ebx, drv_data.Tdie
9858 Doczom 218
       mov byte[write_data.defaunt_color], 1
9108 Doczom 219
       call write_data
220
 
221
       mov eax,0x007a004a
9858 Doczom 222
       mov byte[write_data.defaunt_color], 1
9771 Doczom 223
       mov ebx, drv_data.Tcrit_hyst
9108 Doczom 224
       call write_data
225
       jmp @f
226
.micro:
227
       mov esi,0x00000035
228
       mov edx,0x000000c0
229
       mcall
230
 
231
       mov eax,SF_DEFINE_BUTTON
232
       mov ebx,0x00a70010
233
       mov ecx,0x001d0015
234
       mov edx,eax;0x00000008
235
       mov esi,[sc.work_button]
9120 Doczom 236
       mcall
9108 Doczom 237
 
238
       mov eax,SF_DRAW_TEXT;4
239
       mov ebx,0x000a0020
240
       mov ecx,0x90000000
241
       add ecx,[sc.work_text]
242
       mov edx,_Tctl
243
       mcall
244
 
245
       add ebx,0x00a00000
246
       mov ecx,0x81000000
247
       add ecx,[sc.work_text]
248
       mov edx,_down
249
       mcall
250
 
251
       mov eax,0x004a0020
9771 Doczom 252
       mov ebx, drv_data.Tctl
9108 Doczom 253
       call write_data
254
@@:
255
       mcall SF_REDRAW, SSF_END_DRAW
256
       ret
257
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
258
;; procedure write_data(eax, ebx);
259
;; eax=x*65536+y
9858 Doczom 260
;; ebx = pointer on value
261
;; edx = 1 - set color, 0 - set defaunt color
9108 Doczom 262
;; ecx register don`t save
263
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9771 Doczom 264
align 4
9108 Doczom 265
write_data:
266
       push eax
267
       push ebx
268
       ;mov edx,[ebx]  ;edx=value
269
       mov esi,ebx
270
       cmp dword[ebx],-1   ; flag ziro data
271
       mov ecx,0x90000000
272
       mov ebx,eax
273
       jnz @f
274
       ;write n/a
275
       add ecx,[sc.work_text]
276
       mov eax,SF_DRAW_TEXT
277
       mov edx,_NA
278
       mcall
279
       pop ebx
280
       pop eax
281
       ret
282
@@:
9858 Doczom 283
       ;set color
284
       push eax
285
       push edx
286
       push ecx
287
       cmp  byte[.defaunt_color], 1
288
       jnz  @f
289
       mov  dword[.color_text], 0x000000cf  ;blue
290
       jmp  .end_set_color
291
@@:
292
       xor  edx, edx
293
       mov  eax, [esi]
294
       imul eax, 10
295
       xor  edx, edx
296
       div  dword[drv_data.Tcrit]
297
       cmp  eax, 9
298
       jb  @f
299
       mov  dword[.color_text],0x00d50000 ; red
300
       jmp  .end_set_color
301
@@:
302
       cmp  eax, 7
303
       jb  @f
304
       mov  dword[.color_text],0x00f07000 ; orange
305
       jmp  .end_set_color
306
@@:
307
       mov  dword[.color_text],0x0000d000 ; green
308
.end_set_color:
309
       pop  ecx
310
       pop  edx
311
       pop  eax
9108 Doczom 312
       ;write_value
313
; value / 1000 =value_in_1
314
;input value_in_1,koord_start
315
; if value >=100 then dot_kord=4 ; =0x20
316
;   if value >10 then  dot_kord=3; =0x18
317
;     dot_kord=2
318
;input ".", koord_start+dot_koord*size_w(char)
319
;value-value_in_1 = value_in_2
320
;input value_in_2, koord_start+dot_kord+1*size_w(char=8)
321
       push eax
322
       mov eax,[esi]
323
       xor edx,edx
324
       mov ebx,1000
325
       div ebx
326
       cmp eax,100
327
       jae .dot_4
328
       cmp eax,10
329
       jae .dot_3       ; ----|
330
       mov edi,0x0c;0x10;     |
331
       jmp .write       ;     |
332
.dot_4:                 ;     |
333
       mov edi,0x1c;0x20;     |
334
       jmp .write       ;     |
335
.dot_3:                 ;   <-|
336
       mov edi,0x14;0x18
337
.write:
338
       mov ecx,edx
339
       pop edx
340
       push ecx
341
 
342
       mov ecx,eax
343
       mov ebx,0x80030000
344
       mov eax,SF_DRAW_NUMBER
345
       mov esi,0x10000000
9858 Doczom 346
       add esi,[.color_text]
9108 Doczom 347
       mcall
348
       shl edi,16
349
       mov eax,SF_DRAW_TEXT
350
       add edx,edi
351
       mov ebx,edx
352
 
353
       mov ecx,0x90000000
9858 Doczom 354
       add ecx,[.color_text]
9108 Doczom 355
       mov edx,_dot
356
       mcall
357
       mov eax,SF_DRAW_NUMBER
358
       mov edx,ebx
359
       mov esi,0x10000000
9858 Doczom 360
       add esi,[.color_text]
9108 Doczom 361
       mov ebx,0x00030000
362
 
363
       add edx,0x80000
364
       pop ecx
365
       mcall
366
       mov eax,SF_DRAW_TEXT
367
       mov ebx,edx
368
       mov ecx,0x80000000
9858 Doczom 369
       add ecx,[.color_text]
9108 Doczom 370
       add ebx,0x180000
371
       mov edx,_t
372
       mcall
373
 
374
       mov ecx,0x90000000
9858 Doczom 375
       add ecx,[.color_text]
9108 Doczom 376
       add ebx,0x60000
377
       mov edx,_C
378
       mcall
379
       pop ebx
380
       pop eax
9858 Doczom 381
       mov byte[.defaunt_color], 0
9108 Doczom 382
       ret
9858 Doczom 383
.color_text:    rd 1 ; color input temp
384
.defaunt_color: rb 1 ; flag set color
385
;; end proc
9108 Doczom 386
 
387
error_drv:
9199 Doczom 388
       mcall SF_FILE,run_notify
9108 Doczom 389
exit:
390
       mcall SF_TERMINATE_PROCESS
9760 Doczom 391
 
9771 Doczom 392
align 4
9760 Doczom 393
add_file:
394
        mcall SF_FILE, graph_temp
395
        mov     dword[graph_temp], 3
9771 Doczom 396
        mov     dword[graph_temp.size], 10
9760 Doczom 397
        mov     dword[graph_temp.str], graph_start.new_data
398
        mov     eax,[drv_data.Tmax]
399
        mov     dword[graph_temp.index], 9
400
        mov     ebx, graph_start.new_data
401
        call    int_to_str
402
        mcall SF_FILE, graph_temp
403
 
9771 Doczom 404
        mov     dword[graph_temp.index], 19
405
        mov     dword[graph_temp.size], 20
9760 Doczom 406
        ret
9771 Doczom 407
align 4
9760 Doczom 408
index_item:
409
        dd    1
410
add_new_item:
411
        mov     eax,[index_item]
412
        imul    eax,1000
413
        mov     ebx, graph_start.new_data
414
        call    int_to_str
9771 Doczom 415
        mcall SF_FILE, graph_koord_x2 ;save x2=index_item
9760 Doczom 416
        inc     dword[index_item]
9771 Doczom 417
 
9760 Doczom 418
        mov     eax,[drv_data.Tctl]
9771 Doczom 419
        mov     ebx, graph_start.new_data_2
9760 Doczom 420
        call    int_to_str
421
        mcall SF_FILE, graph_temp
9771 Doczom 422
        add     dword[graph_temp.index], 20
9760 Doczom 423
        ret
424
 
425
;eax = int   value / 1000
426
;ebx = *str
427
; из за конкретики данного прилажения(а именно измерение температуры проца), сомниваюсь
428
; что потребуется больше 3 цифр на значение(ххх.ххх) так что будет костыль
9771 Doczom 429
align 4
9760 Doczom 430
int_to_str:
431
        push    ecx edx esi
432
        mov     ecx, '0000'
433
        mov     [ebx], ecx
434
        mov     [ebx+5], ecx
435
 
436
        xor     edx, edx
437
        mov     esi, 1000
438
        div     esi
439
        push    edx
440
        mov     esi, 10
441
        push    ebx
442
        add     ebx, 3
9771 Doczom 443
        and     eax, 0x3ff ; 1023
9760 Doczom 444
.loop:
445
        test    eax, eax
446
        jz      @f
447
        xor     edx, edx
448
        div     esi
449
        add     edx, '0'
450
        mov     byte[ebx], dl
451
        dec     ebx
452
        jmp     .loop
453
@@:
454
        pop     ebx
455
        add     ebx, 8;4
456
        pop     edx
457
        test    edx, edx
458
        jz      @f
459
        mov     eax, edx
460
        imul    eax, 10
461
        xor     edx, edx
462
        push    edx
463
        push    ebx
464
        jmp     .loop
465
@@:
466
        pop     esi edx ecx
467
        ret
9108 Doczom 468
;Data_program;
9116 Doczom 469
title       db 'AMDtemp',0
9120 Doczom 470
path_drv    db '/kolibrios/drivers/sensors/k10temp.sys',0
9199 Doczom 471
Error_text  db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0
9108 Doczom 472
_NA         db 'N/A',0
473
_dot        db '.',0
474
_t          db 0x1d,0x00
475
_C          db 'C',0x00
476
_down       db 0x1f,0x00
477
_up         db 0x1e,0x00
478
 
479
 
480
_Tctl       db 'Tctl: ',0
481
_Tmax       db 'Tmax: ',0
482
_Tcrit      db 'Tcrit:',0
483
_Tccd1      db 'Tccd1:',0
484
_Tccd2      db 'Tccd2:',0
485
_Tccd3      db 'Tccd3:',0
486
_Tccd4      db 'Tccd4:',0
487
_Tccd5      db 'Tccd5:',0
488
_Tccd6      db 'Tccd6:',0
489
_Tccd7      db 'Tccd7:',0
490
_Tccd8      db 'Tccd8:',0
491
_Tdie       db 'Tdie: ',0
492
_Tcrit_hyst db 'Tcrit hyst:',0
493
 
494
;;flag mode input data
495
flag_micro_info db 1
496
drv_data:
497
.Tctl            dd -1
498
.Tdie            dd -1
499
.Tccd1           dd -1
500
.Tccd2           dd -1
501
.Tccd3           dd -1
502
.Tccd4           dd -1
503
.Tccd5           dd -1
504
.Tccd6           dd -1
505
.Tccd7           dd -1
506
.Tccd8           dd -1
507
 
508
.Tmax            dd -1
509
.Tcrit           dd -1
510
.Tcrit_hyst      dd -1
9120 Doczom 511
.sizeof = $ - drv_data ;
9108 Doczom 512
 
9771 Doczom 513
align 4
9108 Doczom 514
drv_struct:
9199 Doczom 515
.handl           dd 0
516
                 dd 0
517
                 dd 0
518
                 dd 0
519
                 dd drv_data
520
                 dd drv_data.sizeof;52 ; 13*4
9771 Doczom 521
align 4
9199 Doczom 522
run_notify:
523
                 dd 7
524
                 dd 0
525
                 dd Error_text
526
                 dd 0
527
                 dd 0
9760 Doczom 528
                 db '/sys/@notify',0 ,0,0,0 ;выравнивание
9199 Doczom 529
 
9771 Doczom 530
align 4
9760 Doczom 531
update_flag:    dd 30 ;1 minut
9771 Doczom 532
graph_start:    db '0 0000 0 '  ; 9 byte
533
.new_data:      db '0000.0000 ' ;  10-19 byte  10 byte
534
.new_data_2:    db '0000.0000 ' ;  20-29 byte  10 byte
535
 
536
align 4
9760 Doczom 537
graph_temp:
538
                dd 2
539
.index:         dd 0
540
                dd 0
9771 Doczom 541
.size:          dd 19 ;size 4 first value for Graph
9760 Doczom 542
.str:           dd graph_start ; заменить
9771 Doczom 543
                db 0
544
                dd PATH
545
align 4
546
graph_koord_x2:
547
                dd 3
548
                dd 2 ;index for rewrite 2 value
549
                dd 0
550
                dd 4
551
                dd graph_start.new_data ; заменить
552
                db 0
553
                dd PATH
554
align 4
555
PATH:
556
   rb 512 ; buffer for command line. string for save log.
9108 Doczom 557
sc      system_colors
558
I_END:
559
   rd 256
560
STACKTOP:
561
MEM: