Led.h hardware/modules/include/Mokoid
|
#
include
<
hardware/
hardware.
h>
……….
struct
led_module_t {
struct
hw_module_t common;
}
;
struct
led_control_device_t {
struct
hw_device_t common;
/* supporting control APIs go here */
int
(
*
set_on)
(
struct
led_control_device_t *
dev,
int32_t
led)
;
int
(
*
set_off)
(
struct
led_control_device_t *
dev,
int32_t
led)
;
}
;
/*****************************************************************************/
struct
led_control_context_t {
struct
led_control_device_t device;
}
;
#
define
LED_HARDWARE_MODULE_ID "led"
|
Led.c hardware/modules/Led
|
static
int
led_set_on(
struct
led_control_device_t *
dev)
{
//FIXME: do system call to control gpio led//可以调用真正的驱动程序,如write,read等
LOGI(
"led_set_on"
)
;
return
0;
}
static
int
led_set_off(
struct
led_control_device_t *
dev)
{
//FIXME: do system call to control gpio led// //可以调用真正的驱动程序,如write,read等
LOGI(
"led_set_off"
)
;
return
0;
}
static
int
led_device_open(
const
struct
hw_module_t*
module,
const
char
*
name,
struct
hw_device_t*
*
device)
{
struct
led_control_device_t *
dev;
dev =
(
struct
led_control_device_t *
)
malloc
(
sizeof
(
*
dev)
)
;
memset
(
dev,
0,
sizeof
(
*
dev)
)
;
dev-
>
common.
tag =
HARDWARE_DEVICE_TAG;
dev-
>
common.
version =
0;
dev-
>
common.
module =
module;
dev-
>
common.
close
=
led_device_close;
dev-
>
set_on =
led_on;
dev-
>
set_off =
led_off;
*
device =
&
dev-
>
common;
success:
return
0;
}
static
struct
hw_module_methods_t led_module_methods =
{
open
:
led_device_open
}
;
const
struct
led_module_t HAL_MODULE_INFO_SYM =
{
common:
{
tag:
HARDWARE_MODULE_TAG,
version_major:
1,
version_minor:
0,
id:
LED_HARDWARE_MODULE_ID,
name:
"Sample LED Stub"
,
author:
"The Mokoid Open Source Project"
,
methods:
&
led_module_methods,
}
/* supporting APIs go here */
}
;
|
LedService.java frameworks/base/service/java/com/mokoid/Server
|
public
final
class
LedService extends…….
.
{
static
{
System
.
load
(
"/system/lib/libmokoid_runtime.so"
)
;
}
public
LedService(
)
{
Log
.
i(
"LedService"
,
"Go to get LED Stub..."
)
;
_init(
)
;
}
/*
* Mokoid LED native methods.
*/
public
boolean
setOn(
int
led)
{
Log
.
i(
"MokoidPlatform"
,
"LED On"
)
;
return
_set_on(
led)
;
}
public
boolean
setOff(
int
led)
{
Log
.
i(
"MokoidPlatform"
,
"LED Off"
)
;
return
_set_off(
led)
;
}
private
static
native
boolean
_init(
)
;
private
static
native
boolean
_set_on(
int
led)
;
private
static
native
boolean
_set_off(
int
led)
;
}
|
com_mokoid_server_LedService.cpp frameworks/base/service/Jni
|
static
jboolean mokoid_setOn(
JNIEnv*
env,
jobject thiz,
jint led)
{
………}
static
jboolean mokoid_setOff(
JNIEnv*
env,
jobject thiz,
jint led)
{
………}
static
inline
int
led_control_open(
const
struct
hw_module_t*
module,
struct
led_control_device_t*
*
device)
{
……….
.
}
static
jbooleanmokoid_init(
JNIEnv *
env,
jclass clazz)
{
………….
.
}
static
const
JNINativeMethod gMethods[
]
=
{
{
"_init"
,
"()Z"
,
(
void
*
)
mokoid_init}
,
{
"_set_on"
,
"(I)Z"
,
(
void
*
)
mokoid_setOn }
,
{
"_set_off"
,
"(I)Z"
,
(
void
*
)
mokoid_setOff }
,
}
;
static
int
registerMethods(
JNIEnv*
env)
{
static
const
char
*
const
kClassName =
"com/mokoid/server/LedService"
;
jclass clazz;
/* look up the class */
clazz =
env-
>
FindClass(
kClassName)
;
if
(
clazz =
=
NULL
)
{
LOGE(
"Can't find class %s/n"
,
kClassName)
;
return
-
1;
}
/* register all the methods */
if
(
env-
>
RegisterNatives(
clazz,
gMethods,
sizeof
(
gMethods)
/
sizeof
(
gMethods[
0]
)
)
!
=
JNI_OK)
{
LOGE(
"Failed registering methods for %s/n"
,
kClassName)
;
return
-
1;
}
/* fill out the rest of the ID cache */
return
0;
}
jint JNI_OnLoad(
JavaVM*
vm,
void
*
reserved)
{
JNIEnv*
env =
NULL
;
jint result =
-
1;
if
(
vm-
>
GetEnv
(
(
void
*
*
)
&
env,
JNI_VERSION_1_4)
!
=
JNI_OK)
{
LOGE(
"ERROR: GetEnv failed/n"
)
;
goto
bail;
}
assert
(
env !
=
NULL
)
;
if
(
registerMethods(
env)
!
=
0)
{
LOGE(
"ERROR: PlatformLibrary native registration failed/n"
)
;
goto
bail;
}
/* success -- return valid version number */
result =
JNI_VERSION_1_4;
bail:
return
result;
}
|
LedManager.java frameworks/base/core/java/mokoid/Hardware
|
public
class
LedManager
{
private
static
final
String
TAG =
"LedManager"
;
private
ILedService mLedService;
public
LedManager(
)
{
mLedService =
ILedService.
Stub
.
asInterface(
ServiceManager.
getService
(
"led"
)
)
;
if
(
mLedService !
=
null
)
{
Log
.
i(
TAG,
"The LedManager object is ready."
)
;
}
}
public
boolean
LedOn(
int
n)
{
…………….
.
}
public
boolean
LedOff(
int
n)
{
………………}
}
|
LedSystemServer.java apps/ledtest/src/com/mokoid/LedTest
|
public
class
LedSystemServer extends
Service {
@Override
public
IBinder onBind(
Intent intent)
{
return
null
;
}
public
void
onStart(
Intent intent,
int
startId)
{
Log
.
i(
"LedSystemServer"
,
"Start LedService..."
)
;
/* Please also see SystemServer.java for your interests. */
LedService ls
=
new
LedService(
)
;
try
{
ServiceManager.
addService
(
"led"
,
ls
)
;
}
catch
(
RuntimeException
e)
{
Log
.
e(
"LedSystemServer"
,
"Start LedService failed."
)
;
}
}
|
LedTest.java apps/ledtest/src/com/mokoid/LedTest
.O
{color:black;
font-size:149%;}
a:link
{color:#0083C0 !important;}
a:active
{color:#D45831 !important;}
a:visited
{color:#6FA6D6 !important;}
<!--.sld
{left:0px !important;
width:6.0in !important;
height:4.5in !important;
font-size:103% !important;}
-->
|
public
class
LedTest extends
Activity
implements
View
.
OnClickListener {
private
LedManager mLedManager =
null
;
@Override
public
void
onCreate(
Bundle savedInstanceState)
{
super
.
onCreate(
savedInstanceState)
;
// Start LedService in a seperated process.
startService(
new
Intent(
"com.mokoid.ledsystemserver"
)
)
;
Button
btn =
new
Button
(
this
)
;
btn.
setText
(
"Click to turn LED 1 On"
)
;
btn.
setOnClickListener(
this
)
;
setContentView(
btn)
;
}
|
LedSystemServer.java apps/ledtest/src/com/mokoid/LedTest
LedTest.java apps/ledtest/src/com/mokoid/LedTest
LedManager.java frameworks/base/core/java/mokoid/Hardware
LedService.java frameworks/base/service/java/com/mokoid/Server
com_mokoid_server_LedService.cpp frameworks/base/service/Jni
Led.h hardware/modules/include/Mokoid
Led.c hardware/modules/Led