Android HAL 研究开发 FOR LED

来源:互联网 发布:痛快的哀艳 知乎 编辑:程序博客网 时间:2024/06/09 23:39

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

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

原创粉丝点击