diff options
Diffstat (limited to 'deck_hal')
-rwxr-xr-x | deck_hal/LICENSE | 177 | ||||
-rwxr-xr-x | deck_hal/Makefile | 67 | ||||
-rwxr-xr-x | deck_hal/hal_api/deck_hal.h | 322 | ||||
-rwxr-xr-x | deck_hal/inc/deck_hal_deckhallog.h | 76 | ||||
-rwxr-xr-x | deck_hal/src/deck_hal.cpp | 159 |
5 files changed, 801 insertions, 0 deletions
diff --git a/deck_hal/LICENSE b/deck_hal/LICENSE new file mode 100755 index 0000000..f433b1a --- /dev/null +++ b/deck_hal/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/deck_hal/Makefile b/deck_hal/Makefile new file mode 100755 index 0000000..fbe4ddf --- /dev/null +++ b/deck_hal/Makefile @@ -0,0 +1,67 @@ +# +# @copyright Copyright (c) 2017-2020 TOYOTA MOTOR CORPORATION. +# +# 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. +# + +######### installed program/file ################ +TARGET := libdeck_hal.so + +HEADER := hal_api/deck_hal.h + +######### include paths/files ################### +CXXFLAGS += -I./inc/ +CXXFLAGS += -I./hal_api/ +CXXFLAGS += -I$(SDKTARGETSYSROOT)/usr/agl/include +CXXFLAGS += -include $(SDKTARGETSYSROOT)/usr/agl/include/agl_types_obsoluted.h + +######### compile options ####################### +CXXFLAGS += -Wall -fPIC + +######### link options ########################## +LDFLAGS += -shared +LDFLAGS += -Wl,--no-as-needed +LDFLAGS += -Wl,--no-undefined +LDFLAGS += -L$(SDKTARGETSYSROOT)/usr/agl/lib + +RPATH := /usr/lib + +######### linked library ######################## +LIBS += -Wl,-Bdynamic -lstdc++ +LIBS += -Wl,-Bdynamic -lNS_FrameworkUnified + + +######### source files ########################## +VPATH += src +OBJS := deck_hal.o + +######### make targets ########################## +all: $(TARGET) + @echo $@ done. + +$(TARGET): $(OBJS) + $(CC) $(LDFLAGS) -Wl,-rpath=:$(RPATH) $(OBJS) $(LIBS) -o $(TARGET) + @echo $@ done. + +######### make cleans ########################### +GCNO_FILES := $(filter %.gcno,$(OBJS:%.o=%.gcno)) + +clean: + rm -f $(OBJS) $(TARGET) $(GCNO_FILES) + @echo $@ done. + +######### make installs ######################### +install: + install -d -m 0755 $(DESTDIR)/usr/lib + install -m 0755 $(TARGET) $(DESTDIR)/usr/lib + @echo $@ done. diff --git a/deck_hal/hal_api/deck_hal.h b/deck_hal/hal_api/deck_hal.h new file mode 100755 index 0000000..74aa19a --- /dev/null +++ b/deck_hal/hal_api/deck_hal.h @@ -0,0 +1,322 @@ +/* + * @copyright Copyright (c) 2017-2020 TOYOTA MOTOR CORPORATION. + * + * 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. + */ + +/*!----------------------------------------------------------------------------- + * @file deck_hal.h + * @~english + * @brief deck_hal API head + * + */ + +#ifndef HAL_API_DECK_HAL_H_ +#define HAL_API_DECK_HAL_H_ + +#include <native_service/frameworkunified_types.h> + +/** + * @file deck_hal.h + */ + +/** @addtogroup interface_unified + * @{ + */ +/** @addtogroup deck_hal + * @ingroup interface_unified + * @{ + */ +#ifdef __cplusplus +extern "C" { +#endif /*__cplusplus*/ + +/*! @~english Maximum length of command data division */ +#define DECK_CMD_SIZE_CMDDATA_MAX 252 +/*! @~english Maximum length of notification destination */ +#define NOTIFY_NAME_MAX_SIZE 15 + +// CID_DECK_SYS_DELIVERY is for deck_hal to report correspinding message to vehicle, +// the value 0x40 can be changed in the future +/** + * \~english @brief DECK SYS Command-Delivery Notification + * \~english @brief If you want to receive this DECK SYS command-delivery notification, use the NSFW IF as follows: + * \~english @code + * l_eStatus = FrameworkunifiedAttachCallbackToDispatcher(hApp, DECKHAL_THREAD, CID_DECK_SYS_DELIVERY, LineSensDrvRcvDeckHal); + * @endcode + */ +#define CID_DECK_SYS_DELIVERY 0x40 + +/*! + * @~english + * @brief Disc eject mode +*/ +typedef enum { + /*! @~english normal eject */ + DECK_EJECT_NORMAL, + /*! @~english forced eject */ + DECK_EJECT_FORCED +} DeckEjectMode; + +/*! + * @~english + * @brief Disc mode +*/ +typedef enum { + /*! @~english CD */ + DECK_KIND_CD, + /*! @~english DVD */ + DECK_KIND_DVD, + /*! @~english Blue-lay disc */ + DECK_KIND_BD +} DeckKind; + +/*------------------------------------------------------------------------------ + * typedefs + *----------------------------------------------------------------------------*/ +/** + * \~english Deck-Sys command header structure + */ +typedef struct { + /*! @~english Source logical address */ + uint8_t lgadr_from; + /*! @~english Forwarding destination logical address */ + uint8_t lgadr_to; + /*! @~english OP code */ + uint8_t opc; + /*! @~english Reserve */ + uint8_t reserve; +} DeckCmdhdr; + +/** + * \~english Deck-Sys command body structure + */ +typedef struct DeckCmd { + /*! @~english Deck-Sys command header */ + DeckCmdhdr cmdhdr; + /*! @~english Data length */ + uint16_t data_length; + /*! @~english Reserve */ + uint16_t reserve; + /*! @~english Command data */ + uint8_t data[DECK_CMD_SIZE_CMDDATA_MAX]; +} DeckCmd; + +/*! + * @~english + * @brief Structure for message header + */ +typedef struct { + uint16_t replyid; //!< \~english Send Result ID + uint16_t sndpno; //!< \~english Send process No + uint16_t respno; //!< \~english Response No + uint16_t cid; //!< \~english Command ID + uint16_t msgbodysize; //!< \~english Message body size + uint8_t rid; //!< \~english Resource ID + uint8_t reserve; //!< \~english Reserve + uint8_t filler[2]; //!< \~english filler +} DECK_HEADER_COMM; + +/*! + * @~english + * @brief Structure for buffer message header + */ +typedef struct { + uint32_t signo; //!< \~english Signal No + DECK_HEADER_COMM hdr; //!< \~english Message Header +} DECK_MSGBUF_HEADER_COMM; + +/** + * \~english Delivery message structure + */ +typedef struct { + /*! @~english Header part */ + DECK_MSGBUF_HEADER_COMM hdr; + /*! @~english Physical address */ + uint16_t phyadr_from; + /*! @~english Communication type */ + uint8_t service_type; + /*! @~english Reserve */ + uint8_t reserve; + /*! @~english Data section */ + DeckCmd cmd; +} DECK_MSG_DELIVERY; + +/*! + * @~english + * @brief Structure for send command data + */ +typedef struct { + /*! @~english Physical address */ + uint16_t phyadr_from; + /*! @~english Communication type */ + uint8_t service_type; + /*! @~english Forwarding former logic address */ + uint8_t lgadr_from; + /*! @~english Forwarding site logic address */ + uint8_t lgadr_to; + /*! @~english Operation code */ + uint8_t opc; + /*! @~english Data length (size in command data */ + uint8_t d_length; + /*! @~english Command data */ + uint8_t data[DECK_CMD_SIZE_CMDDATA_MAX]; + /*! @~english reserve */ + uint8_t reserve; +} DECK_CMD_DATA; + +/*! + * @~english + * @brief Structure for send command + */ +typedef struct { + /*! @~english Command information */ + DECK_CMD_DATA cmd_data; +} DECK_CMD; + +/*------------------------------------------------------------------------------ + * function declaration + *----------------------------------------------------------------------------*/ +//////////////////////////////////////////////////////////////////////////////////////////// +/// \ingroup StopDiscRotation +/// \~english @par Brief +/// Stop disc rotation +/// \~english @param [in] - +/// \~english @param [out] - +/// \~english @retval eFrameworkunifiedStatusOK OK +/// \~english @retval eFrameworkunifiedStatusFail Abnormal Error +/// \~english @par Prerequisite +/// - Disc was inserted +/// \~english @par Change of internal state +/// - Change of internal state according to the API does not occur. +/// \~english @par Conditions of processing failure +/// - Error occurs when call open or ioctl function.[eFrameworkunifiedStatusFail] +/// \~english @par Classification +/// Public +/// \~english @par Type +/// Sync +/// \~english @par Detail +/// - Stop disc rotation +/// - Whatever disc is rotating or stoped, return successed. +/// - The API can be used by multi-process. +/// \~english @see None +//////////////////////////////////////////////////////////////////////////////////////////// + +EFrameworkunifiedStatus StopDiscRotation(); + +//////////////////////////////////////////////////////////////////////////////////////////// +/// \ingroup EjectDisc +/// \~english @par Brief +/// Eject disc +/// \~english @param [in] kind +/// DeckKind - kind of deck. +/// \~english @param [in] mode +/// DeckEjectMode - eject mode(normal/forcedly) +/// \~english @param [out] - +/// \~english @retval eFrameworkunifiedStatusOK OK +/// \~english @retval eFrameworkunifiedStatusFail Abnormal Error +/// \~english @par Prerequisite +/// - None +/// \~english @par Change of internal state +/// - Change of internal state according to the API does not occur. +/// \~english @par Conditions of processing failure +/// - Error occurs when call open or ioctl function.[eFrameworkunifiedStatusFail] +/// \~english @par Classification +/// Public +/// \~english @par Type +/// Sync +/// \~english @par Detail +/// - Eject disc +/// - Whatever disc is Ejecting or Unejected, return successed. +/// - The API can be used by multi-process. +/// \~english @see None +//////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus EjectDisc(DeckKind kind, DeckEjectMode mode); + +//////////////////////////////////////////////////////////////////////////////////////////// +/// \ingroup DeckHalSysSend +/// \~english @par Brief +/// Send Disc Sys-Command to MICON +/// \~english @param [in] h_app +/// HANDLE - Handle of caller (Handle to get in Dispatcher generation +/// (FrameworkunifiedCreateDispatcherWithoutLoop etc.)) +/// \~english @param [in] name +/// PCSTR - Name to notification of send result destination thread name +/// \~english @param [in] cmd +/// DECK_CMD - Send command pointer +/// \~english @param [in] req_id +/// uint8_t - Resource ID +/// \~english @param [out] - +/// \~english @retval eFrameworkunifiedStatusOK Normal termination +/// \~english @retval eFrameworkunifiedStatusInvldParam Abnormal parameter +/// \~english @par Prerequisite +/// - None +/// \~english @par Change of internal state +/// - Change of internal state according to the API does not occur. +/// \~english @par Conditions of processing failure +/// - h_app is NULL.[eFrameworkunifiedStatusInvldParam] +/// - name is NULL or the length of name is longer than 15 bytes. +/// [eFrameworkunifiedStatusInvldParam] +/// - Send command pointer(cmd) is null.[eFrameworkunifiedStatusInvldParam] +/// \~english @par Classification +/// Public +/// \~english @par Type +/// Sync +/// \~english @par Detail +/// - Send SYS command to MICON +/// - Now only usb disc exists,MICON disc is stub now. +/// - The API can only be used by 1 process. +/// \~english @see None +//////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus DeckHalSysSend(HANDLE h_app, PCSTR name, const DECK_CMD* cmd, uint8_t req_id); + +//////////////////////////////////////////////////////////////////////////////////////////// +/// \ingroup DeckHalRegister +/// \~english @par Brief +/// Register the deck_hal command to receive from MICON +/// \~english @param [in] h_app +/// HANDLE - Handle of caller (Handle to get in Dispatcher generation +/// (FrameworkunifiedCreateDispatcherWithoutLoop etc.)) +/// \~english @param [in] notify_name +/// PCSTR - Name to notification destination thread name +/// \~english @param [out] - +/// \~english @retval eFrameworkunifiedStatusOK Normal termination +/// \~english @retval eFrameworkunifiedStatusInvldParam Abnormal parameter +/// \~english @par Prerequisite +/// - None +/// \~english @par Change of internal state +/// - Change of internal state according to the API does not occur. +/// \~english @par Conditions of processing failure +/// - h_app is NULL.[eFrameworkunifiedStatusInvldParam] +/// - notify_name is NULL or the length of notify_name is longer than 15 bytes. +/// [eFrameworkunifiedStatusInvldParam] +/// \~english @par Classification +/// Public +/// \~english @par Type +/// Sync +/// \~english @par Detail +/// - After call this API, the user can received dech_hal command from MICON. +/// - Now MICON is stub,so that deck_hal won't register to MICON. +/// - The API can only be used by 1 process. +/// \~english @see None +//////////////////////////////////////////////////////////////////////////////////////////// +EFrameworkunifiedStatus DeckHalRegister(HANDLE h_app, PCSTR notify_name); + +#ifdef __cplusplus +} +#endif /*__cplusplus */ + +/** @}*/ // end of deck_hal +/** @}*/ // end of interface_unified + +#endif // HAL_API_DECK_HAL_H_ diff --git a/deck_hal/inc/deck_hal_deckhallog.h b/deck_hal/inc/deck_hal_deckhallog.h new file mode 100755 index 0000000..9aa4624 --- /dev/null +++ b/deck_hal/inc/deck_hal_deckhallog.h @@ -0,0 +1,76 @@ +/* + * @copyright Copyright (c) 2017-2020 TOYOTA MOTOR CORPORATION. + * + * 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. + */ +#ifndef INC_DECK_HAL_DECKHALLOG_H_ +#define INC_DECK_HAL_DECKHALLOG_H_ + +#include <native_service/ns_logger_if.h> + +#define ZONE_INIT ZONEMASK(10) +#define ZONE_FUNC ZONEMASK(11) +#define ZONE_MEM ZONEMASK(12) +#define ZONE_13 ZONEMASK(13) +#define ZONE_14 ZONEMASK(14) +#define ZONE_15 ZONEMASK(15) +#define ZONE_16 ZONEMASK(16) +#define ZONE_17 ZONEMASK(17) +#define ZONE_18 ZONEMASK(18) +#define ZONE_19 ZONEMASK(19) +#define ZONE_20 ZONEMASK(20) +#define ZONE_21 ZONEMASK(21) +#define ZONE_22 ZONEMASK(22) +#define ZONE_23 ZONEMASK(23) +#define ZONE_24 ZONEMASK(24) +#define ZONE_25 ZONEMASK(25) +#define ZONE_26 ZONEMASK(26) +#define ZONE_27 ZONEMASK(27) +#define ZONE_28 ZONEMASK(28) +#define ZONE_INFO ZONEMASK(29) +#define ZONE_WARN ZONEMASK(30) +#define ZONE_ERR ZONEMASK(31) + +#define ZONE_TEXT_10 "Init" +#define ZONE_TEXT_11 "Function" +#define ZONE_TEXT_12 "Memory" +#define ZONE_TEXT_13 "" +#define ZONE_TEXT_14 "" +#define ZONE_TEXT_15 "" +#define ZONE_TEXT_16 "" +#define ZONE_TEXT_17 "" +#define ZONE_TEXT_18 "" +#define ZONE_TEXT_19 "" +#define ZONE_TEXT_20 "" +#define ZONE_TEXT_21 "" +#define ZONE_TEXT_22 "" +#define ZONE_TEXT_23 "" +#define ZONE_TEXT_24 "" +#define ZONE_TEXT_25 "" +#define ZONE_TEXT_26 "" +#define ZONE_TEXT_27 "" +#define ZONE_TEXT_28 "" +#define ZONE_TEXT_29 "Info" +#define ZONE_TEXT_30 "Warning" +#define ZONE_TEXT_31 "Error" + +#ifndef FRAMEWORKUNIFIEDLOGOPTIONS +#define FRAMEWORKUNIFIEDLOGOPTIONS (LSHAREDMEM) // LPRINT , LMSGQ, LSLOGGER +#endif + +#ifndef FRAMEWORKUNIFIEDLOGAPPZONES +#define FRAMEWORKUNIFIEDLOGAPPZONES ZONE_ERR, ZONE_WARN, ZONE_INFO +#endif + +extern const CHAR AppName[]; // NOLINT (defind outside) +#endif // INC_DECK_HAL_DECKHALLOG_H_ diff --git a/deck_hal/src/deck_hal.cpp b/deck_hal/src/deck_hal.cpp new file mode 100755 index 0000000..a116e6c --- /dev/null +++ b/deck_hal/src/deck_hal.cpp @@ -0,0 +1,159 @@ +/* + * @copyright Copyright (c) 2017-2020 TOYOTA MOTOR CORPORATION. + * + * 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 <fcntl.h> +#include <unistd.h> +#include <linux/cdrom.h> +#include <sys/ioctl.h> +#include <deck_hal.h> +#include <native_service/frameworkunified_types.h> +#include <native_service/frameworkunified_framework_if.h> +#include <stdio.h> +#include <string.h> +#include "deck_hal_deckhallog.h" + +#define DECKHAL_THREAD "DeckHal" +#define DISC_PATH "/dev/sr0" +// static variables +static char g_notify_name[NOTIFY_NAME_MAX_SIZE + 1] = {0}; +static bool g_register_status = false; // deck_hal register status + +// functions +EFrameworkunifiedStatus DeckNotifyInfo(const DECK_MSG_DELIVERY &DeliveryData); + +EFrameworkunifiedStatus StopDiscRotation() { + int fd; + int ret; + fd = open(DISC_PATH, O_RDONLY); + if (fd < 0) { + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "open failed."); + return eFrameworkunifiedStatusFail; + } + ret = ioctl(fd, CDROMSTOP); + close(fd); + if (ret != 0) { + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "ioctl failed."); + return eFrameworkunifiedStatusFail; + } + return eFrameworkunifiedStatusOK; +} + +EFrameworkunifiedStatus EjectDisc(DeckKind kind, DeckEjectMode mode) { + int fd; + int ret; + fd = open(DISC_PATH, O_RDONLY); + if (fd < 0) { + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "open failed."); + return eFrameworkunifiedStatusFail; + } + ret = ioctl(fd, CDROM_LOCKDOOR); + if (ret != 0) { + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "unlock disc failed."); + close(fd); + return eFrameworkunifiedStatusFail; + } + ret = ioctl(fd, CDROMEJECT); + close(fd); + if (ret != 0) { + FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "eject disc failed."); + return eFrameworkunifiedStatusFail; + } + return eFrameworkunifiedStatusOK; +} + +EFrameworkunifiedStatus DeckHalSysSend(HANDLE h_app, PCSTR name, const DECK_CMD* cmd, uint8_t req_id) { + EFrameworkunifiedStatus ret = eFrameworkunifiedStatusOK; + + if (NULL == h_app || NULL == name || NULL == cmd) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Input param is NULL\n"); + return eFrameworkunifiedStatusInvldParam; + } + + if (NOTIFY_NAME_MAX_SIZE < strlen(name)) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Input name length is overlapped\n"); + return eFrameworkunifiedStatusInvldParam; + } + // DeckHalSysSend aims to send command to micon, + // since micon is stub now,so DeckHalSysSend is stub either. + + // deck_hal should notify chande mode status after received mode change info + // from micon,since now micon is stub,notify change mode status to vehicle + // immediately. + // the data notify to vehile is just a example. + DECK_MSG_DELIVERY data; + data.cmd.cmdhdr.lgadr_from = 0x44; // vehile:LSDRV_ADR_DVD_P + data.cmd.cmdhdr.lgadr_to = 0xC8; // vehicle:LSDRV_OPC_DRV_M_CH_A_DVD + data.cmd.cmdhdr.opc = 0xC8; // vehicle:LSDRV_OPC_DRV_M_CH_A_DVD + DeckNotifyInfo(data); + + return ret; +} + +EFrameworkunifiedStatus DeckHalRegister(HANDLE h_app, PCSTR notify_name) { + if (NULL == h_app) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Input h_app is NULL\n"); + return eFrameworkunifiedStatusInvldParam; + } + + if (NULL == notify_name) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Input notify_name is NULL\n"); + return eFrameworkunifiedStatusInvldParam; + } + + if (strlen(notify_name) > NOTIFY_NAME_MAX_SIZE) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Input notify_name length is overlapped\n"); + return eFrameworkunifiedStatusInvldParam; + } + + strncpy(g_notify_name, notify_name, NOTIFY_NAME_MAX_SIZE); + + // now micon is stub,in the future,should register to micon + + g_register_status = true; + + return eFrameworkunifiedStatusOK; +} + +// DeckNotifyInfo aims to send deck infos to vehicle +// if micon is not stub in the future,after received meesage from micon +// or any other ways triggered by micon,deck_hal should call this function +// with different input data to send these data to vehicle. +EFrameworkunifiedStatus DeckNotifyInfo(const DECK_MSG_DELIVERY &DeliveryData) { + EFrameworkunifiedStatus ret = eFrameworkunifiedStatusOK; + HANDLE send_handle = NULL; + + if (g_register_status == true) { + send_handle = McOpenSender(g_notify_name); + if (send_handle == NULL) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "FrameworkunifiedMcOpenSender to _CWORD121_Shadow Failed."); + return eFrameworkunifiedStatusFail; + } + + ret = McSend(send_handle, DECKHAL_THREAD, CID_DECK_SYS_DELIVERY, + sizeof(DECK_MSG_DELIVERY), &DeliveryData); + + if (eFrameworkunifiedStatusOK != ret) { + FRAMEWORKUNIFIEDLOG(ZONE_ERR, __func__, "Failed to send CID_DECK_SYS_DELIVERY."); + ret = eFrameworkunifiedStatusFail; + } + + if (send_handle != NULL) { + McClose(send_handle); + send_handle = NULL; + } + } + + return ret; +} |