1 /* Copyright 2016-present Samsung Electronics Co., Ltd. and other contributors
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
17 #ifndef IOTJS_MODULE_SPI_H
18 #define IOTJS_MODULE_SPI_H
20 #include "iotjs_def.h"
21 #include "iotjs_module_buffer.h"
22 #include "iotjs_objectwrap.h"
23 #include "iotjs_reqwrap.h"
44 typedef enum { kSpiOrderMsb, kSpiOrderLsb } SpiOrder;
48 iotjs_jobjectwrap_t jobjectwrap;
49 iotjs_string_t device;
53 SpiChipSelect chip_select;
55 uint8_t bits_per_word;
65 } IOTJS_VALIDATED_STRUCT(iotjs_spi_t);
71 } iotjs_spi_reqdata_t;
75 iotjs_reqwrap_t reqwrap;
77 iotjs_spi_reqdata_t req_data;
78 iotjs_spi_t* spi_instance;
79 } IOTJS_VALIDATED_STRUCT(iotjs_spi_reqwrap_t);
82 #define THIS iotjs_spi_reqwrap_t* spi_reqwrap
84 iotjs_spi_reqwrap_t* iotjs_spi_reqwrap_from_request(uv_work_t* req);
85 iotjs_spi_reqdata_t* iotjs_spi_reqwrap_data(THIS);
87 iotjs_spi_t* iotjs_spi_instance_from_reqwrap(THIS);
92 #define SPI_WORKER_INIT \
93 iotjs_spi_reqwrap_t* req_wrap = iotjs_spi_reqwrap_from_request(work_req); \
94 iotjs_spi_reqdata_t* req_data = iotjs_spi_reqwrap_data(req_wrap); \
95 iotjs_spi_t* spi = iotjs_spi_instance_from_reqwrap(req_wrap);
98 bool iotjs_spi_transfer(iotjs_spi_t* spi);
99 bool iotjs_spi_close(iotjs_spi_t* spi);
101 void iotjs_spi_open_worker(uv_work_t* work_req);
104 #endif /* IOTJS_MODULE_SPI_H */