亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sensor.c

?? 嵌入式操作系統(tǒng)內(nèi)核
?? C
字號:
/* -*- Mode: C; tab-width:2 -*- *//* ex: set ts=2 shiftwidth=2 softtabstop=2 cindent: *//* * Copyright (c) 2003 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above *    copyright notice, this list of conditions and the following *    disclaimer in the documentation and/or other materials provided *    with the distribution. * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgement: *       This product includes software developed by Networked & *       Embedded Systems Lab at UCLA * 4. Neither the name of the University nor that of the Laboratory *    may be used to endorse or promote products derived from this *    software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */#include <sos.h>#include <fntable_types.h>#include <message.h>#include "sensor.h"#ifndef SOS_DEBUG_SENSOR_API#undef DEBUG#define DEBUG(...)#endif//! Maximum types of sensors supported by SOS#define MAX_SENSOR_ID  10/** * @brief Private state of the sensor module */typedef struct sensor_state {	sos_pid_t pid;               //! Process id of the sensor driver	sos_pid_t client_pid;        //! Client module requesting the sensor data	void *ctx;     //! context that is saved when the sensor is registered} sensor_state_t;static sensor_state_t st[MAX_SENSOR_ID];// need to be declared seperatly because of how SOS does function mappingstatic func_cb_ptr sensor_func_ptr[MAX_SENSOR_ID];static int8_t sensor_handler(void *state, Message *msg);static sos_module_t sensor_module;static mod_header_t mod_header SOS_MODULE_HEADER ={	mod_id : KER_SENSOR_PID,	state_size : 0,	num_prov_func : 0,	num_sub_func : MAX_SENSOR_ID,	module_handler: sensor_handler,	funct : {		// sensor 0		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 1		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 2		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 3		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 4		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 5		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 6		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 7		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 8		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},		// sensor 9		{error_8, "cCw2", RUNTIME_PID, RUNTIME_FID},	},};static int8_t sensor_handler(void *state, Message *msg){	return -EINVAL;}/** * @brief Initialize the sensor interface */int8_t sensor_init() {  uint8_t i;  for (i = 0; i < MAX_SENSOR_ID; i++){		st[i].pid = NULL_PID;		st[i].client_pid = NULL_PID;		st[i].ctx = NULL;	}	sched_register_kernel_module(&sensor_module, sos_get_header_address(mod_header), sensor_func_ptr);	return SOS_OK;}/** * @brief Register a new sensor driver */int8_t ker_sensor_register(sos_pid_t calling_id, uint8_t sensor_id, uint8_t sensor_fid, void *ctx) {	if (sensor_id > MAX_SENSOR_ID) {		return -EINVAL;	}	if(st[sensor_id].pid != NULL_PID) {		return -EBUSY;	}	// try to register all necessary function calls	// if any fail do cleanup	if(ker_fntable_subscribe(KER_SENSOR_PID, calling_id, sensor_fid, sensor_id) < 0) {		return -EINVAL;	}	  st[sensor_id].ctx = ctx;  st[sensor_id].pid = calling_id;  return SOS_OK;}/** * @brief De-Register a sensor driver *///! XXX: We are not registering the get_data function, should be de-register it ?int8_t ker_sensor_deregister(sos_pid_t calling_id, uint8_t sensor_id) {	if ((sensor_id > MAX_SENSOR_ID) || (st[sensor_id].pid != calling_id)) {		return -EINVAL;	}	// disable sensor before unregistering function calls  SOS_CALL(sensor_func_ptr[sensor_id], sensor_func_t, SENSOR_DISABLE_CMD,  st[sensor_id].ctx);	//sensor_func_ptr[sensor_id] = NULL;  st[sensor_id].pid = NULL_PID;  st[sensor_id].ctx = NULL;  return SOS_OK;}/** * @brief Get the sensor data */int8_t ker_sensor_get_data(sos_pid_t calling_id, uint8_t sensor_id) {	int8_t ret;	if ((sensor_id > MAX_SENSOR_ID) || (st[sensor_id].pid == NULL_PID) || (st[sensor_id].client_pid != NULL_PID)) {		return -EINVAL;	}	st[sensor_id].client_pid = calling_id;  //changed	ret = SOS_CALL(sensor_func_ptr[sensor_id], sensor_func_t, SENSOR_GET_DATA_CMD, st[sensor_id].ctx);	if (SOS_OK != ret) {		//! XXX ????		st[sensor_id].client_pid = NULL_PID; //changed		return -EINVAL;	}	  return SOS_OK;}int8_t ker_sys_sensor_get_data( uint8_t sensor_id ){	int8_t ret;	sos_pid_t calling_id = ker_get_current_pid();	if ((sensor_id > MAX_SENSOR_ID) || (st[sensor_id].pid == NULL_PID) || (st[sensor_id].client_pid != NULL_PID)) {		return -EINVAL;	}	st[sensor_id].client_pid = calling_id;  //changed	ret = SOS_CALL(sensor_func_ptr[sensor_id], sensor_func_t, SENSOR_GET_DATA_CMD, st[sensor_id].ctx);	if (SOS_OK != ret) {		//! XXX ????		st[sensor_id].client_pid = NULL_PID; //changed		return -EINVAL;	}	return SOS_OK;}/** * @brief enable the sensor */int8_t ker_sensor_enable(sos_pid_t calling_id, uint8_t sensor_id) {	int8_t ret;	if ((sensor_id > MAX_SENSOR_ID) || (st[sensor_id].pid == NULL_PID) || (st[sensor_id].client_pid != NULL_PID)) {		return -EINVAL;	}	ret = SOS_CALL(sensor_func_ptr[sensor_id], sensor_func_t, SENSOR_ENABLE_CMD, st[sensor_id].ctx);	if (SOS_OK != ret) {		//! XXX ????		return -EINVAL;	}  return SOS_OK;}/** * @brief disable the sensor */int8_t ker_sensor_disable(sos_pid_t calling_id, uint8_t sensor_id) {	int8_t ret;	if ((sensor_id > MAX_SENSOR_ID) || (st[sensor_id].pid == NULL_PID) || (st[sensor_id].client_pid != NULL_PID)) {		return -EINVAL;	}	ret = SOS_CALL(sensor_func_ptr[sensor_id], sensor_func_t, SENSOR_DISABLE_CMD, st[sensor_id].ctx);	if (SOS_OK != ret) {		//! XXX ????		return -EINVAL;	}	st[sensor_id].client_pid = NULL_PID;  return SOS_OK;}/** * @brief reconfigure the sensor */int8_t ker_sensor_control(sos_pid_t calling_id, uint8_t sensor_id, void* sensor_new_state) {	int8_t ret;	if ((sensor_id > MAX_SENSOR_ID) || (st[sensor_id].pid == NULL_PID) || (st[sensor_id].client_pid != NULL_PID)) {		return -EINVAL;	}	ret = SOS_CALL(sensor_func_ptr[sensor_id], sensor_func_t, SENSOR_CONFIG_CMD, sensor_new_state);	if (SOS_OK != ret) {		//! XXX ????		return -EINVAL;	}  return SOS_OK;}/** * @brief The data ready message to the application */int8_t ker_sensor_data_ready(uint8_t sensor_id, uint16_t sensor_data, uint8_t status) {	if ((sensor_id > MAX_SENSOR_ID) || (NULL_PID == st[sensor_id].pid) || (NULL_PID == st[sensor_id].client_pid)) {		return -EINVAL;	}		//! There is no need to make this message a high priority one as it is the sampling which needs to be done asap and not the delivery	if ((0x3f & status) != 0) {		post_short(st[sensor_id].client_pid, KER_SENSOR_PID, MSG_ERROR, sensor_id, sensor_data, 0);	} else {		post_short(st[sensor_id].client_pid, KER_SENSOR_PID, MSG_DATA_READY, sensor_id, sensor_data, 0);	}	st[sensor_id].client_pid = NULL_PID;  return SOS_OK;}int8_t sensor_remove_all(sos_pid_t pid){	uint8_t i;	for(i = 0; i < MAX_SENSOR_ID; i++) {		if(st[i].pid == pid) {			ker_sensor_deregister(st[i].pid, i);		}	}	return SOS_OK;}#ifdef FAULT_TOLERANT_SOSint8_t sensor_micro_reboot(sos_pid_t pid){   uint8_t i;   for (i = 0; i < MAX_SENSOR_ID; i++){      if ((st[i].pid == pid) &           (st[i].client_pid != NULL_PID)){         //!XXX Ram - Need to send a response to any waiting client         // to make the recovery seamless.         // But what would be a good value to return ?         sensor_data_ready(i, 0xFFFF);         }   }   return SOS_OK;}#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩二区三区在线观看| 亚洲综合精品自拍| 国产九色精品成人porny| 精品电影一区二区| 国产精品91一区二区| 中文av一区特黄| 日本大香伊一区二区三区| 丁香另类激情小说| 国产精品视频线看| 色婷婷综合久久久中文字幕| 亚洲综合偷拍欧美一区色| 欧美精品日日鲁夜夜添| 麻豆91精品视频| 亚洲国产精品二十页| 在线视频你懂得一区二区三区| 亚洲高清免费在线| 精品国产乱码久久久久久1区2区| 国产精品91xxx| 亚洲永久免费av| 欧美一区二区免费视频| 国产在线视频精品一区| 亚洲色图在线播放| 欧美一级久久久久久久大片| 国产精品一区二区你懂的| 亚洲女人的天堂| 欧美剧情片在线观看| 国产福利视频一区二区三区| 樱桃视频在线观看一区| 日韩欧美在线影院| 色爱区综合激月婷婷| 精品一区二区在线观看| 亚洲综合一区二区| 国产欧美日韩中文久久| 欧美日本在线播放| 国产不卡高清在线观看视频| 三级不卡在线观看| 国产欧美一区视频| 在线播放中文一区| 91色在线porny| 国产麻豆午夜三级精品| 亚洲欧美视频在线观看视频| 精品国产sm最大网站| 欧美三级三级三级爽爽爽| 国产大片一区二区| 日本在线观看不卡视频| 亚洲视频一区二区在线观看| 精品国产乱码久久久久久老虎| 欧美偷拍一区二区| 99v久久综合狠狠综合久久| 麻豆91在线观看| 午夜成人免费视频| 亚洲人123区| 久久久久久久久久看片| 欧美一区二区视频在线观看2020| av亚洲精华国产精华精华 | 亚洲综合色丁香婷婷六月图片| 亚洲精品在线一区二区| 欧美精品久久一区| 欧美精品亚洲二区| 欧美色图12p| 在线国产电影不卡| 色综合久久中文综合久久牛| 国产91丝袜在线播放九色| 久久丁香综合五月国产三级网站| 日韩av中文在线观看| 亚洲自拍偷拍av| 一区二区三区鲁丝不卡| 中文无字幕一区二区三区 | 成人免费在线播放视频| 久久久久久久综合狠狠综合| 精品久久久久久无| 日韩欧美视频一区| 精品欧美乱码久久久久久| 欧美福利视频导航| 7777精品久久久大香线蕉 | 日韩欧美在线1卡| 日韩欧美一区二区视频| 欧美电影精品一区二区| 欧美精品一区二区在线观看| 欧美成人a视频| 精品少妇一区二区三区在线播放| 91精品国产综合久久精品| 欧美一区二区三区免费视频| 欧美一区二区三区在线电影| 日韩久久免费av| 久久伊人蜜桃av一区二区| 精品国产伦理网| 欧美精品一区二区三区四区| 欧美www视频| 国产日韩欧美一区二区三区综合| 久久久精品2019中文字幕之3| 国产欧美日韩三区| 一区二区三区在线免费观看| 亚洲一区二区三区中文字幕| 日韩一区欧美二区| 久久99精品久久久久久国产越南| 精品一区二区三区欧美| 成a人片亚洲日本久久| 91女厕偷拍女厕偷拍高清| 一本色道久久加勒比精品| 欧美亚洲一区三区| 欧美一级久久久| 欧美激情一区二区三区| 亚洲国产成人av| 激情综合色播五月| 91伊人久久大香线蕉| 欧美日韩精品是欧美日韩精品| 欧美成人免费网站| 亚洲人成电影网站色mp4| 日本一不卡视频| 成人晚上爱看视频| 欧美二区乱c少妇| 日本一二三不卡| 日韩黄色免费网站| 成人禁用看黄a在线| 欧美二区三区91| 国产欧美一区二区三区网站| 亚洲 欧美综合在线网络| 国产精品99久久久久久宅男| 在线观看区一区二| 精品福利一二区| 亚洲一区二区三区爽爽爽爽爽| 精彩视频一区二区| 欧美日韩一区小说| 国产精品美女一区二区三区| 日本视频一区二区三区| av在线这里只有精品| 精品国产免费久久| 亚洲成人动漫在线免费观看| 成人av网站在线| 欧美r级电影在线观看| 亚洲一区二区在线免费观看视频| 成人深夜视频在线观看| 日韩欧美高清dvd碟片| 综合久久国产九一剧情麻豆| 狠狠狠色丁香婷婷综合激情 | 精品一区二区三区在线观看| 成人av先锋影音| 久久先锋影音av鲁色资源网| 天堂成人免费av电影一区| 99视频超级精品| 国产欧美一区视频| 国产在线精品一区二区| 欧美一区二区成人| 五月天视频一区| 色国产精品一区在线观看| 中文字幕一区日韩精品欧美| 国产美女精品一区二区三区| 欧美一区二区啪啪| 日韩不卡一区二区| 在线观看亚洲a| 一卡二卡三卡日韩欧美| 99国产精品久久久久| 亚洲国产精品传媒在线观看| 国产精华液一区二区三区| xvideos.蜜桃一区二区| 另类人妖一区二区av| 日韩欧美一级片| 裸体一区二区三区| 日韩欧美一卡二卡| 精品亚洲国内自在自线福利| 日韩美女视频在线| 久久激情综合网| 欧美成人a在线| 国产精品99久久久| 欧美极品美女视频| 99久久久久久99| 亚洲人被黑人高潮完整版| 91福利视频在线| 亚洲国产日韩a在线播放性色| 91精品福利视频| 亚洲国产色一区| 制服丝袜中文字幕亚洲| 蜜臀国产一区二区三区在线播放| 91精品国产综合久久久久| 久久精品理论片| 欧美激情综合网| 91色综合久久久久婷婷| 亚洲sss视频在线视频| 6080yy午夜一二三区久久| 蜜桃一区二区三区在线观看| 久久在线观看免费| 大桥未久av一区二区三区中文| 亚洲欧美在线高清| 欧美日本在线一区| 韩国女主播一区二区三区| 国产精品久久久久久妇女6080| 色先锋aa成人| 秋霞av亚洲一区二区三| 国产日韩欧美亚洲| 色94色欧美sute亚洲线路二| 日本不卡一区二区| 久久精品一级爱片| 色播五月激情综合网| 日本va欧美va欧美va精品| 国产午夜一区二区三区| 色婷婷综合久久久久中文一区二区 | 91免费精品国自产拍在线不卡| 亚洲午夜成aⅴ人片| 精品久久久久一区二区国产|