Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stefan Haun
firmware
Commits
a6c3cf1e
Commit
a6c3cf1e
authored
May 19, 2019
by
schneider
Browse files
feat(leds): Initial SK9822 support
parent
9cab153a
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Hello_World/Heart.h
0 → 100644
View file @
a6c3cf1e
This diff is collapsed.
Click to expand it.
Hello_World/Makefile
View file @
a6c3cf1e
...
...
@@ -80,6 +80,7 @@ SRCS += font24.c
SRCS
+=
font24CN.c
SRCS
+=
card10.c
SRCS
+=
display.c
SRCS
+=
leds.c
# Where to find source files for this test
...
...
Hello_World/main.c
View file @
a6c3cf1e
...
...
@@ -42,21 +42,23 @@
/***** Includes *****/
#include
"pmic.h"
#include
"leds.h"
#include
"card10.h"
#include
"GUI_Paint.h"
#include
"tmr_utils.h"
#include
<stdio.h>
#include
<stdint.h>
#include
<string.h>
#include
<Heart.h>
/***** Definitions *****/
/***** Globals *****/
static
const
gpio_cfg_t
motor_pin
=
{
PORT_0
,
PIN_8
,
GPIO_FUNC_OUT
,
GPIO_PAD_NONE
};
/***** Functions *****/
// *****************************************************************************
int
main
(
void
)
{
int
count
=
0
;
...
...
@@ -64,7 +66,19 @@ int main(void)
card10_init
();
card10_diag
();
Paint_DrawImage
(
Heart
,
0
,
0
,
160
,
80
);
int
h
=
0
;
while
(
1
)
{
#if 0
leds_set_hsv(0, h, 1., 1.);
leds_set_hsv(1, (h + 90) % 360, 1., 1.);
leds_set_hsv(2, (h + 180) % 360, 1., 1.);
leds_set_hsv(3, (h + 270) % 360, 1., 1.);
leds_update();
TMR_Delay(MXC_TMR0, MSEC(10), 0);
h++;
#endif
#if 1
pmic_set_led
(
0
,
31
);
pmic_set_led
(
1
,
0
);
...
...
@@ -99,8 +113,9 @@ int main(void)
LED_On(0);
TMR_Delay(MXC_TMR0, MSEC(500), 0);
#endif
#if 1
TMR_Delay
(
MXC_TMR0
,
MSEC
(
1000
),
0
);
printf
(
"count = %d
\n
"
,
count
++
);
#endif
}
}
bmatest/Makefile
View file @
a6c3cf1e
...
...
@@ -82,6 +82,7 @@ SRCS += font24.c
SRCS
+=
font24CN.c
SRCS
+=
card10.c
SRCS
+=
display.c
SRCS
+=
leds.c
# Where to find source files for this test
...
...
bmetest/Makefile
View file @
a6c3cf1e
...
...
@@ -82,6 +82,7 @@ SRCS += font24.c
SRCS
+=
font24CN.c
SRCS
+=
card10.c
SRCS
+=
display.c
SRCS
+=
leds.c
# Where to find source files for this test
...
...
ecgtest/Makefile
View file @
a6c3cf1e
...
...
@@ -80,6 +80,7 @@ SRCS += font24.c
SRCS
+=
font24CN.c
SRCS
+=
card10.c
SRCS
+=
display.c
SRCS
+=
leds.c
# Where to find source files for this test
...
...
imutest/Makefile
View file @
a6c3cf1e
...
...
@@ -82,6 +82,7 @@ SRCS += font24.c
SRCS
+=
font24CN.c
SRCS
+=
card10.c
SRCS
+=
display.c
SRCS
+=
leds.c
# Where to find source files for this test
...
...
ips/Makefile
View file @
a6c3cf1e
...
...
@@ -82,6 +82,7 @@ SRCS += image.c
SRCS
+=
image2.c
SRCS
+=
card10.c
SRCS
+=
display.c
SRCS
+=
leds.c
# Where to find source files for this test
...
...
lib/card10/card10.c
View file @
a6c3cf1e
...
...
@@ -7,9 +7,9 @@
#include
"bme680.h"
#include
"bma400.h"
#include
"bhy.h"
#include
"leds.h"
#include
"mxc_config.h"
#include
"led.h"
#include
"board.h"
#include
"tmr_utils.h"
...
...
@@ -68,6 +68,8 @@ void card10_init(void)
}
display_init
();
leds_init
();
}
static
uint32_t
ecg_read_reg
(
uint8_t
reg
)
...
...
@@ -136,9 +138,14 @@ void card10_diag(void)
printf
(
"BMA400 found with chip ID 0x%X
\r\n
"
,
bma
.
chip_id
);
}
#if 0
for(int i=0; i<0x20; i++) {
uint32_t val = ecg_read_reg(i);
printf("ECG: %02x: 0x%06x\n", i, val);
}
#else
uint32_t
val
=
ecg_read_reg
(
0xf
);
printf
(
"ECG: %02x: 0x%06x (should be 0x5139a0)
\n
"
,
0xf
,
val
);
#endif
}
lib/card10/leds.c
0 → 100644
View file @
a6c3cf1e
#include
"gpio.h"
#include
<stdint.h>
#include
<string.h>
static
const
gpio_cfg_t
rgb_dat_pin
=
{
PORT_1
,
PIN_14
,
GPIO_FUNC_OUT
,
GPIO_PAD_NONE
};
static
const
gpio_cfg_t
rgb_clk_pin
=
{
PORT_1
,
PIN_15
,
GPIO_FUNC_OUT
,
GPIO_PAD_NONE
};
static
uint8_t
led_dim
=
8
;
static
uint8_t
leds
[
15
][
3
];
/***** Functions *****/
// *****************************************************************************
typedef
struct
{
float
r
;
// a fraction between 0 and 1
float
g
;
// a fraction between 0 and 1
float
b
;
// a fraction between 0 and 1
}
rgb
;
typedef
struct
{
float
h
;
// angle in degrees
float
s
;
// a fraction between 0 and 1
float
v
;
// a fraction between 0 and 1
}
hsv
;
#if 0
static hsv rgb2hsv(rgb in)
{
hsv out;
float min, max, delta;
min = in.r < in.g ? in.r : in.g;
min = min < in.b ? min : in.b;
max = in.r > in.g ? in.r : in.g;
max = max > in.b ? max : in.b;
out.v = max; // v
delta = max - min;
if (delta < 0.00001)
{
out.s = 0;
out.h = 0; // undefined, maybe nan?
return out;
}
if( max > 0.0 ) { // NOTE: if Max is == 0, this divide would cause a crash
out.s = (delta / max); // s
} else {
// if max is 0, then r = g = b = 0
// s = 0, h is undefined
out.s = 0.0;
out.h = 0.0; // its now undefined
return out;
}
if( in.r >= max ) // > is bogus, just keeps compilor happy
out.h = ( in.g - in.b ) / delta; // between yellow & magenta
else
if( in.g >= max )
out.h = 2.0 + ( in.b - in.r ) / delta; // between cyan & yellow
else
out.h = 4.0 + ( in.r - in.g ) / delta; // between magenta & cyan
out.h *= 60.0; // degrees
if( out.h < 0.0 )
out.h += 360.0;
return out;
}
#endif
static
rgb
hsv2rgb
(
hsv
in
)
{
float
hh
,
p
,
q
,
t
,
ff
;
long
i
;
rgb
out
;
if
(
in
.
s
<=
0
.
0
)
{
// < is bogus, just shuts up warnings
out
.
r
=
in
.
v
;
out
.
g
=
in
.
v
;
out
.
b
=
in
.
v
;
return
out
;
}
hh
=
in
.
h
;
if
(
hh
>=
360
.
0
)
hh
=
0
.
0
;
hh
/=
60
.
0
;
i
=
(
long
)
hh
;
ff
=
hh
-
i
;
p
=
in
.
v
*
(
1
.
0
-
in
.
s
);
q
=
in
.
v
*
(
1
.
0
-
(
in
.
s
*
ff
));
t
=
in
.
v
*
(
1
.
0
-
(
in
.
s
*
(
1
.
0
-
ff
)));
switch
(
i
)
{
case
0
:
out
.
r
=
in
.
v
;
out
.
g
=
t
;
out
.
b
=
p
;
break
;
case
1
:
out
.
r
=
q
;
out
.
g
=
in
.
v
;
out
.
b
=
p
;
break
;
case
2
:
out
.
r
=
p
;
out
.
g
=
in
.
v
;
out
.
b
=
t
;
break
;
case
3
:
out
.
r
=
p
;
out
.
g
=
q
;
out
.
b
=
in
.
v
;
break
;
case
4
:
out
.
r
=
t
;
out
.
g
=
p
;
out
.
b
=
in
.
v
;
break
;
case
5
:
default:
out
.
r
=
in
.
v
;
out
.
g
=
p
;
out
.
b
=
q
;
break
;
}
return
out
;
}
static
void
shift
(
uint8_t
data
)
{
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
if
(
data
&
0x80
)
{
GPIO_OutSet
(
&
rgb_dat_pin
);
}
else
{
GPIO_OutClr
(
&
rgb_dat_pin
);
}
GPIO_OutClr
(
&
rgb_clk_pin
);
//TMR_Delay(MXC_TMR0, MSEC(1), 0);
GPIO_OutSet
(
&
rgb_clk_pin
);
//TMR_Delay(MXC_TMR0, MSEC(1), 0);
data
<<=
1
;
}
}
static
void
leds_start
(
void
)
{
shift
(
0x00
);
shift
(
0x00
);
shift
(
0x00
);
shift
(
0x00
);
}
static
void
leds_shift
(
uint8_t
r
,
uint8_t
g
,
uint8_t
b
,
uint8_t
dim
)
{
shift
(
0xE0
|
(
dim
&
0x1F
));
shift
(
b
);
shift
(
g
);
shift
(
r
);
}
static
void
leds_stop
(
void
)
{
shift
(
0xFF
);
shift
(
0xFF
);
shift
(
0xFF
);
shift
(
0xFF
);
}
void
leds_set_dim
(
uint8_t
dim
)
{
led_dim
=
dim
;
}
void
leds_set
(
uint8_t
led
,
uint8_t
r
,
uint8_t
g
,
uint8_t
b
)
{
leds
[
led
][
0
]
=
r
;
leds
[
led
][
1
]
=
g
;
leds
[
led
][
2
]
=
b
;
}
void
leds_set_hsv
(
uint8_t
led
,
float
h
,
float
s
,
float
v
)
{
hsv
in
=
{
h
,
s
,
v
};
rgb
out
=
hsv2rgb
(
in
);
leds
[
led
][
0
]
=
out
.
r
*
255
;
leds
[
led
][
1
]
=
out
.
g
*
255
;
leds
[
led
][
2
]
=
out
.
b
*
255
;
}
void
leds_update
(
void
)
{
leds_start
();
for
(
int
i
=
3
;
i
>=
0
;
i
--
)
{
leds_shift
(
leds
[
i
][
0
],
leds
[
i
][
1
],
leds
[
i
][
2
],
led_dim
);
}
leds_stop
();
}
void
leds_init
(
void
)
{
GPIO_Config
(
&
rgb_clk_pin
);
GPIO_Config
(
&
rgb_dat_pin
);
GPIO_OutSet
(
&
rgb_clk_pin
);
GPIO_OutClr
(
&
rgb_dat_pin
);
memset
(
leds
,
0
,
sizeof
(
leds
));
led_dim
=
8
;
leds_update
();
}
lib/card10/leds.h
0 → 100644
View file @
a6c3cf1e
#ifndef LED_H
#include
<stdint.h>
void
leds_set_dim
(
uint8_t
dim
);
void
leds_set
(
uint8_t
led
,
uint8_t
r
,
uint8_t
g
,
uint8_t
b
);
void
leds_set_hsv
(
uint8_t
led
,
float
h
,
float
s
,
float
v
);
void
leds_update
(
void
);
void
leds_init
(
void
);
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment