summaryrefslogtreecommitdiff
path: root/halimpl/include/hal.h
diff options
context:
space:
mode:
Diffstat (limited to 'halimpl/include/hal.h')
-rw-r--r--halimpl/include/hal.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/halimpl/include/hal.h b/halimpl/include/hal.h
new file mode 100644
index 0000000..153cd99
--- /dev/null
+++ b/halimpl/include/hal.h
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2013 SAMSUNG S.LSI
+ *
+ * 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 __NFC_SEC_HAL__
+#define __NFC_SEC_HAL__
+
+#include <hardware/nfc.h>
+
+#include "hal_msg.h"
+#include "osi.h"
+
+#include "android/hardware/nfc/1.2/INfc.h"
+#include "android/hardware/nfc/1.2/types.h"
+
+using ::android::hardware::nfc::V1_1::NfcConfig;
+
+#ifndef __bool_true_false_are_defined
+#define __bool_true_false_are_defined
+typedef enum { false, true } bool;
+#endif
+
+/***************************************
+ * DEVICE
+ ***************************************/
+typedef enum {
+ NFC_DEV_MODE_OFF = 0,
+ NFC_DEV_MODE_ON,
+ NFC_DEV_MODE_BOOTLOADER,
+} eNFC_DEV_MODE;
+
+/***************************************
+ * States
+ ***************************************/
+typedef enum {
+ HAL_STATE_INIT,
+ HAL_STATE_DEINIT,
+ HAL_STATE_OPEN,
+ HAL_STATE_VS,
+ HAL_STATE_POSTINIT,
+ HAL_STATE_SERVICE,
+ HAL_STATE_GRANTED,
+ HAL_STATE_CLOSE, /* VTS */
+ HAL_STATE_POWERCYCLE, /* VTS */
+} eHAL_STATE;
+
+/* FW sub-state */
+#define FW_DATA_PAYLOAD_MAX (256)
+
+/* VS sub-state */
+typedef enum {
+ VS_INIT,
+ VS_W4_COMPLETE,
+} eNFC_HAL_VS_STATE;
+
+/***************************************
+ * Structures
+ ***************************************/
+/* VS related */
+
+typedef struct {
+ eNFC_HAL_VS_STATE state;
+} tNFC_HAL_VS_INFO;
+enum {
+ CFG_SLEEP_TIMEOUT = 0,
+ CFG_WAKEUP_DELAY,
+ CFG_NCI_PROP,
+ CFG_POWER_DRIVER,
+ CFG_TRANS_DRIVER,
+ CFG_TRACE_LEVEL,
+ CFG_DATA_TRACE,
+ CFG_FW_CLK_SPEED,
+};
+
+static const char* cfg_name_table[] = {
+ "SLEEP_TIMEOUT", "WAKEUP_DELAY", "NCI_PROP", "POWER_DRIVER",
+ "TRANS_DRIVER", "TRACE_LEVEL", "DATA_TRACE", "FW_CFG_CLK_SPEED",
+};
+
+typedef struct {
+ uint32_t sleep_timeout;
+ uint32_t override_timeout;
+} tNFC_HAL_CONFIG;
+
+/* Granted related */
+#define HAL_GRANT_SEND_NEXT 0x00
+#define HAL_GRANT_WAIT_READ 0x01
+#define HAL_GRANT_FINISH 0x02
+typedef uint8_t(tNFC_HAL_GRANT_CALLBACK)(tNFC_NCI_PKT* pkt);
+
+/* FLAGS */
+#define HAL_FLAG_MASK_USING_TIMER 0x000F
+#define HAL_FLAG_W4_CORE_RESET_RSP 0x0001
+#define HAL_FLAG_W4_CORE_INIT_RSP 0x0002
+
+#define HAL_FLAG_PROP_RESET 0x0010
+#define HAL_FLAG_CLK_SET 0x0020
+#define HAL_FLAG_PROP_ONE_TIMER 0x0040
+
+#define HAL_FLAG_MASK_ALREADY 0x0F00
+#define HAL_FLAG_ALREADY_RESET 0x0100
+#define HAL_FLAG_ALREADY_INIT 0x0200
+
+#define HAL_FLAG_MASK_SYSTEM 0xF000
+#define HAL_FLAG_FORCE_FW_UPDATE 0x1000
+#define HAL_FLAG_NTF_TRNS_ERROR 0x2000
+#define HAL_FLAG_RETRY_TRNS 0x4000
+
+/***************************************
+ * Main information(context block)
+ ***************************************/
+typedef struct {
+ tNFC_HAL_CONFIG cfg;
+ eHAL_STATE state; /* HAL state */
+ tNFC_HAL_VS_INFO vs_info;
+
+ tOSI_TASK_HANDLER msg_task; /* HAL main task */
+ tOSI_QUEUE_HANDLER msg_q;
+ nfc_stack_callback_t* stack_cback; /* Callback for HAL event */
+ nfc_stack_data_callback_t* data_cback; /* Callback for data event */
+ tNFC_NCI_PKT* nci_last_pkt; /* last sent package */
+ tNFC_NCI_PKT* nci_fragment_pkt; /* Control msg flagmentation */
+ tOSI_TIMER_HANDLER nci_timer; /* Timer for NCI message */
+ tOSI_TIMER_HANDLER sleep_timer; /* Timer for NCI message */
+ int trans_dev; /* transport device */
+ int power_dev; /* power device */
+ tOSI_QUEUE_HANDLER nci_q;
+ tNFC_HAL_GRANT_CALLBACK* grant_cback;
+ unsigned int flag;
+ /* START [H16031401] */
+ uint8_t msg_event; /* receiving message event */
+ /* END [H16031401] */
+} tNFC_HAL_CB;
+
+/*************************************
+ * Global
+ *************************************/
+extern tNFC_HAL_CB nfc_hal_info;
+
+/*************************************
+ * NFC HAL API prototype
+ *************************************/
+int nfc_hal_init(void);
+void nfc_hal_deinit(void);
+int nfc_hal_open(nfc_stack_callback_t* p_cback,
+ nfc_stack_data_callback_t* p_data_cback);
+int nfc_hal_write(uint16_t data_len, const uint8_t* p_data);
+int nfc_hal_core_initialized(uint8_t* p_core_init_rsp_params);
+int nfc_hal_pre_discover();
+int nfc_hal_close();
+int nfc_hal_control_granted();
+int nfc_hal_power_cycle();
+// HIDL INfc 1.1
+int nfc_hal_factory_reset(void);
+int nfc_hal_closeForPowerOffCase(void);
+void nfc_hal_getVendorConfig(NfcConfig& config); // To-Do
+
+/*************************************
+ * NFC HAL functions.
+ *************************************/
+bool nfc_stack_cback(nfc_event_t event, nfc_status_t event_status);
+bool nfc_data_callback(tNFC_NCI_PKT* pkt);
+
+void nfc_hal_task(void);
+
+/* START - VTS */
+void nfc_hal_power_sm(tNFC_HAL_MSG* msg);
+/* END - VTS */
+void nfc_hal_grant_sm(tNFC_HAL_MSG* msg);
+void nfc_hal_service_sm(tNFC_HAL_MSG* msg);
+void nfc_hal_vs_sm(tNFC_HAL_MSG* msg);
+void nfc_hal_postinit_sm(tNFC_HAL_MSG* msg);
+void nfc_hal_open_sm(tNFC_HAL_MSG* msg);
+
+void setSleepTimeout(int option, uint32_t timeout);
+
+const char* event_to_string(uint8_t event);
+const char* state_to_string(eHAL_STATE state);
+
+// SM
+void hal_update_sleep_timer(void);
+int __send_to_device(uint8_t* data, size_t len);
+
+// FW
+void fw_force_update(void* param);
+int nfc_fw_send_data(uint8_t* data, int len);
+int fw_read_payload(tNFC_HAL_MSG* msg);
+
+// NCI
+int hal_nci_send(tNFC_NCI_PKT* pkt);
+void hal_nci_send_reset(void);
+void hal_nci_send_prop_fw_cfg(void);
+void hal_nci_send_clearLmrt(void);
+void nci_init_timeout(void* param);
+bool nfc_hal_prehandler(tNFC_NCI_PKT* pkt);
+int nci_read_payload(tNFC_HAL_MSG* msg);
+
+// TRACE
+void sec_nci_analyzer(tNFC_NCI_PKT* pkt);
+
+#endif // __NFC_SEC_HAL__