summaryrefslogtreecommitdiff
path: root/luci2/htdocs/luci2/view/system.leds.js
blob: ed4602673c029a0b4327658b6b8ab76008c326dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
L.ui.view.extend({
	listLEDs: L.rpc.declare({
		object: 'luci2.system',
		method: 'led_list',
		expect: { leds: [ ] }
	}),

	listUSBDevices: L.rpc.declare({
		object: 'luci2.system',
		method: 'usb_list',
		expect: { devices: [ ] }
	}),

	execute: function() {
		var self = this;
		var m = new L.cbi.Map('system', {
			caption:     L.tr('LED Configuration'),
			description: L.tr('Customizes the behaviour of the device LEDs if possible.'),
			prepare: function() {
				delete m.sections[0].fields._net_dev.choices;

				var devs = L.network.getDevices().sort(function(a, b) {
					if (a.name() < b.name())
						return -1;
					else if (a.name() > b.name())
						return 1;
					else
						return 0;
				});

				for (var i = 0; i < devs.length; i++)
					if (!devs[i].isAlias())
						m.sections[0].fields._net_dev.value(devs[i].name());

				return $.when(
					self.listLEDs().then(function(leds) {
						delete m.sections[0].fields.sysfs.choices;
						delete m.sections[0].fields.trigger.choices;

						for (var i = 0; i < leds.length; i++)
							m.sections[0].fields.sysfs.value(leds[i].name);

						for (var i = 0; i < leds[0].triggers.length; i++)
							m.sections[0].fields.trigger.value(leds[0].triggers[i]);
					}),
					self.listUSBDevices().then(function(devs) {
						delete m.sections[0].fields._usb_dev.choices;

						for (var i = 0; i < devs.length; i++)
							m.sections[0].fields._usb_dev.value(devs[i].name,
																'%04x:%04x (%s - %s)'.format(devs[i].vendor_id, devs[i].product_id,
																							 devs[i].vendor_name || '?', devs[i].product_name || '?'));
					})
				);
			}
		});

		var s = m.section(L.cbi.TypedSection, 'led', {
			caption:     L.tr('LED Definitions'),
			teasers:     [ 'name', 'sysfs', 'default', 'trigger', '_net_dev', 'mode', '_usb_dev', 'delayon', 'delayoff' ],
			collabsible: true,
			addremove:   true,
			add_caption: L.tr('Add new LED defintion'),
			remove_caption: L.tr('Remove LED definition'),
			readonly:    !this.options.acls.leds
		});

		s.option(L.cbi.InputValue, 'name', {
			caption:     L.tr('Name')
		});

		s.option(L.cbi.ListValue, 'sysfs', {
			caption:     L.tr('LED Name')
		});

		s.option(L.cbi.ListValue, 'default', {
			caption:     L.tr('Default state'),
			initial:     '0'
		}).value('0', L.trc('LED state', 'off')).value('1', L.trc('LED state', 'on'));

		s.option(L.cbi.ListValue, 'trigger', {
			caption:     L.tr('Trigger')
		});


		s.option(L.cbi.InputValue, 'delayon', {
			caption:     L.trc('LED timer trigger', 'On-State Delay'),
			description: L.trc('LED timer trigger', 'Time in milliseconds the LED stays on'),
			datatype:    'uinteger'
		}).depends('trigger', 'timer');

		s.option(L.cbi.InputValue, 'delayoff', {
			caption:     L.trc('LED timer trigger', 'Off-State Delay'),
			description: L.trc('LED timer trigger', 'Time in milliseconds the LED stays off'),
			datatype:    'uinteger'
		}).depends('trigger', 'timer');


		s.option(L.cbi.ListValue, '_net_dev', {
			caption:     L.trc('LED netdev trigger', 'Device'),
			uci_option:  'dev',
			optional:    true
		}).depends('trigger', 'netdev');

		s.option(L.cbi.MultiValue, 'mode', {
			caption:     L.trc('LED netdev trigger', 'Trigger Mode')
		}).depends('trigger', 'netdev')
			.value('link', L.trc('LED netdev trigger mode', 'Link On'))
			.value('tx',   L.trc('LED netdev trigger mode', 'Transmit'))
			.value('rx',   L.trc('LED netdev trigger mode', 'Receive'));


		s.option(L.cbi.ListValue, '_usb_dev', {
			caption:     L.trc('LED usbdev trigger', 'Device'),
			uci_option:  'dev',
			optional:    true
		}).depends('trigger', 'usbdev');

		return m.insertInto('#map');
	}
});