aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/include/usbh/dev/ftdi.h
diff options
context:
space:
mode:
authorFabien Poussin <fabien.poussin@gmail.com>2016-02-15 23:34:25 +0100
committerFabien Poussin <fabien.poussin@gmail.com>2016-02-15 23:34:25 +0100
commit771feb098db86458340ab2665dfb23bef970ace6 (patch)
treef44218022dc6e96b669138c2bda65ad1f0f7e608 /os/hal/include/usbh/dev/ftdi.h
parent1548bca80f5af0fe3f79331ae5a3d51b18f1c077 (diff)
downloadChibiOS-Contrib-771feb098db86458340ab2665dfb23bef970ace6.tar.gz
ChibiOS-Contrib-771feb098db86458340ab2665dfb23bef970ace6.tar.bz2
ChibiOS-Contrib-771feb098db86458340ab2665dfb23bef970ace6.zip
USB-Host: Initial commit
Diffstat (limited to 'os/hal/include/usbh/dev/ftdi.h')
-rw-r--r--os/hal/include/usbh/dev/ftdi.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/os/hal/include/usbh/dev/ftdi.h b/os/hal/include/usbh/dev/ftdi.h
new file mode 100644
index 0000000..678a521
--- /dev/null
+++ b/os/hal/include/usbh/dev/ftdi.h
@@ -0,0 +1,154 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ Copyright (C) 2015 Diego Ismirlian, TISA, (dismirlian (at) google's mail)
+
+ 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 USBH_FTDI_H_
+#define USBH_FTDI_H_
+
+#include "usbh.h"
+
+#if HAL_USE_USBH && HAL_USBH_USE_FTDI
+
+/*===========================================================================*/
+/* Driver pre-compile time settings. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+#define USBHFTDI_FRAMING_DATABITS_7 (0x7 << 0)
+#define USBHFTDI_FRAMING_DATABITS_8 (0x8 << 0)
+#define USBHFTDI_FRAMING_PARITY_NONE (0x0 << 8)
+#define USBHFTDI_FRAMING_PARITY_NONE (0x0 << 8)
+#define USBHFTDI_FRAMING_PARITY_ODD (0x1 << 8)
+#define USBHFTDI_FRAMING_PARITY_EVEN (0x2 << 8)
+#define USBHFTDI_FRAMING_PARITY_MARK (0x3 << 8)
+#define USBHFTDI_FRAMING_PARITY_SPACE (0x4 << 8)
+#define USBHFTDI_FRAMING_STOP_BITS_1 (0x0 << 11)
+#define USBHFTDI_FRAMING_STOP_BITS_15 (0x1 << 11)
+#define USBHFTDI_FRAMING_STOP_BITS_2 (0x2 << 11)
+
+#define USBHFTDI_HANDSHAKE_NONE (0x0)
+#define USBHFTDI_HANDSHAKE_RTS_CTS (0x1)
+#define USBHFTDI_HANDSHAKE_DTR_DSR (0x2)
+#define USBHFTDI_HANDSHAKE_XON_XOFF (0x4)
+
+
+
+/*===========================================================================*/
+/* Driver data structures and types. */
+/*===========================================================================*/
+typedef struct {
+ uint32_t speed;
+ uint16_t framing;
+ uint8_t handshake;
+ uint8_t xon_character;
+ uint8_t xoff_character;
+} USBHFTDIPortConfig;
+
+typedef enum {
+ USBHFTDI_TYPE_A,
+ USBHFTDI_TYPE_B,
+ USBHFTDI_TYPE_H,
+} usbhftdi_type_t;
+
+typedef enum {
+ USBHFTDIP_STATE_UNINIT = 0,
+ USBHFTDIP_STATE_STOP = 1,
+ USBHFTDIP_STATE_ACTIVE = 2,
+ USBHFTDIP_STATE_READY = 3
+} usbhftdip_state_t;
+
+
+#define _ftdi_port_driver_methods \
+ _base_asynchronous_channel_methods
+
+struct FTDIPortDriverVMT {
+ _ftdi_port_driver_methods
+};
+
+typedef struct USBHFTDIPortDriver USBHFTDIPortDriver;
+typedef struct USBHFTDIDriver USBHFTDIDriver;
+
+struct USBHFTDIPortDriver {
+ /* inherited from abstract asyncrhonous channel driver */
+ const struct FTDIPortDriverVMT *vmt;
+ _base_asynchronous_channel_data
+
+ USBHFTDIDriver *ftdip;
+
+ usbhftdip_state_t state;
+
+ usbh_ep_t epin;
+ usbh_urb_t iq_urb;
+ threads_queue_t iq_waiting;
+ uint32_t iq_counter;
+ USBH_DEFINE_BUFFER(uint8_t, iq_buff[64]);
+ uint8_t *iq_ptr;
+
+
+ usbh_ep_t epout;
+ usbh_urb_t oq_urb;
+ threads_queue_t oq_waiting;
+ uint32_t oq_counter;
+ USBH_DEFINE_BUFFER(uint8_t, oq_buff[64]);
+ uint8_t *oq_ptr;
+
+ virtual_timer_t vt;
+ uint8_t ifnum;
+
+ USBHFTDIPortDriver *next;
+};
+
+typedef struct USBHFTDIDriver {
+ /* inherited from abstract class driver */
+ _usbh_base_classdriver_data
+
+ usbhftdi_type_t type;
+ USBHFTDIPortDriver *ports;
+
+ mutex_t mtx;
+} USBHFTDIDriver;
+
+/*===========================================================================*/
+/* Driver macros. */
+/*===========================================================================*/
+
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+extern USBHFTDIDriver USBHFTDID[HAL_USBHFTDI_MAX_INSTANCES];
+extern USBHFTDIPortDriver FTDIPD[HAL_USBHFTDI_MAX_PORTS];
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /* FTDI device driver */
+ void usbhftdiObjectInit(USBHFTDIDriver *ftdip);
+
+ /* FTDI port driver */
+ void usbhftdipObjectInit(USBHFTDIPortDriver *ftdipp);
+ void usbhftdipStart(USBHFTDIPortDriver *ftdipp, const USBHFTDIPortConfig *config);
+ void usbhftdipStop(USBHFTDIPortDriver *ftdipp);
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+
+#endif /* USBH_FTDI_H_ */