1 #include "sysconfig.h"
2 #include "sysdeps.h"
3
4 #include "uae.h"
5 #include "gui.h"
6 #include "uae/fs.h"
7
8 amiga_led_function g_amiga_led_function = NULL;
9 struct _uae_led_data g_uae_led_data = {};
10
od_fs_update_leds(void)11 void od_fs_update_leds(void) {
12 for (int i = 0; i < 4; i++) {
13 int track = gui_data.drive_track[i];
14 int a = 0;
15 int b = 0;
16 if (!gui_data.drive_disabled[i]) {
17 a = track / 10;
18 b = track % 10;
19 if (a == 0) {
20 a = 10;
21 }
22 if (b == 0) {
23 b = 10;
24 }
25 }
26 g_uae_led_data.df_t1[i] = a;
27 g_uae_led_data.df_t0[i] = b;
28 }
29 uae_callback(uae_on_update_leds, &g_uae_led_data);
30 }
31
gui_flicker_led2(int led,int unitnum,int status)32 static void gui_flicker_led2 (int led, int unitnum, int status)
33 {
34 static int resetcounter[LED_MAX];
35 static uae_s8 gui_data_hd, gui_data_cd, gui_data_md;
36 uae_s8 old;
37 uae_s8 *p;
38
39 if (led == LED_HD)
40 p = &gui_data_hd;
41 else if (led == LED_CD)
42 p = &gui_data_cd;
43 else if (led == LED_MD)
44 p = &gui_data_md;
45 else
46 return;
47 old = *p;
48 if (status < 0) {
49 if (old < 0) {
50 *p = 0;
51 gui_led (led, 0, -1);
52 }
53 return;
54 }
55 if (status == 0 && old < 0) {
56 resetcounter[led] = 0;
57 return;
58 }
59 if (status == 0) {
60 resetcounter[led]--;
61 if (resetcounter[led] > 0)
62 return;
63 }
64 *p = status;
65 resetcounter[led] = 6;
66 if (old != *p)
67 gui_led (led, *p, -1);
68 }
69
gui_flicker_led(int led,int unitnum,int status)70 void gui_flicker_led (int led, int unitnum, int status) {
71 if (led < 0) {
72 gui_flicker_led2 (LED_HD, 0, 0);
73 gui_flicker_led2 (LED_CD, 0, 0);
74 gui_flicker_led2 (LED_MD, 0, 0);
75 }
76 else {
77 gui_flicker_led2 (led, unitnum, status);
78 }
79 }
80
gui_led(int led,int state,int brightness)81 void gui_led (int led, int state, int brightness)
82 {
83 //STUB("led %d state %d", led, state);
84 int out_led = -1;
85 int out_state = state;
86
87 if (led == LED_DF0) out_led = 0;
88 else if (led == LED_DF1) out_led = 1;
89 else if (led == LED_DF2) out_led = 2;
90 else if (led == LED_DF3) out_led = 3;
91 else if (led == LED_POWER) {
92 //printf("POWER %d b %d\n", state, gui_data.powerled_brightness);
93 out_led = 8;
94 }
95 else if (led == LED_HD) out_led = 9;
96 else if (led == LED_CD) {
97 out_led = 10;
98 if (state == 0) {
99 out_state = 0;
100 }
101 else if (state == 4) {
102 out_state = 2;
103 }
104 else {
105 out_state = 1;
106 }
107 }
108 else if (led == LED_MD) out_led = 11;
109
110 if (led >= LED_DF0 && led <= LED_DF3) {
111 if (gui_data.drive_writing[led - 1]) {
112 out_state = 2;
113 }
114 }
115
116 if (g_amiga_led_function && out_led > -1) {
117 g_amiga_led_function(out_led, out_state);
118 }
119 }
120
121 extern "C" {
122
amiga_on_update_leds(amiga_callback_function * function)123 void amiga_on_update_leds(amiga_callback_function *function) {
124 uae_on_update_leds = function;
125 }
126
amiga_set_led_function(amiga_led_function function)127 void amiga_set_led_function(amiga_led_function function) {
128 g_amiga_led_function = function;
129 }
130
131 } // extern "C"
132