source: svn/newcon3bcm2_21bu/nexus/app/led.c @ 76

Last change on this file since 76 was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 3.7 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-2008, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: $
11 * $brcm_Revision: $
12 * $brcm_Date: $
13 *
14 * Module Description:
15 *
16 * Revision History:
17 *
18 * $brcm_Log: $
19 *
20 *
21 ***************************************************************************/
22
23#include "led.h"
24
25#include "bapp_util.h"
26#include "bapp_task.h"
27#include "bstd.h"
28#include "bdbg.h"
29
30#define LED_ON(ms) (0x80000000 | (ms))
31#define LED_OFF(ms) (0x7FFFFFFF & (ms))
32#define IS_LED_ON(x) (0 != (0x80000000 & (x)))
33#define END_OF_SEQ 0xFFFFFFFF
34
35unsigned on_sequence[2] = {
36    LED_ON(0),
37    END_OF_SEQ
38};
39
40unsigned off_sequence[2] = {
41    LED_OFF(0),
42    END_OF_SEQ
43};
44
45unsigned hunt_sequence[3] = {
46    LED_ON(1000),
47    LED_OFF(1000),
48    END_OF_SEQ
49};
50
51unsigned pending_sequence[5] = {
52    LED_ON(250),
53    LED_OFF(300),
54    LED_ON(250),
55    LED_OFF(1200),
56    END_OF_SEQ
57};
58
59unsigned download_sequence[7] = {
60    LED_ON(200),
61    LED_OFF(300),
62    LED_ON(200),
63    LED_OFF(300),
64    LED_ON(200),
65    LED_OFF(1800),
66    END_OF_SEQ
67};
68
69unsigned trouble_sequence[3] = {
70    LED_ON(500),
71    LED_OFF(500),
72    END_OF_SEQ
73};
74
75unsigned authorization_sequence[11] = {
76    LED_ON(4280),
77    LED_OFF(80),
78    LED_ON(80),
79    LED_OFF(80),
80    LED_ON(80),
81    LED_OFF(80),
82    LED_ON(80),
83    LED_OFF(80),
84    LED_ON(80),
85    LED_OFF(80),
86    END_OF_SEQ
87};
88
89struct led_state_t {
90    enum led_mode_t mode;
91    unsigned * sequence;
92    unsigned seq_index;
93    unsigned time_remains;
94};
95
96static struct led_state_t led_state = {led_off_mode, off_sequence, 0,0};
97
98static void led_control(bool on);
99
100unsigned led_set_mode(enum led_mode_t mode)
101{
102    led_state.mode = mode;
103    led_state.seq_index = 0;
104    switch(led_state.mode){
105    case led_off_mode:
106        led_state.sequence = off_sequence;
107        break;
108    case led_hunt_mode:
109        led_state.sequence = hunt_sequence;
110        break;
111    case led_pending_init_mode:
112        led_state.sequence = pending_sequence;
113        break;
114    case led_download_mode:
115        led_state.sequence = download_sequence;
116        break;
117    case led_trouble_mode:
118        led_state.sequence = trouble_sequence;
119        break;
120    case led_on_mode:
121        led_state.sequence = on_sequence;
122        break;
123    case led_authorization_mode:
124        led_state.sequence = authorization_sequence;
125        break;
126    default:
127        BDBG_ASSERT(0);
128        break;
129    }
130    led_state.time_remains = LED_OFF(led_state.sequence[led_state.seq_index]);
131    led_control(IS_LED_ON(led_state.sequence[led_state.seq_index]));
132    return led_state.time_remains;
133}
134
135unsigned led_update(unsigned elapsed_time)
136{
137    if(elapsed_time > led_state.time_remains){
138        led_state.time_remains = 0;
139    }else{
140        led_state.time_remains -= elapsed_time;
141    }
142   
143    if(0 == led_state.time_remains){
144        ++led_state.seq_index;
145        if(END_OF_SEQ == led_state.sequence[led_state.seq_index]){
146            led_state.seq_index = 0; /* restart seq */
147        }
148        led_state.time_remains = LED_OFF(led_state.sequence[led_state.seq_index]);
149        led_control(IS_LED_ON(led_state.sequence[led_state.seq_index]));
150    }
151    return led_state.time_remains;
152}
153
154void led_control(bool on)
155{
156#if 0
157    unsigned value;
158    value = ReadReg32(LED_DATA_REG);
159    if(true == on){
160        value |= LED_GREEN_MASK;
161    }else{
162        value &= ~LED_GREEN_MASK;
163    }
164    WriteReg32(LED_DATA_REG, value);
165#endif
166}
Note: See TracBrowser for help on using the repository browser.