This commit is contained in:
rusefi 2017-03-22 08:45:01 -04:00
parent 1a721240c6
commit fb377895e6
7 changed files with 1387 additions and 0 deletions

View File

@ -0,0 +1,436 @@
/*
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 HAL_USBH_H_
#define HAL_USBH_H_
#include "hal.h"
#ifndef HAL_USBH_USE_FTDI
#define HAL_USBH_USE_FTDI FALSE
#endif
#ifndef HAL_USBH_USE_HUB
#define HAL_USBH_USE_HUB FALSE
#endif
#ifndef HAL_USBH_USE_MSD
#define HAL_USBH_USE_MSD FALSE
#endif
#ifndef HAL_USBH_USE_UVC
#define HAL_USBH_USE_UVC FALSE
#endif
#if (HAL_USE_USBH == TRUE) || defined(__DOXYGEN__)
#include "osal.h"
#include "usbh/list.h"
#include "usbh/defs.h"
/* TODO:
*
* - Integrate VBUS power switching functionality to the API.
*
*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
#if !HAL_USBH_USE_HUB
#define USBH_MAX_ADDRESSES 1
#else
#define USBH_MAX_ADDRESSES (HAL_USBHHUB_MAX_PORTS + 1)
#endif
enum usbh_status {
USBH_STATUS_STOPPED = 0,
USBH_STATUS_STARTED,
USBH_STATUS_SUSPENDED,
};
enum usbh_devstatus {
USBH_DEVSTATUS_DISCONNECTED = 0,
USBH_DEVSTATUS_ATTACHED,
USBH_DEVSTATUS_CONNECTED,
USBH_DEVSTATUS_DEFAULT,
USBH_DEVSTATUS_ADDRESS,
USBH_DEVSTATUS_CONFIGURED,
};
enum usbh_devspeed {
USBH_DEVSPEED_LOW = 0,
USBH_DEVSPEED_FULL,
USBH_DEVSPEED_HIGH,
};
enum usbh_epdir {
USBH_EPDIR_IN = 0x80,
USBH_EPDIR_OUT = 0
};
enum usbh_eptype {
USBH_EPTYPE_CTRL = 0,
USBH_EPTYPE_ISO = 1,
USBH_EPTYPE_BULK = 2,
USBH_EPTYPE_INT = 3,
};
enum usbh_epstatus {
USBH_EPSTATUS_UNINITIALIZED = 0,
USBH_EPSTATUS_CLOSED,
USBH_EPSTATUS_OPEN,
USBH_EPSTATUS_HALTED,
};
enum usbh_urbstatus {
USBH_URBSTATUS_UNINITIALIZED = 0,
USBH_URBSTATUS_INITIALIZED,
USBH_URBSTATUS_PENDING,
// USBH_URBSTATUS_QUEUED,
USBH_URBSTATUS_ERROR,
USBH_URBSTATUS_TIMEOUT,
USBH_URBSTATUS_CANCELLED,
USBH_URBSTATUS_STALL,
USBH_URBSTATUS_DISCONNECTED,
// USBH_URBSTATUS_EPCLOSED,
USBH_URBSTATUS_OK,
};
/*===========================================================================*/
/* Driver data structures and types. */
/*===========================================================================*/
/* forward declarations */
typedef struct USBHDriver USBHDriver;
typedef struct usbh_port usbh_port_t;
typedef struct usbh_device usbh_device_t;
typedef struct usbh_ep usbh_ep_t;
typedef struct usbh_urb usbh_urb_t;
typedef struct usbh_baseclassdriver usbh_baseclassdriver_t;
typedef struct usbh_classdriverinfo usbh_classdriverinfo_t;
#if HAL_USBH_USE_HUB
typedef struct USBHHubDriver USBHHubDriver;
#endif
/* typedefs */
typedef enum usbh_status usbh_status_t;
typedef enum usbh_devspeed usbh_devspeed_t;
typedef enum usbh_devstatus usbh_devstatus_t;
typedef enum usbh_epdir usbh_epdir_t;
typedef enum usbh_eptype usbh_eptype_t;
typedef enum usbh_epstatus usbh_epstatus_t;
typedef enum usbh_urbstatus usbh_urbstatus_t;
typedef uint16_t usbh_portstatus_t;
typedef uint16_t usbh_portcstatus_t;
typedef void (*usbh_completion_cb)(usbh_urb_t *);
/* include the low level driver; the required definitions are above */
#include "hal_usbh_lld.h"
#define USBH_DEFINE_BUFFER(type, name) USBH_LLD_DEFINE_BUFFER(type, name)
struct usbh_urb {
usbh_ep_t *ep;
void *userData;
usbh_completion_cb callback;
const void *setup_buff;
void *buff;
uint32_t requestedLength;
uint32_t actualLength;
usbh_urbstatus_t status;
thread_reference_t waitingThread;
thread_reference_t abortingThread;
/* Low level part */
_usbh_urb_ll_data
};
struct usbh_ep {
usbh_device_t *device;
usbh_ep_t *next;
usbh_epstatus_t status;
uint8_t address;
bool in;
usbh_eptype_t type;
uint16_t wMaxPacketSize;
uint8_t bInterval;
/* debug */
const char *name;
/* Low-level part */
_usbh_ep_ll_data
};
struct usbh_device {
USBHDriver *host; /* shortcut to host */
usbh_ep_t ctrl;
usbh_ep_t *endpoints;
usbh_baseclassdriver_t *drivers;
uint16_t langID0;
usbh_devstatus_t status;
usbh_devspeed_t speed;
USBH_DEFINE_BUFFER(usbh_device_descriptor_t, devDesc);
unsigned char align_bytes[2];
USBH_DEFINE_BUFFER(usbh_config_descriptor_t, basicConfigDesc);
uint8_t *fullConfigurationDescriptor;
uint8_t keepFullCfgDesc;
uint8_t address;
uint8_t bConfiguration;
/* Low level part */
_usbh_device_ll_data
};
struct usbh_port {
#if HAL_USBH_USE_HUB
USBHHubDriver *hub;
#endif
usbh_portstatus_t status;
usbh_portcstatus_t c_status;
usbh_port_t *next;
uint8_t number;
usbh_device_t device;
/* Low level part */
_usbh_port_ll_data
};
struct USBHDriver {
usbh_status_t status;
uint8_t address_bitmap[(USBH_MAX_ADDRESSES + 7) / 8];
usbh_port_t rootport;
#if HAL_USBH_USE_HUB
struct list_head hubs;
#endif
/* Low level part */
_usbhdriver_ll_data
#if USBH_DEBUG_ENABLE
/* debug */
uint8_t dbg_buff[USBH_DEBUG_BUFFER];
THD_WORKING_AREA(waDebug, 512);
input_queue_t iq;
#endif
};
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#if STM32_USBH_USE_OTG1
extern USBHDriver USBHD1;
#endif
#if STM32_USBH_USE_OTG2
extern USBHDriver USBHD2;
#endif
/*===========================================================================*/
/* Main driver API. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
/* Main functions */
void usbhObjectInit(USBHDriver *usbh);
void usbhInit(void);
void usbhStart(USBHDriver *usbh);
void usbhStop(USBHDriver *usbh);
void usbhSuspend(USBHDriver *usbh);
void usbhResume(USBHDriver *usbh);
/* Device-related */
#if USBH_DEBUG_ENABLE && USBH_DEBUG_ENABLE_INFO
void usbhDevicePrintInfo(usbh_device_t *dev);
void usbhDevicePrintConfiguration(const uint8_t *descriptor, uint16_t rem);
#else
# define usbhDevicePrintInfo(dev) do {} while(0)
# define usbhDevicePrintConfiguration(descriptor, rem) do {} while(0)
#endif
bool usbhDeviceReadString(usbh_device_t *dev, char *dest, uint8_t size,
uint8_t index, uint16_t langID);
static inline usbh_port_t *usbhDeviceGetPort(usbh_device_t *dev) {
return container_of(dev, usbh_port_t, device);
}
/* Synchronous API */
usbh_urbstatus_t usbhBulkTransfer(usbh_ep_t *ep,
void *data,
uint32_t len,
uint32_t *actual_len,
systime_t timeout);
usbh_urbstatus_t usbhControlRequest(usbh_device_t *dev,
uint8_t bmRequestType,
uint8_t bRequest,
uint16_t wValue,
uint16_t wIndex,
uint16_t wLength,
uint8_t *buff);
usbh_urbstatus_t usbhControlRequestExtended(usbh_device_t *dev,
const usbh_control_request_t *req,
uint8_t *buff,
uint32_t *actual_len,
systime_t timeout);
/* Standard request helpers */
bool usbhStdReqGetDeviceDescriptor(usbh_device_t *dev,
uint16_t wLength,
uint8_t *buf);
bool usbhStdReqGetConfigurationDescriptor(usbh_device_t *dev,
uint8_t index,
uint16_t wLength,
uint8_t *buf);
bool usbhStdReqGetStringDescriptor(usbh_device_t *dev,
uint8_t index,
uint16_t langID,
uint16_t wLength,
uint8_t *buf);
bool usbhStdReqSetInterface(usbh_device_t *dev,
uint8_t bInterfaceNumber,
uint8_t bAlternateSetting);
bool usbhStdReqGetInterface(usbh_device_t *dev,
uint8_t bInterfaceNumber,
uint8_t *bAlternateSetting);
/* Endpoint/pipe management */
void usbhEPObjectInit(usbh_ep_t *ep, usbh_device_t *dev, const usbh_endpoint_descriptor_t *desc);
static inline void usbhEPOpen(usbh_ep_t *ep) {
osalDbgCheck(ep != 0);
osalSysLock();
osalDbgAssert(ep->status == USBH_EPSTATUS_CLOSED, "invalid state");
usbh_lld_ep_open(ep);
ep->next = ep->device->endpoints;
ep->device->endpoints = ep;
osalSysUnlock();
}
static inline void usbhEPCloseS(usbh_ep_t *ep) {
osalDbgCheck(ep != 0);
osalDbgCheckClassS();
osalDbgAssert(ep->status != USBH_EPSTATUS_UNINITIALIZED, "invalid state");
if (ep->status == USBH_EPSTATUS_CLOSED) {
osalOsRescheduleS();
return;
}
usbh_lld_ep_close(ep);
}
static inline void usbhEPClose(usbh_ep_t *ep) {
osalSysLock();
usbhEPCloseS(ep);
osalSysUnlock();
}
static inline void usbhEPResetI(usbh_ep_t *ep) {
osalDbgCheckClassI();
osalDbgCheck(ep != NULL);
usbh_lld_epreset(ep);
}
static inline bool usbhEPIsPeriodic(usbh_ep_t *ep) {
osalDbgCheck(ep != NULL);
return (ep->type & 1) != 0;
}
static inline bool usbhURBIsBusy(usbh_urb_t *urb) {
osalDbgCheck(urb != NULL);
return (urb->status == USBH_URBSTATUS_PENDING);
}
static inline void usbhEPSetName(usbh_ep_t *ep, const char *name) {
ep->name = name;
}
/* URB management */
void usbhURBObjectInit(usbh_urb_t *urb, usbh_ep_t *ep, usbh_completion_cb callback,
void *user, void *buff, uint32_t len);
void usbhURBObjectResetI(usbh_urb_t *urb);
void usbhURBSubmitI(usbh_urb_t *urb);
bool usbhURBCancelI(usbh_urb_t *urb);
msg_t usbhURBSubmitAndWaitS(usbh_urb_t *urb, systime_t timeout);
void usbhURBCancelAndWaitS(usbh_urb_t *urb);
msg_t usbhURBWaitTimeoutS(usbh_urb_t *urb, systime_t timeout);
/* Main loop */
void usbhMainLoop(USBHDriver *usbh);
#ifdef __cplusplus
}
#endif
/*===========================================================================*/
/* Class driver definitions and API. */
/*===========================================================================*/
typedef struct usbh_classdriver_vmt usbh_classdriver_vmt_t;
struct usbh_classdriver_vmt {
usbh_baseclassdriver_t *(*load)(usbh_device_t *dev, const uint8_t *descriptor, uint16_t rem);
void (*unload)(usbh_baseclassdriver_t *drv);
};
struct usbh_classdriverinfo {
int16_t class;
int16_t subclass;
int16_t protocol;
const char *name;
const usbh_classdriver_vmt_t *vmt;
};
#define _usbh_base_classdriver_data \
const usbh_classdriverinfo_t *info; \
usbh_device_t *dev; \
usbh_baseclassdriver_t *next;
struct usbh_baseclassdriver {
_usbh_base_classdriver_data
};
/*===========================================================================*/
/* Helper functions. */
/*===========================================================================*/
#include <usbh/desciter.h> /* descriptor iterators */
#include <usbh/debug.h> /* debug */
#endif
#endif /* HAL_USBH_H_ */

View File

@ -0,0 +1,44 @@
/*
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_DEBUG_H_
#define USBH_DEBUG_H_
#include "hal_usbh.h"
#if HAL_USE_USBH
//TODO: Debug is only for USBHD1, make it generic.
#if USBH_DEBUG_ENABLE
void usbDbgPrintf(const char *fmt, ...);
void usbDbgPuts(const char *s);
void usbDbgInit(USBHDriver *host);
void usbDbgReset(void);
void usbDbgSystemHalted(void);
#else
#define usbDbgPrintf(fmt, ...) do {} while(0)
#define usbDbgPuts(s) do {} while(0)
#define usbDbgInit(host) do {} while(0)
#define usbDbgReset() do {} while(0)
#define usbDbgSystemHalted() do {} while(0)
#endif
#endif
#endif /* USBH_DEBUG_H_ */

View File

@ -0,0 +1,41 @@
#include <stdio.h>
#include <errno.h>
#include "osal.h"
#include "syscalls_cpp.hpp"
#ifdef __cplusplus
extern "C" {
#endif
void _exit(int status){
(void) status;
osalSysHalt("Unrealized");
while(TRUE){}
}
pid_t _getpid(void){
return 1;
}
#undef errno
extern int errno;
int _kill(int pid, int sig) {
(void)pid;
(void)sig;
errno = EINVAL;
return -1;
}
void _open_r(void){
return;
}
void __cxa_pure_virtual() {
osalSysHalt("Pure virtual function call.");
}
#ifdef __cplusplus
}
#endif

View File

@ -0,0 +1,13 @@
#ifndef SYSCALLS_CPP_HPP_
#define SYSCALLS_CPP_HPP_
/* The ABI requires a 32-bit type.*/
typedef int __guard;
int __cxa_guard_acquire(__guard *);
void __cxa_guard_release (__guard *);
void __cxa_guard_abort (__guard *);
void *__dso_handle = NULL;
#endif /* SYSCALLS_CPP_HPP_ */

View File

@ -0,0 +1,310 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
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 lcd3310.c
* @brief Nokia 3310 LCD interface module through SPI code.
*
* @addtogroup lcd3310
* @{
*/
#include "ch.h"
#include "hal.h"
#include "lcd3310.h"
/*===========================================================================*/
/* Driver local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver local variables and types. */
/*===========================================================================*/
const uint8_t Fonts8x5 [][LCD3310_FONT_X_SIZE] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, /* space */
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, /* ! */
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, /* " */
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, /* # */
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, /* $ */
{ 0xc4, 0xc8, 0x10, 0x26, 0x46 }, /* % */
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, /* & */
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, /* ' */
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, /* ( */
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, /* ) */
{ 0x14, 0x08, 0x3E, 0x08, 0x14 }, /* * */
{ 0x08, 0x08, 0x3E, 0x08, 0x08 }, /* + */
{ 0x00, 0x00, 0x50, 0x30, 0x00 }, /* , */
{ 0x10, 0x10, 0x10, 0x10, 0x10 }, /* - */
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, /* . */
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, /* / */
{ 0x3E, 0x51, 0x49, 0x45, 0x3E }, /* 0 */
{ 0x00, 0x42, 0x7F, 0x40, 0x00 }, /* 1 */
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, /* 2 */
{ 0x21, 0x41, 0x45, 0x4B, 0x31 }, /* 3 */
{ 0x18, 0x14, 0x12, 0x7F, 0x10 }, /* 4 */
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, /* 5 */
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 }, /* 6 */
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, /* 7 */
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, /* 8 */
{ 0x06, 0x49, 0x49, 0x29, 0x1E }, /* 9 */
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, /* : */
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, /* ; */
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, /* < */
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, /* = */
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, /* > */
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, /* ? */
{ 0x32, 0x49, 0x59, 0x51, 0x3E }, /* @ */
{ 0x7E, 0x11, 0x11, 0x11, 0x7E }, /* A */
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, /* B */
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, /* C */
{ 0x7F, 0x41, 0x41, 0x22, 0x1C }, /* D */
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, /* E */
{ 0x7F, 0x09, 0x09, 0x09, 0x01 }, /* F */
{ 0x3E, 0x41, 0x49, 0x49, 0x7A }, /* G */
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, /* H */
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, /* I */
{ 0x20, 0x40, 0x41, 0x3F, 0x01 }, /* J */
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, /* K */
{ 0x7F, 0x40, 0x40, 0x40, 0x40 }, /* L */
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F }, /* M */
{ 0x7F, 0x04, 0x08, 0x10, 0x7F }, /* N */
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, /* O */
{ 0x7F, 0x09, 0x09, 0x09, 0x06 }, /* P */
{ 0x3E, 0x41, 0x51, 0x21, 0x5E }, /* Q */
{ 0x7F, 0x09, 0x19, 0x29, 0x46 }, /* R */
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, /* S */
{ 0x01, 0x01, 0x7F, 0x01, 0x01 }, /* T */
{ 0x3F, 0x40, 0x40, 0x40, 0x3F }, /* U */
{ 0x1F, 0x20, 0x40, 0x20, 0x1F }, /* V */
{ 0x3F, 0x40, 0x38, 0x40, 0x3F }, /* W */
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, /* X */
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, /* Y */
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, /* Z */
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, /* [ */
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 }, /* \ */
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, /* ] */
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, /* ^ */
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, /* _ */
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, /* ' */
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, /* a */
{ 0x7F, 0x48, 0x44, 0x44, 0x38 }, /* b */
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, /* c */
{ 0x38, 0x44, 0x44, 0x48, 0x7F }, /* d */
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, /* e */
{ 0x08, 0x7E, 0x09, 0x01, 0x02 }, /* f */
{ 0x0C, 0x52, 0x52, 0x52, 0x3E }, /* g */
{ 0x7F, 0x08, 0x04, 0x04, 0x78 }, /* h */
{ 0x00, 0x44, 0x7D, 0x40, 0x00 }, /* i */
{ 0x20, 0x40, 0x44, 0x3D, 0x00 }, /* j */
{ 0x7F, 0x10, 0x28, 0x44, 0x00 }, /* k */
{ 0x00, 0x41, 0x7F, 0x40, 0x00 }, /* l */
{ 0x7C, 0x04, 0x18, 0x04, 0x78 }, /* m */
{ 0x7C, 0x08, 0x04, 0x04, 0x78 }, /* n */
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, /* o */
{ 0x7C, 0x14, 0x14, 0x14, 0x08 }, /* p */
{ 0x08, 0x14, 0x14, 0x18, 0x7C }, /* q */
{ 0x7C, 0x08, 0x04, 0x04, 0x08 }, /* r */
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, /* s */
{ 0x04, 0x3F, 0x44, 0x40, 0x20 }, /* t */
{ 0x3C, 0x40, 0x40, 0x20, 0x7C }, /* u */
{ 0x1C, 0x20, 0x40, 0x20, 0x1C }, /* v */
{ 0x3C, 0x40, 0x30, 0x40, 0x3C }, /* w */
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, /* x */
{ 0x0C, 0x50, 0x50, 0x50, 0x3C }, /* y */
{ 0x44, 0x64, 0x54, 0x4C, 0x44 }, /* z */
{ 0x00, 0x08, 0x36, 0x41, 0x00 }, /* { */
{ 0x00, 0x00, 0x7F, 0x00, 0x00 }, /* | */
{ 0x00, 0x41, 0x36, 0x08, 0x00 }, /* } */
};
/*===========================================================================*/
/* Driver local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Driver exported functions. */
/*===========================================================================*/
/**
* @brief LCD driver initialization.
* @pre The SPI interface must be initialized and the driver started.
*
* @param[in] spip pointer to the SPI interface
*
*/
void lcd3310Init(SPIDriver *spip) {
/* Reset LCD */
palClearPad(LCD3310_RES_PORT, LCD3310_RES_PIN);
chThdSleepMilliseconds(15);
palSetPad(LCD3310_RES_PORT, LCD3310_RES_PIN);
chThdSleepMilliseconds(15);
/* Send configuration commands to LCD */
lcd3310WriteByte(spip, 0x21, LCD3310_SEND_CMD); /* LCD extended commands */
lcd3310WriteByte(spip, 0xC8, LCD3310_SEND_CMD); /* Set LCD Vop (Contrast) */
lcd3310WriteByte(spip, 0x05, LCD3310_SEND_CMD); /* Set start line S6 to 1 TLS8204 */
lcd3310WriteByte(spip, 0x40, LCD3310_SEND_CMD); /* Set start line S[5:0] to 0x00 TLS8204 */
lcd3310WriteByte(spip, 0x12, LCD3310_SEND_CMD); /* LCD bias mode 1:68. */
lcd3310WriteByte(spip, 0x20, LCD3310_SEND_CMD); /* LCD standard Commands, horizontal addressing mode. */
lcd3310WriteByte(spip, 0x08, LCD3310_SEND_CMD); /* LCD blank */
lcd3310WriteByte(spip, 0x0C, LCD3310_SEND_CMD); /* LCD in normal mode. */
lcd3310Clear(spip); /* Clear LCD */
}
/**
* @brief Write byte to LCD driver.
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
* @param[in] data data to write
* @param[in] cd select between command or data
*/
void lcd3310WriteByte(SPIDriver *spip, uint8_t data, uint8_t cd) {
spiSelect(spip);
if(cd == LCD3310_SEND_DATA) {
palSetPad(LCD3310_DC_PORT, LCD3310_DC_PIN);
}
else {
palClearPad(LCD3310_DC_PORT, LCD3310_DC_PIN);
}
spiSend(spip, 1, &data); // change to normal spi send
spiUnselect(spip);
}
/**
* @brief Clear LCD
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
*/
void lcd3310Clear(SPIDriver *spip) { // ok
uint32_t i, j;
for (i = 0; i < LCD3310_Y_RES/LCD3310_FONT_Y_SIZE; i++) {
lcd3310SetPosXY(spip, 0, i);
for (j = 0; j < LCD3310_X_RES; j++)
lcd3310WriteByte(spip, 0x00, LCD3310_SEND_DATA);
}
}
/**
* @brief Set position
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
* @param[in] x column address in LCD DDRAM, 0 to 83
* @param[in] y page address in LCD DDRAM, 0 to 5
*/
void lcd3310SetPosXY(SPIDriver *spip, uint8_t x, uint8_t y) {
if (y > LCD3310_Y_RES/LCD3310_FONT_Y_SIZE) return;
if (x > LCD3310_X_RES) return;
lcd3310WriteByte(spip, 0x80 | x, LCD3310_SEND_CMD); /* Set x position */
lcd3310WriteByte(spip, 0x40 | y, LCD3310_SEND_CMD); /* Set y position */
}
/**
* @brief Write char
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
* @param[in] ch char
*/
void lcd3310WriteChar(SPIDriver *spip, uint8_t ch) {
uint8_t i;
for ( i = 0; i < LCD3310_FONT_X_SIZE; i++ ){
lcd3310WriteByte(spip, Fonts8x5[ch - 32][i], LCD3310_SEND_DATA);
}
}
/**
* @brief Set LCD contrast.
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
* @param[in] contrast LCD contrast value
*/
void lcd3310Contrast (SPIDriver *spip, uint8_t contrast) {
lcd3310WriteByte(spip, 0x21, LCD3310_SEND_CMD); /* LCD Extended Commands */
lcd3310WriteByte(spip, 0x80 | contrast, LCD3310_SEND_CMD); /* Set LCD Vop (Contrast) */
lcd3310WriteByte(spip, 0x20, LCD3310_SEND_CMD); /* LCD Standard Commands, horizontal addressing mode */
}
/**
* @brief Write text
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
* @param[in] strp pointer to text
*/
void lcd3310WriteText(SPIDriver *spip, const uint8_t * strp) {
while ( *strp ) {
lcd3310WriteChar(spip, *strp);
strp++;
}
}
/**
* @brief Rotate text
* @pre The LCD driver must be initialized.
*
* @param[in] spip pointer to the SPI interface
* @param[in] strp pointer to text
* @param[in] offset text offset
*/
void lcd3310RotateText(SPIDriver *spip, const uint8_t * strp, uint8_t offset) {
uint8_t i;
uint8_t n;
uint8_t m;
for(n = 0; strp[n] != '\0'; n++); /* Count number of char */
if (offset >= n)
return;
for (i = 0; i < LCD3310_X_RES/LCD3310_FONT_X_SIZE; i++) {
m = i + offset;
if ( m < n)
lcd3310WriteChar(spip, strp[m]);
else
lcd3310WriteChar(spip, strp[m - n]);
}
}
/** @} */

View File

@ -0,0 +1,54 @@
# List of the required lwIP files.
LWIP = ${CHIBIOS}/ext/lwip
LWBINDSRC = \
$(CHIBIOS)/os/various/lwip_bindings/lwipthread.c \
$(CHIBIOS)/os/various/lwip_bindings/arch/sys_arch.c
LWNETIFSRC = \
${LWIP}/src/netif/etharp.c
LWCORESRC = \
${LWIP}/src/core/dhcp.c \
${LWIP}/src/core/dns.c \
${LWIP}/src/core/init.c \
${LWIP}/src/core/mem.c \
${LWIP}/src/core/memp.c \
${LWIP}/src/core/netif.c \
${LWIP}/src/core/pbuf.c \
${LWIP}/src/core/raw.c \
${LWIP}/src/core/stats.c \
${LWIP}/src/core/sys.c \
${LWIP}/src/core/tcp.c \
${LWIP}/src/core/tcp_in.c \
${LWIP}/src/core/tcp_out.c \
${LWIP}/src/core/udp.c
LWIPV4SRC = \
${LWIP}/src/core/ipv4/autoip.c \
${LWIP}/src/core/ipv4/icmp.c \
${LWIP}/src/core/ipv4/igmp.c \
${LWIP}/src/core/ipv4/inet.c \
${LWIP}/src/core/ipv4/inet_chksum.c \
${LWIP}/src/core/ipv4/ip.c \
${LWIP}/src/core/ipv4/ip_addr.c \
${LWIP}/src/core/ipv4/ip_frag.c \
${LWIP}/src/core/def.c \
${LWIP}/src/core/timers.c
LWAPISRC = \
${LWIP}/src/api/api_lib.c \
${LWIP}/src/api/api_msg.c \
${LWIP}/src/api/err.c \
${LWIP}/src/api/netbuf.c \
${LWIP}/src/api/netdb.c \
${LWIP}/src/api/netifapi.c \
${LWIP}/src/api/sockets.c \
${LWIP}/src/api/tcpip.c
LWSRC = $(LWBINDSRC) $(LWNETIFSRC) $(LWCORESRC) $(LWIPV4SRC) $(LWAPISRC)
LWINC = \
$(CHIBIOS)/os/various/lwip_bindings \
${LWIP}/src/include \
${LWIP}/src/include/ipv4

View File

@ -0,0 +1,489 @@
*****************************************************************************
*** Files Organization ***
*****************************************************************************
--{root} - ChibiOS/RT directory.
+--readme.txt - This file.
+--documentation.html - Shortcut to the web documentation page.
+--license.txt - GPL license text.
+--demos/ - Demo projects, one directory per platform.
+--docs/ - Documentation.
| +--common/ - Documentation common build resources.
| +--hal/ - Builders for HAL.
| | +--Doxyfile_* - Doxygen project files (required for rebuild).
| | +--html/ - Local HTML documentation (after rebuild).
| | +--reports/ - Test reports.
| | +--rsc/ - Documentation resource files (required for rebuild).
| | +--src/ - Documentation source files (required for rebuild).
| | +--Doxyfile_* - Doxygen project files (required for rebuild).
| | +--index.html - Local documentation access (after rebuild).
| +--nil/ - Builders for NIL.
| | +--Doxyfile_* - Doxygen project files (required for rebuild).
| | +--html/ - Local HTML documentation (after rebuild).
| | +--reports/ - Test reports.
| | +--rsc/ - Documentation resource files (required for rebuild).
| | +--src/ - Documentation source files (required for rebuild).
| | +--Doxyfile_* - Doxygen project files (required for rebuild).
| | +--index.html - Local documentation access (after rebuild).
| +--rt/ - Builders for RT.
| | +--html/ - Local HTML documentation (after rebuild).
| | +--reports/ - Test reports.
| | +--rsc/ - Documentation resource files (required for rebuild).
| | +--src/ - Documentation source files (required for rebuild).
| | +--Doxyfile_* - Doxygen project files (required for rebuild).
| | +--index.html - Local documentation access (after rebuild).
+--ext/ - External libraries, not part of ChibiOS/RT.
+--os/ - ChibiOS components.
| +--hal/ - HAL component.
| | +--boards/ - HAL board support files.
| | +--dox/ - HAL documentation resources.
| | +--include/ - HAL high level headers.
| | +--lib/ - HAL libraries.
| | +--osal/ - HAL OSAL implementations.
| | +--src/ - HAL high level source.
| | +--ports/ - HAL ports.
| | +--templates/ - HAL driver template files.
| | +--osal/ - HAL OSAL templates.
| +--nil/ - NIL RTOS component.
| | +--dox/ - NIL documentation resources.
| | +--include/ - NIL high level headers.
| | +--src/ - NIL high level source.
| | +--ports/ - NIL ports.
| | +--templates/ - NIL port template files.
| +--rt/ - RT RTOS component.
| | +--dox/ - RT documentation resources.
| | +--include/ - RT high level headers.
| | +--src/ - RT high level source.
| | +--ports/ - RT ports.
| | +--templates/ - RT port template files.
| +--various/ - Various portable support files.
+--test/ - Kernel test suite source code.
| +--lib/ - Portable test engine.
| +--hal/ - HAL test suites.
| | +--testbuild/ - HAL build test and MISRA check.
| +--nil/ - NIL test suites.
| | +--testbuild/ - NIL build test and MISRA check.
| +--rt/ - RT test suites.
| | +--testbuild/ - RT build test and MISRA check.
| | +--coverage/ - RT code coverage project.
+--testhal/ - HAL integration test demos.
*****************************************************************************
*** Releases and Change Log ***
*****************************************************************************
*** 16.1.7 ***
- VAR: Fixed BYTE_ORDER redefined in lwip_bindings/arch/cc.h (bug #814).
- HAL: Fixed setting alternate mode in STM32 GPIOv3 and GPIOv3 drivers can fail
(bug #813).
- HAL: Fixed incorrect handling of shared ISRs in STM32 DMAv1 driver
(bug #812).
- HAL: Fixed protocol violation in usbDisableEndpointsI() API (bug #811).
- HAL: Fixed incorrect constants STM32_DAC1_CHx_DMA_CHN for STM32F7 (bug #810).
- HAL: Fixed redefined TIM in STM32F030 registry (bug #809).
- HAL: Fixed clock init in STM32F0x port which doesn't take in account
PLL_XTPRE and PREDIV_0 are hard-wired (bug #808).
*** 16.1.6 ***
- HAL: Fixed wrong initialization in ADC lld v3 (bug #807).
- HAL: Fixed wrong clock init in STM32F0 port ad added more error checks
(bug #806).
- HAL: Fixed misplaced else in STM32F0 port (bug #805).
- HAL: Fixed flash waiting state misconfiguration in STM32L4 port (bug #804).
- HAL: Added CR field to DAC configuration in STM32 port (bug #803).
- HAL: Fixed wrong initialization for DACD4 in STM32 port (bug #802).
- HAL: Fixed tab instead of space in DAC driver (bug #801).
- HAL: Fixed missing GPT and DAC in STM32F07/?9x mcuconf (bug #800).
- HAL: Fixed STM32 RTCv2 driver does not handle the DST bit (bug #799).
- HAL: Fixed MAC driver broken on STM32F107 (bug #798).
- VAR: Fixed missing const qualifier in local shell commands array (bug #797).
- VAR: Fixed compilation error in cmsis_os.h (bug #796).
- HAL: Fixed double empty lines in HAL (bug #794).
- RT: Fixed double empty lines in RT (bug #793).
- HAL: Fixed wrong entries in STM32L4 registry (bug #792).
- HAL: Fixed missing ARPE bit in CR1 initialization on STM32 GPT driver
(bug #791).
- HAL: Fixed wrong DMA definition for STM32F303x8 ADC (bug #790).
- VAR: Fixed GCC garbage collector discards code in syscalls.c (bug #789).
- HAL: Fixed Makefile dependencies not generated for .S files (bug #787).
- HAL: Fixed OTGv1 driver not functional on STM32L4 (bug #786).
- HAL: Fixed wrong bit offset in STM32F37x ADC_CR2_EXTSEL_SRC() macro
(bug #785).
- RT: Fixed tick-less mode can fail in RT for very large delays (bug #784).
- HAL: Fixed STM32L0xx CCIPR initialization (bug #783).
- HAL: Fixed STM32F105 port not compiling (bug #782).
- HAL: Fixed wrong registry for STM32F205xx and STM32F215xx port
(bug #780).
- HAL: Fixed wrong HSE checks and PLL2 enable switch in STM32F105 and
STM32F107 port (bug #779).
- HAL: Fixed wrong SRAM2_BASE in STM32F7xx port (bug #778)
(backported to 16.1.6).
- HAL: Added DAC configs in RT-STM32F051-DISCOVERY\mcuconf.h (bug #777).
- HAL: Fixed DAC driver not compiling on STM32F051 and some bitmasks related
to DAC disabling (bug #776).
- HAL: Fixed addition semicolon in cpp wrapper (bug #774).
- HAL: Fixed function gpt_lld_polled_delay() is broken on STM32 (bug #775).
- HAL: Fixed invalid output initialization for STM32 DACx channels 2
(bug #773).
- HAL: Fixed CAN inclusion path missing for STM32F107 (bug #772).
- HAL: Fixed extra brackets in STM32F0 registry (bug #771).
- HAL: Fixed STM32 CAN filters initialization problem (bug #770).
- HAL: Fixed wrong bit mask in STM32L0xx port (bug #769).
- HAL: Fixed potential wait states problem in STM32L4 initialization code
(bug #768).
- HAL: Fixed SDIO driver not compiling on STM32F446 devices (bug #767).
- HAL: Fixed error in STM32L4xx ST headers (bug #766).
- HAL: Fixed wrong check in win32 simulator serial driver (bug #765).
- HAL: Fixed dependency on RT in hal_usb.c (bug #764).
- HAL: Fixed wrong backup domain reset in STM32L4xx\hal_lld (bug #763).
*** 16.1.5 ***
- NEW: Added support for more Nucleo and Discovery boards.
- HAL: Board files regenerated using the latest version of the generator
plugin.
- HAL: Fixed wrong PWR configurations in STM32L4xx\hal_lld (bug #761).
- HAL: Fixed wrong comment in STM32L4xx\hal_lld (bug #760).
- HAL: Fixed wrong MSIRANGE management for STM32L4xx in function
stm32_clock_init() (bug #759).
- HAL: Fixed problem in USB driver when changing configuration (bug #757).
- HAL: Fixed bug in function usbDisableEndpointsI() (bug #756).
- HAL: Fixed wrong info in readme of LWIP related demos (bug #755).
- HAL: Fixed misconfiguration in STM32L4 Discovery board files
(bug #754).
- HAL: Fixed errors in documentation related to OTG peripheral switches
(bug #753).
- HAL: Fixed CMSIS function osThreadGetPriority() does not return correct
priority (bug #752).
- HAL: Fixed wrong conditional branches in _adc_isr_error_code (bug #751).
- HAL: Fixed bug in STM32/ADCv3 (bug #750).
- HAL: Fixed OPT settings and added board folder in STM32F4xx-USB_CDC demo
(bug #749).
- HAL: Fixed wrong comments in STM32F4xx GPT demo (bug #748).
- HAL: Fixed wrong comments and indents in STM32F7xx-GPT-ADC and
STM32L4-GPT-ADC demos (bug #747).
- HAL: Fixed wrong comments and indent in STM32F4xx and STM32F7xx
hal_lld.h (bug #746).
- HAL: Removed wrong SAI masks in STM32F4xx hal_lld.h (bug #745).
- HAL: Fixed wrong mask placement in STM32F4xx hal_lld.h (bug #744).
- HAL: Fixed wrong indent in STM32F4xx hal_lld.h (bug #743).
- HAL: Removed unused macros in STM32F7xx and STM32F4xx hal_lld.h (bug #742).
- HAL: Fixed Doxygen related macros in STM32F7xx, STM32L0xx and STM32L4xx
lld files (bug #741).
- HAL: Fixed bug in VREF enable/disable functions in ADCv3 driver
(bug #740).
- HAL: Fixed DAC driver not enabled for STM32F4x7 and STM32F4x9 devices
(bug #739).
- HAL: Fixed bug in interrupt handlers in STM32F4xx EXT driver (bug #738).
- HAL: Fixed clock enabling in STM32 ADCv3 (bug #737).
- HAL: Fixed missing SDC initialization in RT-STM32F103-OLIMEX_STM32_P103 demo
(bug #735).
- HAL: Fixed STM32 dac bug when using only channel 2 in direct mode (bug #734).
- HAL: Fixed PAL lines support not working for STM32 GPIOv1 (bug #730).
- RT: Fixed bug in chSchPreemption() function (bug #728).
- HAL: Fixed prescaler not initialized in STM32 ADCv1 (bug #725).
- HAL: Fixed missing DAC section in STM32F072 mcuconf.h files (bug #724).
*** 16.1.4 ***
- ALL: Startup files relicensed under Apache 2.0.
- RT: Added RT-STM32L476-DISCOVERY demo.
- HAL: Added more STM32L4xx testhal demos.
- HAL: Updated all STM32F476 mcuconf.h files.
- VAR: Fixed palSetMode glitching outputs (bug #723).
- VAR: Fixed error in STM32 PWM driver regarding channels 4 and 5 (bug #722).
- VAR: Fixed GCC 5.2 crashes while compiling ChibiOS (bug #718).
- HAL: Fixed wrong definition in STM32L4 ext_lld_isr.h (bug #717).
- HAL: Fixed wrong definitions in STM32F746 mcuconf.h files (bug #716)
- RT: Fixed wrong SysTick initialization in generic demos (bug #715).
- NIL: Fixed wrong SysTick initialization in generic demos (bug #715).
- HAL: Fixed usbStop does not resume threads suspended in synchronous calls
to usbTransmit (bug #714).
- VAR: Fixed state check in lwIP when SYS_LIGHTWEIGHT_PROT is disabled
(bug #713).
- RT: Fixed race condition in RT registry (bug #712).
- HAL: Fixed IAR warnings in ext_lld_isr.c (bug #711).
- HAL: Fixed build error caused by STM32 SPIv1 driver (bug #710).
- HAL: Fixed shift of signed constant causes warnings with IAR compiler
(bug #709).
- HAL: Fixed wrong RTCv2 settings for STM32L4 (bug #708).
- HAL: Fixed missing OTGv1 support for STM32L4 (bug #707).
- NIL: Fixed ARM errata 752419 (bug #706).
- RT: Fixed ARM errata 752419 (bug #706).
*** 16.1.3 ***
- HAL: Fixed unused variable in STM32 SPIv2 driver (bug #705).
- HAL: Fixed chDbgAssert() still called from STM32 SPIv1 driver (bug #704).
- HAL: Fixed broken demo for STM32F429 (bug #703).
- HAL: Fixed wrong macro definition for palWriteLine (bug #702).
- HAL: Fixed error is buffer queues (bug #701).
- HAL: Fixed typos in STM32F0 RCC enable/disable macros (bug #698).
- RT: Fixed useless call to chTMStartMeasurementX() in _thread_init()
(bug #697).
- VAR: Fixed missing time conversion in lwIP arch module (bug #696, again).
*** 16.1.2 ***
- VAR: Fixed missing time conversion in lwIP arch module (bug #696).
- HAL: Fixed incorrect handling of TIME_IMMEDIATE in the HAL buffer queues
(bug #695).
*** 16.1.1 ***
- NIL: NIL_CFG_USE_EVENTS not properly checked in NIL (bug #694).
- RT: Fixed ISR statistics are not updated from a critical zone in RT
(bug #693).
- NIL: Fixed NIL test suite calls I and S functions outside critical zone
(bug #692).
- NIL: Fixed protocol violation in NIL OSAL (bug #691).
- HAL: Fixed error in HAL buffer queues (bug #689).
- RT: Fixed tm_stop - best case bug (bug #688).
- RT: Several minor documentation/formatting-related fixes.
*** 16.1.0 ***
- RT: Added CodeWarrior compiler support to the e200 port.
- HAL: Added support for STM32F446.
- HAL: Introduced preliminary support for STM32F7xx devices.
- HAL: Introduced preliminary support for STM32L4xx devices.
- HAL: Introduced preliminary support for STM32L0xx devices.
- HAL: Increased performance of USBv1 and OTGv1 driver thanks to better
data copying code.
- HAL: Enhanced Serial-USB driver using the new buffers queues object.
- HAL: Simplified USB driver, queued API has been removed.
- HAL: Enhanced the CAN driver with I-class functions. Now it is possible
to exchange frames from ISRs.
- HAL: Added watchdog driver model (WDG) and STM32 implementation on IWDG.
- HAL: Added synchronous API and mutual exclusion to the UART driver.
- HAL: Added PAL driver for STM32L4xx GPIOv3 peripheral.
- HAL: Added I2S driver for STM32 SPIv2 peripheral.
- HAL: Added demos an- d board files for ST's Nucleo32 boards (F031, F042, F303).
- HAL: Added "lines" handling to PAL driver, lines are identifiers of both
ports and pins encoded in a single value. Added a set of macros
operating on lines.
- HAL: Merged the latest STM32F3xx CMSIS headers.
- HAL: Merged the latest STM32F2xx CMSIS headers and fixed the support
broken in 3.0.x.
- RT: Added new function chVTGetTimersStateI() returning the state of the
timers list.
- HAL: Now STM32 USARTv2 driver initializes the ISR vectors statically on
initialization. Disabling them was not necessary and added to
the code size.
- HAL: Added DMA channel selection on STM32F030xC devices.
- HAL: Added serial driver support for USART 3..6 on STM32F030xC devices.
- HAL: Merged the newest ST header files for STM32F1xx.
- HAL: Added support for differential mode to the STM32F3xx ADC driver.
- HAL: Experimental isochronous capability added to STM32 OTGv1 driver.
- HAL: Modified the serial-USB driver to reject write/read attempts if the
underlying USB is not in active state. In case of disconnection the
SDU driver broadcasts a CHN_DISCONNECTED event.
- HAL: Modified the USB driver to have a separate USB_SUSPENDED state, this
allows the application to detect if the USB is communicating or if
it is disconnected or powered down.
- HAL: Added wake-up and suspend events to the STM32 OTGv1 driver.
- HAL: STM32 USB/OTG buffers and queues do not more require to be aligned in
position and size.
- VAR: Improved GCC rules.ld, now it is possible to assign the heap to any
of the available RAM regions.
- HAL: STM32 GPT, ICU and PWM driver enhancements. Now it is possible to
suppress default ISRs by defining STM32_TIMx_SUPPRESS_ISR.
The application is now able to define custom handlers if required
or simply save space if the driver callbacks are not used.
Now the functions xxx_lld_serve_interrupts() have global scope, this
way custom ISRs can call them from outside the driver module.
- HAL: Added TIM units use cross-check in STM32 GPT, ICU, PWM and ST drivers,
now use collisions are explicitly reported.
- NIL: Added polled delays required to fix bug #629.
- HAL: Added support for I2C3 and I2C4 to the STM32 I2Cv2 I2C driver.
- HAL: Added support for SPI4...SPI6 to the STM32 SPIv2 SPI driver.
- HAL: Added support for UART4...UART8 to the STM32 UARTv2 UART driver.
- HAL: Added support for UART7 and UART8,LPUART1 to the STM32 UARTv2 serial
driver.
- HAL: STM32F3xx and STM32L4xx devices now share the same ADCv3 driver.
- HAL: STM32F2xx, STM32F4xx and STM32F7xx devices now share the same ADCv2
and DMAv2 drivers.
- HAL: STM32F0xx and STM32L0xx devices now share the same ADCv1 driver.
- HAL: STM32F0xx, STM32F1xx, STM32F3xx, STM32F37x, STM32L0xx and STM32L1xx
devices now share the same DMAv1 driver.
- HAL: New STM32 shared DMAv2 driver supporting channel selection and
data cache invalidation (F2, F4, F7).
- HAL: New STM32 shared DMAv1 driver supporting channel selection and fixing
the behavior with shared IRQs (F0, L0).
- HAL: New STM32 ADCv3 driver supporting middle STM32 devices (F3, L4).
- HAL: New STM32 ADCv2 driver supporting large STM32 devices (F2, F4, F7).
- HAL: New STM32 ADCv1 driver supporting small STM32 devices (F0, L0).
- HAL: Introduced support for TIM21 and TIM22 in STM32 ST driver.
- HAL: Updated STM32F0xx headers to STM32CubeF0 version 1.3.0. Added support
for STM32F030xC, STM32F070x6, STM32F070xB, STM32F091xC,
STM32F098xx devices.
- RT: Fixed ARM port enforcing THUMB mode (bug #687)(backported to 3.0.5).
- HAL: Fixed HAL drivers still calling RT functions (bug #686)(backported
to 3.0.5).
- HAL: Fixed chprintf() still calling RT functions (bug #684)(backported
to 3.0.5).
- HAL: Fixed STM32 ICU driver uses chSysLock and chSysUnlock (bug #681)
(backported to 3.0.4).
- HAL: Fixed wrong DMA priority assigned to STM32F3 ADC3&4 (bug #680)
(backported to 3.0.4 and 2.6.10).
- HAL: Fixed invalid DMA settings in STM32 DACv1 driver in dual mode
(bug #677)(backported to 3.0.4).
- HAL: Fixed usbStop() hangs in STM32 OTGv1 driver (bug #674)(backported
to 3.0.4 and 2.6.10).
- HAL: Fixed STM32 I2Cv2 driver fails on transfers greater than 255 bytes
(bug #673)(backported to 3.0.4).
- HAL: Fixed STM32 I2Cv2 DMA conflict (bug #671)(backported to 3.0.4).
- HAL: Fixed I2S clock selection not working in STM32F4xx HAL (bug #667)
(backported to 3.0.4 and 2.6.10).
- HAL: Fixed differences in STM32F3 ADC macro definitions (bug #665)
(backported to 3.0.3).
- HAL: Fixed RTC module loses day of week when converting (bug #664)
(backported to 3.0.3).
- HAL: Fixed STM32 USBv1 broken isochronous endpoints (bug #662)
(backported to 3.0.4).
- HAL: Fixed STM32 USBv1 wrong multiplier when calculating descriptor address
in BTABLE (bug #661)(backported to 3.0.4 and 2.6.10).
- HAL: Fixed STM32 USBv1 does not make use of BTABLE_ADDR define (bug #660)
(backported to 3.0.4 and 2.6.10).
- HAL: Fixed invalid class type for sdPutWouldBlock() and sdGetWouldBlock()
functions (bug #659)(backported to 3.0.3 and 2.6.10).
- HAL: Fixed STM32F0xx HAL missing MCOPRE support (bug #658).
- HAL: Fixed STM32L1xx HAL errors in comments (bug #657)(backported
to 3.0.3 and 2.6.10).
- HAL: Fixed STM32 USBv1 wrong buffer alignment (bug #656)(backported
to 3.0.3 and 2.6.10).
- HAL: Fixed wrong vector name for STM32F3xx EXTI33 (bug #655)(backported
to 3.0.3 and 2.6.10).
- HAL: Fixed nvicEnableVector broken for Cortex-M0 (bug #654)(backported
to 3.0.3).
- HAL: Fixed no demo for nucleo STM32F072RB board (bug #652).
- HAL: Fixed missing RCC and ISR definitions for STM32F0xx timers (bug #651)
(backported to 3.0.3 and 2.6.10).
- HAL: Fixed incorrect compiler check in STM32 RTCv1 driver (bug #650)
(backported to 3.0.3).
- HAL: Fixed incorrect case in path (bug #649).
- HAL: Fixed STM32F3xx HAL checking for non-existing macros (bug #648)
(backported to 3.0.3 and 2.6.10).
- HAL: Fixed error in STM32F030 EXT driver (bug #647)(backported to 3.0.3).
- RT: Fixed problem with chVTIsTimeWithinX() (bug #646)(backported to
3.0.3 and 2.6.10).
- VAR: Fixed _sbrk_r with incr == 0 should be valid (bug #645)(backported to
3.0.3 and 2.6.10).
- RT: Fixed issues in CMSIS RTOS interface (bug #644)(backported to 3.0.3).
- HAL: Fixed RT dependency in STM32 SDCv1 driver (bug #643)(backported
to 3.0.2).
- VAR: Fixed incorrect working area size in LwIP creation in demos (bug #642)
(backported to 3.0.2 and 2.6.10).
- HAL: Fixed error in hal_lld_f100.h checks (bug #641)(backported to 3.0.2
and 2.6.10).
- HAL: Fixed volatile variable issue in I/O queues, both RT and HAL (bug #640)
(backported to 3.0.2).
- HAL: Fixed wrong DMA assignment for I2C1 in STM32F302xC registry (bug #637)
(backported to 3.0.2).
- HAL: Fixed missing timers 5, 6, 7, 10 & 11 from STM32L1 HAL port (bug #636)
(backported to 3.0.2).
- VAR: Fixed CRT0_CALL_DESTRUCTORS not utilized in crt0_v7m.s (bug #635)
(backported to 3.0.2).
- HAL: Fixed wrong ld file in STM32F072xB USB CDC demo (bug #634)(backported
to 3.0.2).
- NIL: Fixed Wrong assertion in NIL chSemResetI() and NIL OSAL
osalThreadDequeueAllI() (bug #633)(backported to 3.0.2).
- RT: Fixed problem with RT mutexes involving priority inheritance (bug #632)
(backported to 3.0.2 and 2.6.10).
- HAL: Fixed HAL to RT dependency in STM32 DAC driver (bug #631)(backported
to 3.0.2).
- HAL: Fixed problem with STM32 I2S driver restart (bug #630)(backported
to 3.0.2).
- HAL: Fixed STM32F3xx ADC driver uses US2RTC directly (bug #629)(backported
to 3.0.2).
- HAL: Fixed CEC clock cannot be disabled on STM32F0xx (bug #628)
(backported to 3.0.1).
- VAR: Fixed lwIP arch code breaks with a 16-bit systick timer (bug #627)
(backported to 3.0.1).
- HAL: Fixed broken MAC driver for STM32F107 (bug #626)(backported to 3.0.1).
- NIL: Fixed missing configuration options from NIL PPC port (bug #625)
(backported to 3.0.1).
- HAL: Fixed wrong offset in STM32 DAC driver (bug #624)(backported to 3.0.1).
- HAL: Fixed crash on STM32F030x4/6 devices (bug #623)(backported to 3.0.1).
- HAL: Fixed duplicated doxygen tag in STM32F4xx hal_lld.h file (bug #621)
(backported to 3.0.1 and 2.6.9).
- HAL: Fixed STM32F042 registry error (bug #620)(backported to 3.0.1).
- HAL: Fixed wrong check in canReceive() (bug #619)(backported to 3.0.1
and 2.6.9).
- HAL: Fixed wrong EXTI[18] vector number on STM32F373 (bug #618)(backported
to 3.0.1 and 2.6.9).
- HAL: Fixed wrong check on STM32_LSE_ENABLED definition in STM32L1xx HAL port
(bug #617)(backported to 3.0.1 and 2.6.9).
- HAL: Fixed rtcConvertDateTimeToFAT() incorrect conversion (bug #615)
(backported to 3.0.1).
- HAL: Fixed missing UART7 and UART8 support on STM32F4xx family (bug #612).
- HAL: Fixed outdated CMSIS headers for STM32F1xx devices (bug #609).
- HAL: Fixed CAN errors (bug #387).
- HAL: Fixed USB HS ULPI Support (except board files because patch originally
targeted version 2.6.x)(bug #377).
*** 3.0.0 ***
- NEW: Added an initialization function to the lwIP bindings, now it is
sufficient to call lwipInit(NULL); in order to start the subsystem.
Demo updated.
- RT: Fixed compilation error in RT when registry is disabled (bug #614).
- NIL: Fixed OSAL_ST_MODE not defined in AVR port (bug #613).
- NIL: Fixed nilrtos redefinition of systime_t (bug #611).
- HAL: Fixed TIM2 wrongly classified as 32bits in STM32F1xx devices
(bug #610).
*** 3.0.0p6 ***
- HAL: Removed call to localtime_r() function for non-GNU compilers in
STM32F1xx RTC driver.
- DEM: Fixed the FatFS demo timeout, now it is expressed in milliseconds.
- DEM: Added -Wundef to all the demos and test programs in order to find
common error cases.
- NIL: Added INTC priorities check to the e200z port.
- RT: Added INTC priorities check to the e200z port.
- HAL: Added support for CAN in STM32F042/72 devices.
- HAL: Added support for extra DMA channels in STM32F072 devices.
- HAL: Modified the STM32 CAN driver to support unified IRQs.
- RT: SPE-related issue in e200z ports (bug #607).
- NIL: SPE-related issue in e200z ports (bug #607).
- HAL: Fixed dependency between STM32 MAC driver and RT (bug #606).
- HAL: Fixed wrong macro names in STM32F0xx HAL driver (bug #605).
- HAL: Fixed wrong check on ADC3 in STM32F3xx ADC driver (bug #604).
- HAL: Fixed wrong macro names in STM32F3xx HAL driver (bug #603).
- HAL: Fixed errors in STM32 OTGv1 driver (bug #601).
- DEM: Fixed missing paths in e200z demos (bug #600).
- HAL: Fixed error in platform_f105_f107.mk file (bug #599).
- HAL: Fixed issue in DMA drivers when channels share ISRs (bug #597).
*** 3.0.0p5 ***
- HAL: Added no-DMA mode to the STM32 I2Cv2 driver.
- HAL: Added DAC support to all STM32 sub-platforms, added another demo for
the STM32F3xx.
- HAL: Fixed STM32 USARTv1: incorrect txend2_cb callback behavior (bug #596).
- DEM: Fixed wrong comment in ARMCM4-STM32F401RE-NUCLEO demo (bug #595).
- HAL: Fixed STM32 SDC LLD driver initialization with Asserts disabled
(bug #594).
*** 3.0.0p4 ***
- NEW: Added no-DMA mode to STM32 I2Cv2 driver.
- BLD: New "smart build" mode added to makefiles, now only used files are
compiled.
- HAL: Change to the Serial_USB driver, now the INT endpoint is no more
mandatory.
- HAL: New DAC driver implementation for STM32F4xx.
- HAL: Fixed SDC STM32 driver broken in 50MHz mode (bug #592).
- HAL: Fixed STM32 RTC SSR Register Counts Down (bug #591).
- HAL: Fixed STM32 RTC PRER Register not being set in init (bug #590).
- HAL: Fixed STM32F334 does not have an EXT18 interrupt (bug #588).
- HAL: Fixed STM32L1xx USB is missing disconnect/connect macros (bug #587).
- HAL: Fixed wrong vector number for STM32L1xx USB (bug #586).
- HAL: Fixed spurious TC interrupt in STM32 UART (v1 and v2) driver (bug #584).
- HAL: Fixed invalid checks on STM32L1xx LSI and LSE clocks (bug #583).
- HAL: Fixed RCC CAN2 macros missing in STM32F1xx platform (bug #582).
- HAL: Fixed STM32 I2Cv2 driver issue (bug 581).
- BLD: Fixed ules.mk: adding "PRE_MAKE_ALL_RULE_HOOK" (bug #580).
- BLD: Fixed rules.mk should not explicitly depend on $(BUILDDIR) (bug #579).
*** 3.0.0p3 ***
- RT: Fixed tickless mode instability in RT (bug 577).
*** 3.0.0p2 ***
- HAL: Fixed instances of RT API in HAL drivers (bug 574).
- RT: Fixed system time overflow issue in tickless mode (bug 573).
- RT: Improvements to the IRQ_STORM applications.
*** 3.0.0p1 ***
- First 3.0.0 release, see release note 3.0.0.