Subversion Repositories Kolibri OS

Rev

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

  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
  10.   dd     PATH
  11.   dd     0
  12. include '..\..\macros.inc'
  13. include '..\..\KOSfuncs.inc'
  14.  
  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 ;ïðîâåðêà çàãðóçêè
  22.        jz  error_drv
  23. main:
  24.        mcall SF_SYS_MISC, SSF_CONTROL_DRIVER, drv_struct
  25.        cmp   byte[PATH], 0
  26.        jz    still
  27.        call add_file
  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
  50.  
  51. align 4
  52. draw:
  53.        mcall SF_REDRAW, SSF_BEGIN_DRAW
  54.        mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  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.  
  66.        cmp       byte[PATH], 0
  67.        jz        @f
  68.        dec       dword[update_flag]
  69.        jnz       @f
  70.        call      add_new_item
  71.        mov       dword[update_flag], 30
  72. @@:
  73.  
  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
  171.        mov ebx, drv_data.Tctl  ;âûâîä äàííûõ îò äðàéâåðà
  172.        call write_data
  173.  
  174.        add eax,0x15
  175.        mov byte[write_data.defaunt_color], 1
  176.        mov ebx, drv_data.Tmax
  177.        call write_data
  178.  
  179.        add eax,0x2a
  180.        mov byte[write_data.defaunt_color], 1
  181.        mov ebx, drv_data.Tcrit
  182.        call write_data
  183.  
  184.        add eax,0x19
  185.        mov ebx, drv_data.Tccd1
  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
  217.        mov ebx, drv_data.Tdie
  218.        mov byte[write_data.defaunt_color], 1
  219.        call write_data
  220.  
  221.        mov eax,0x007a004a
  222.        mov byte[write_data.defaunt_color], 1
  223.        mov ebx, drv_data.Tcrit_hyst
  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]
  236.        mcall
  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
  252.        mov ebx, drv_data.Tctl
  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
  260. ;; ebx = pointer on value
  261. ;; edx = 1 - set color, 0 - set defaunt color
  262. ;; ecx register don`t save
  263. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  264. align 4
  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. @@:
  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
  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
  346.        add esi,[.color_text]
  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
  354.        add ecx,[.color_text]
  355.        mov edx,_dot
  356.        mcall
  357.        mov eax,SF_DRAW_NUMBER
  358.        mov edx,ebx
  359.        mov esi,0x10000000
  360.        add esi,[.color_text]
  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
  369.        add ecx,[.color_text]
  370.        add ebx,0x180000
  371.        mov edx,_t
  372.        mcall
  373.  
  374.        mov ecx,0x90000000
  375.        add ecx,[.color_text]
  376.        add ebx,0x60000
  377.        mov edx,_C
  378.        mcall
  379.        pop ebx
  380.        pop eax
  381.        mov byte[.defaunt_color], 0
  382.        ret
  383. .color_text:    rd 1 ; color input temp
  384. .defaunt_color: rb 1 ; flag set color
  385. ;; end proc
  386.  
  387. error_drv:
  388.        mcall SF_FILE,run_notify
  389. exit:
  390.        mcall SF_TERMINATE_PROCESS
  391.  
  392. align 4
  393. add_file:
  394.         mcall SF_FILE, graph_temp
  395.         mov     dword[graph_temp], 3
  396.         mov     dword[graph_temp.size], 10
  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.  
  404.         mov     dword[graph_temp.index], 19
  405.         mov     dword[graph_temp.size], 20
  406.         ret
  407. align 4
  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
  415.         mcall SF_FILE, graph_koord_x2 ;save x2=index_item
  416.         inc     dword[index_item]
  417.  
  418.         mov     eax,[drv_data.Tctl]
  419.         mov     ebx, graph_start.new_data_2
  420.         call    int_to_str
  421.         mcall SF_FILE, graph_temp
  422.         add     dword[graph_temp.index], 20
  423.         ret
  424.  
  425. ;eax = int   value / 1000
  426. ;ebx = *str
  427. ; èç çà êîíêðåòèêè äàííîãî ïðèëàæåíèÿ(à èìåííî èçìåðåíèå òåìïåðàòóðû ïðîöà), ñîìíèâàþñü
  428. ; ÷òî ïîòðåáóåòñÿ áîëüøå 3 öèôð íà çíà÷åíèå(õõõ.õõõ) òàê ÷òî áóäåò êîñòûëü
  429. align 4
  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
  443.         and     eax, 0x3ff ; 1023
  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
  468. ;Data_program;
  469. title       db 'AMDtemp',0
  470. path_drv    db '/kolibrios/drivers/sensors/k10temp.sys',0
  471. Error_text  db '"Error load driver\nk10temp.sys was not found or is faulty " -tdE ',0
  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
  511. .sizeof = $ - drv_data ;
  512.  
  513. align 4
  514. drv_struct:
  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
  521. align 4
  522. run_notify:
  523.                  dd 7
  524.                  dd 0
  525.                  dd Error_text
  526.                  dd 0
  527.                  dd 0
  528.                  db '/sys/@notify',0 ,0,0,0 ;âûðàâíèâàíèå
  529.  
  530. align 4
  531. update_flag:    dd 30 ;1 minut
  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
  537. graph_temp:
  538.                 dd 2
  539. .index:         dd 0
  540.                 dd 0
  541. .size:          dd 19 ;size 4 first value for Graph
  542. .str:           dd graph_start ; çàìåíèòü
  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.
  557. sc      system_colors
  558. I_END:
  559.    rd 256
  560. STACKTOP:
  561. MEM: