source: svn/trunk/newcon3bcm2_21bu/dta/src/app/led.c @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 4.4 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 "bos.h"
27#include "bstd.h"
28#include "bdbg.h"
29
30#include "gist.h"
31#include "bchp_sun_top_ctrl.h"
32
33#define LED_ON(ms) (0x80000000 | (ms))
34#define LED_OFF(ms) (0x7FFFFFFF & (ms))
35#define IS_LED_ON(x) (0 != (0x80000000 & (x)))
36#define END_OF_SEQ 0xFFFFFFFF
37
38unsigned on_sequence[2] = {
39    LED_ON(0),
40    END_OF_SEQ
41};
42
43unsigned off_sequence[2] = {
44    LED_OFF(0),
45    END_OF_SEQ
46};
47
48unsigned hunt_sequence[3] = {
49    LED_ON(1000),
50    LED_OFF(1000),
51    END_OF_SEQ
52};
53
54unsigned pending_sequence[5] = {
55    LED_ON(250),
56    LED_OFF(300),
57    LED_ON(250),
58    LED_OFF(1200),
59    END_OF_SEQ
60};
61
62unsigned download_sequence[7] = {
63    LED_ON(200),
64    LED_OFF(300),
65    LED_ON(200),
66    LED_OFF(300),
67    LED_ON(200),
68    LED_OFF(1800),
69    END_OF_SEQ
70};
71
72unsigned trouble_sequence[3] = {
73    LED_ON(500),
74    LED_OFF(500),
75    END_OF_SEQ
76};
77
78unsigned authorization_sequence[11] = {
79    LED_ON(4280),
80    LED_OFF(80),
81    LED_ON(80),
82    LED_OFF(80),
83    LED_ON(80),
84    LED_OFF(80),
85    LED_ON(80),
86    LED_OFF(80),
87    LED_ON(80),
88    LED_OFF(80),
89    END_OF_SEQ
90};
91
92struct led_state_t {
93    enum led_mode_t mode;
94    unsigned * sequence;
95    unsigned seq_index;
96    unsigned time_remains;
97};
98
99static struct led_state_t led_state = {led_off_mode, off_sequence, 0,0};
100
101static void led_control(bool on);
102
103unsigned led_set_mode(enum led_mode_t mode)
104{
105    led_state.mode = mode;
106    led_state.seq_index = 0;
107    switch(led_state.mode){
108    case led_off_mode:
109        led_state.sequence = off_sequence;
110        break;
111    case led_hunt_mode:
112        led_state.sequence = hunt_sequence;
113        break;
114    case led_pending_init_mode:
115        led_state.sequence = pending_sequence;
116        break;
117    case led_download_mode:
118        led_state.sequence = download_sequence;
119        break;
120    case led_trouble_mode:
121        led_state.sequence = trouble_sequence;
122        break;
123    case led_on_mode:
124        led_state.sequence = on_sequence;
125        break;
126    case led_authorization_mode:
127        led_state.sequence = authorization_sequence;
128        break;
129    default:
130        BDBG_ASSERT(0);
131        break;
132    }
133    led_state.time_remains = LED_OFF(led_state.sequence[led_state.seq_index]);
134    led_control(IS_LED_ON(led_state.sequence[led_state.seq_index]));
135    return led_state.time_remains;
136}
137
138unsigned led_update(unsigned elapsed_time)
139{
140    if(elapsed_time > led_state.time_remains){
141        led_state.time_remains = 0;
142    }else{
143        led_state.time_remains -= elapsed_time;
144    }
145   
146    if(0 == led_state.time_remains){
147        ++led_state.seq_index;
148        if(END_OF_SEQ == led_state.sequence[led_state.seq_index]){
149            led_state.seq_index = 0; /* restart seq */
150        }
151        led_state.time_remains = LED_OFF(led_state.sequence[led_state.seq_index]);
152        led_control(IS_LED_ON(led_state.sequence[led_state.seq_index]));
153    }
154    return led_state.time_remains;
155}
156
157#if (BCHP_CHIP==7552)
158#include "bchp_aon_ctrl.h"
159#endif
160
161void led_control(bool on)
162{
163#if (BCHP_CHIP==7550)
164        unsigned int value;
165
166        value = BREG_Read32(GetREG(), BCHP_SUN_TOP_CTRL_GENERAL_CTRL_1);
167        if (on) 
168                BREG_Write32(GetREG(), BCHP_SUN_TOP_CTRL_GENERAL_CTRL_1, value & ~BCHP_SUN_TOP_CTRL_GENERAL_CTRL_1_irw_top_sw_led_cntrl_MASK);
169        else
170                BREG_Write32(GetREG(), BCHP_SUN_TOP_CTRL_GENERAL_CTRL_1, value | BCHP_SUN_TOP_CTRL_GENERAL_CTRL_1_irw_top_sw_led_cntrl_MASK);
171#elif (BCHP_CHIP==7552)
172        if (on) 
173                BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_LED_CTRL, BCHP_AON_CTRL_PM_LED_CTRL_led_turn_off_MASK);
174        else
175                BREG_Write32(GetREG(), BCHP_AON_CTRL_PM_LED_CTRL, BCHP_AON_CTRL_PM_LED_CTRL_led_turn_on_MASK);
176#elif (BCHP_CHIP==7344)
177#endif
178#if 0
179        unsigned value;
180        value = ReadReg32(LED_DATA_REG);
181        if(true == on){
182                value |= LED_GREEN_MASK;
183        }else{
184                value &= ~LED_GREEN_MASK;
185        }
186        WriteReg32(LED_DATA_REG, value);
187#endif
188}
Note: See TracBrowser for help on using the repository browser.