文章目录
注:本文为个人学习记录,可能存在个别或多处错误,欢迎指正和讨论。
接:
android9.0 从driver到APP(1)–driver
hardware代码:
sample.c
/*
* Copyright (C) 2019 Alex
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define LOG_TAG "SampleHal"
#include <utils/Log.h>
#include <hardware/sample.h>
#include <hardware/hardware.h>
#ifdef __ANDROID__
#include <linux/sample.h>
#endif
#define DEVICE_NAME "/dev/sample"
#define MODULE_NAME "Demo Sample HAL"
#define MODULE_AUTHOR "Alex"
// We only support clang and g++.
#define UNUSED_ARGUMENT __attribute((unused))
static int sample_init(sample_module_t *module UNUSED_ARGUMENT)
{
printf("%s[%d]: start \n", __func__,__LINE__);
if(NULL == module){
printf("module is NULL \n");
return -1;
}
// open device
if(module->fd <= 0){
module->fd = open(DEVICE_NAME, O_RDWR);
if(module->fd == -1)
{
printf("%s[%d]: open device %s failed ! \n",__func__,__LINE__,DEVICE_NAME);
return -1;
}
}else{
printf("%s[%d]: device has been inited! \n",__func__,__LINE__);
}
printf("%s[%d]: success! \n", __func__,__LINE__);
return 0;
}
static int sample_close(sample_module_t *module UNUSED_ARGUMENT)
{
printf("%s[%d]: start \n", __func__,__LINE__);
if(NULL == module){
printf("module is NULL \n");
return -1;
}
// close device
if(module->fd >0){
close(module->fd);
module->fd =0;
}
return 0;
}
static int sample_read(sample_module_t *module UNUSED_ARGUMENT,int *val)
{
int ret =0;
printf(