parent
db61810f98
commit
ecc565aa3f
46 changed files with 7467 additions and 428 deletions
@ -0,0 +1,6 @@ |
||||
.PHONY: all |
||||
|
||||
# TODO: Add a global build system to openpilot
|
||||
all: |
||||
cd /data/openpilot/selfdrive && PYTHONPATH=/data/openpilot PREPAREONLY=1 /data/openpilot/selfdrive/manager.py
|
||||
|
@ -0,0 +1,148 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f2xx_hal_def.h |
||||
* @author MCD Application Team |
||||
* @version V1.0.1 |
||||
* @date 25-March-2014 |
||||
* @brief This file contains HAL common defines, enumeration, macros and
|
||||
* structures definitions.
|
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F2xx_HAL_DEF |
||||
#define __STM32F2xx_HAL_DEF |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f2xx.h" |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
|
||||
/**
|
||||
* @brief HAL Status structures definition
|
||||
*/
|
||||
typedef enum
|
||||
{ |
||||
HAL_OK = 0x00, |
||||
HAL_ERROR = 0x01, |
||||
HAL_BUSY = 0x02, |
||||
HAL_TIMEOUT = 0x03 |
||||
} HAL_StatusTypeDef; |
||||
|
||||
/**
|
||||
* @brief HAL Lock structures definition
|
||||
*/ |
||||
typedef enum
|
||||
{ |
||||
HAL_UNLOCKED = 0x00, |
||||
HAL_LOCKED = 0x01
|
||||
} HAL_LockTypeDef; |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
#ifndef NULL |
||||
#define NULL (void *) 0 |
||||
#endif |
||||
|
||||
#define HAL_MAX_DELAY 0xFFFFFFFF |
||||
|
||||
#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != RESET) |
||||
#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == RESET) |
||||
|
||||
#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE_) \ |
||||
do{ \
|
||||
(__HANDLE__)->__PPP_DMA_FIELD_ = &(__DMA_HANDLE_); \
|
||||
(__DMA_HANDLE_).Parent = (__HANDLE__); \
|
||||
} while(0) |
||||
|
||||
#if (USE_RTOS == 1) |
||||
/* Reserved for future use */ |
||||
#else |
||||
#define __HAL_LOCK(__HANDLE__) \ |
||||
do{ \
|
||||
if((__HANDLE__)->Lock == HAL_LOCKED) \
|
||||
{ \
|
||||
return HAL_BUSY; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
(__HANDLE__)->Lock = HAL_LOCKED; \
|
||||
} \
|
||||
}while (0) |
||||
|
||||
#define __HAL_UNLOCK(__HANDLE__) \ |
||||
do{ \
|
||||
(__HANDLE__)->Lock = HAL_UNLOCKED; \
|
||||
}while (0) |
||||
#endif /* USE_RTOS */ |
||||
|
||||
#if defined ( __GNUC__ ) |
||||
#ifndef __weak |
||||
#define __weak __attribute__((weak)) |
||||
#endif /* __weak */ |
||||
#ifndef __packed |
||||
#define __packed __attribute__((__packed__)) |
||||
#endif /* __packed */ |
||||
#endif /* __GNUC__ */ |
||||
|
||||
|
||||
/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ |
||||
#if defined (__GNUC__) /* GNU Compiler */ |
||||
#ifndef __ALIGN_END |
||||
#define __ALIGN_END __attribute__ ((aligned (4))) |
||||
#endif /* __ALIGN_END */ |
||||
#ifndef __ALIGN_BEGIN |
||||
#define __ALIGN_BEGIN |
||||
#endif /* __ALIGN_BEGIN */ |
||||
#else |
||||
#ifndef __ALIGN_END |
||||
#define __ALIGN_END |
||||
#endif /* __ALIGN_END */ |
||||
#ifndef __ALIGN_BEGIN |
||||
#if defined (__CC_ARM) /* ARM Compiler */ |
||||
#define __ALIGN_BEGIN __align(4) |
||||
#elif defined (__ICCARM__) /* IAR Compiler */ |
||||
#define __ALIGN_BEGIN |
||||
#elif defined (__TASKING__) /* TASKING Compiler */ |
||||
#define __ALIGN_BEGIN __align(4) |
||||
#endif /* __CC_ARM */ |
||||
#endif /* __ALIGN_BEGIN */ |
||||
#endif /* __GNUC__ */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* ___STM32F2xx_HAL_DEF */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,236 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f2xx_hal_gpio_ex.h |
||||
* @author MCD Application Team |
||||
* @version V1.0.1 |
||||
* @date 25-March-2014 |
||||
* @brief Header file of GPIO HAL Extension module. |
||||
****************************************************************************** |
||||
* @attention
|
||||
* |
||||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F2xx_HAL_GPIO_EX_H |
||||
#define __STM32F2xx_HAL_GPIO_EX_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f2xx_hal_def.h" |
||||
|
||||
/** @addtogroup STM32F2xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup GPIO
|
||||
* @{ |
||||
*/
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
|
||||
/** @defgroup GPIO_Exported_Constants
|
||||
* @{ |
||||
*/
|
||||
|
||||
/** @defgroup GPIO_Alternat_function_selection
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief AF 0 selection
|
||||
*/
|
||||
#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ |
||||
#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ |
||||
#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ |
||||
#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ |
||||
#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 1 selection
|
||||
*/
|
||||
#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ |
||||
#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 2 selection
|
||||
*/
|
||||
#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ |
||||
#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ |
||||
#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 3 selection
|
||||
*/
|
||||
#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ |
||||
#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ |
||||
#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ |
||||
#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 4 selection
|
||||
*/
|
||||
#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ |
||||
#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ |
||||
#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 5 selection
|
||||
*/
|
||||
#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ |
||||
#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ |
||||
/**
|
||||
* @brief AF 6 selection
|
||||
*/
|
||||
#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 7 selection
|
||||
*/
|
||||
#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ |
||||
#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ |
||||
#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 8 selection
|
||||
*/
|
||||
#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ |
||||
#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ |
||||
#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 9 selection
|
||||
*/
|
||||
#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ |
||||
#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ |
||||
#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ |
||||
#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ |
||||
#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 10 selection
|
||||
*/
|
||||
#define GPIO_AF10_OTG_FS ((uint8_t)0xA) /* OTG_FS Alternate Function mapping */ |
||||
#define GPIO_AF10_OTG_HS ((uint8_t)0xA) /* OTG_HS Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 11 selection
|
||||
*/
|
||||
#if defined(STM32F207xx) || defined(STM32F217xx) |
||||
#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ |
||||
#endif /* STM32F207xx || STM32F217xx */ |
||||
|
||||
/**
|
||||
* @brief AF 12 selection
|
||||
*/
|
||||
#define GPIO_AF12_FSMC ((uint8_t)0xC) /* FSMC Alternate Function mapping */ |
||||
#define GPIO_AF12_OTG_HS_FS ((uint8_t)0xC) /* OTG HS configured in FS, Alternate Function mapping */ |
||||
#define GPIO_AF12_SDIO ((uint8_t)0xC) /* SDIO Alternate Function mapping */ |
||||
|
||||
/**
|
||||
* @brief AF 13 selection
|
||||
*/
|
||||
#if defined(STM32F207xx) || defined(STM32F217xx) |
||||
#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ |
||||
#endif /* STM32F207xx || STM32F217xx */ |
||||
|
||||
/**
|
||||
* @brief AF 15 selection
|
||||
*/
|
||||
#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ |
||||
|
||||
#if defined(STM32F207xx) || defined(STM32F217xx) |
||||
#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ |
||||
((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \
|
||||
((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \
|
||||
((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \
|
||||
((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \
|
||||
((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \
|
||||
((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \
|
||||
((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \
|
||||
((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \
|
||||
((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \
|
||||
((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \
|
||||
((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \
|
||||
((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \
|
||||
((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \
|
||||
((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \
|
||||
((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \
|
||||
((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \
|
||||
((AF) == GPIO_AF12_FSMC) || ((AF) == GPIO_AF15_EVENTOUT)) |
||||
#else /* STM32F207xx || STM32F217xx */ |
||||
#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ |
||||
((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \
|
||||
((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \
|
||||
((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \
|
||||
((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \
|
||||
((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \
|
||||
((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \
|
||||
((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \
|
||||
((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \
|
||||
((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \
|
||||
((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \
|
||||
((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \
|
||||
((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \
|
||||
((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \
|
||||
((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \
|
||||
((AF) == GPIO_AF12_OTG_HS_FS) || ((AF) == GPIO_AF12_SDIO) || \
|
||||
((AF) == GPIO_AF12_FSMC) || ((AF) == GPIO_AF15_EVENTOUT)) |
||||
#endif /* STM32F207xx || STM32F217xx */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
/**
|
||||
* @} |
||||
*/
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32F2xx_HAL_GPIO_EX_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,23 @@ |
||||
void spi_init() { |
||||
puts("SPI init\n"); |
||||
SPI1->CR1 = SPI_CR1_SPE; |
||||
SPI1->CR2 = SPI_CR2_RXNEIE | SPI_CR2_ERRIE | SPI_CR2_TXEIE; |
||||
} |
||||
|
||||
void spi_tx_dma(void *addr, int len) { |
||||
// disable DMA
|
||||
SPI1->CR2 &= ~SPI_CR2_TXDMAEN; |
||||
DMA2_Stream3->CR &= ~DMA_SxCR_EN; |
||||
|
||||
// DMA2, stream 3, channel 3
|
||||
DMA2_Stream3->M0AR = addr; |
||||
DMA2_Stream3->NDTR = len; |
||||
DMA2_Stream3->PAR = &(SPI1->DR); |
||||
|
||||
// channel3, increment memory, memory -> periph, enable
|
||||
DMA2_Stream3->CR = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0 | DMA_SxCR_EN; |
||||
DMA2_Stream3->CR |= DMA_SxCR_TCIE; |
||||
|
||||
SPI1->CR2 |= SPI_CR2_TXDMAEN; |
||||
} |
||||
|
@ -0,0 +1,337 @@ |
||||
#include "car.capnp.h" |
||||
/* AUTO GENERATED - DO NOT EDIT */ |
||||
|
||||
cereal_CarState_ptr cereal_new_CarState(struct capn_segment *s) { |
||||
cereal_CarState_ptr p; |
||||
p.p = capn_new_struct(s, 24, 5); |
||||
return p; |
||||
} |
||||
cereal_CarState_list cereal_new_CarState_list(struct capn_segment *s, int len) { |
||||
cereal_CarState_list p; |
||||
p.p = capn_new_list(s, len, 24, 5); |
||||
return p; |
||||
} |
||||
void cereal_read_CarState(struct cereal_CarState *s, cereal_CarState_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->errors.p = capn_getp(p.p, 0, 0); |
||||
s->vEgo = capn_to_f32(capn_read32(p.p, 0)); |
||||
s->wheelSpeeds.p = capn_getp(p.p, 1, 0); |
||||
s->gas = capn_to_f32(capn_read32(p.p, 4)); |
||||
s->gasPressed = (capn_read8(p.p, 8) & 1) != 0; |
||||
s->brake = capn_to_f32(capn_read32(p.p, 12)); |
||||
s->brakePressed = (capn_read8(p.p, 8) & 2) != 0; |
||||
s->steeringAngle = capn_to_f32(capn_read32(p.p, 16)); |
||||
s->steeringTorque = capn_to_f32(capn_read32(p.p, 20)); |
||||
s->steeringPressed = (capn_read8(p.p, 8) & 4) != 0; |
||||
s->cruiseState.p = capn_getp(p.p, 2, 0); |
||||
s->buttonEvents.p = capn_getp(p.p, 3, 0); |
||||
s->canMonoTimes.p = capn_getp(p.p, 4, 0); |
||||
} |
||||
void cereal_write_CarState(const struct cereal_CarState *s, cereal_CarState_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_setp(p.p, 0, s->errors.p); |
||||
capn_write32(p.p, 0, capn_from_f32(s->vEgo)); |
||||
capn_setp(p.p, 1, s->wheelSpeeds.p); |
||||
capn_write32(p.p, 4, capn_from_f32(s->gas)); |
||||
capn_write1(p.p, 64, s->gasPressed != 0); |
||||
capn_write32(p.p, 12, capn_from_f32(s->brake)); |
||||
capn_write1(p.p, 65, s->brakePressed != 0); |
||||
capn_write32(p.p, 16, capn_from_f32(s->steeringAngle)); |
||||
capn_write32(p.p, 20, capn_from_f32(s->steeringTorque)); |
||||
capn_write1(p.p, 66, s->steeringPressed != 0); |
||||
capn_setp(p.p, 2, s->cruiseState.p); |
||||
capn_setp(p.p, 3, s->buttonEvents.p); |
||||
capn_setp(p.p, 4, s->canMonoTimes.p); |
||||
} |
||||
void cereal_get_CarState(struct cereal_CarState *s, cereal_CarState_list l, int i) { |
||||
cereal_CarState_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarState(s, p); |
||||
} |
||||
void cereal_set_CarState(const struct cereal_CarState *s, cereal_CarState_list l, int i) { |
||||
cereal_CarState_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarState(s, p); |
||||
} |
||||
|
||||
cereal_CarState_WheelSpeeds_ptr cereal_new_CarState_WheelSpeeds(struct capn_segment *s) { |
||||
cereal_CarState_WheelSpeeds_ptr p; |
||||
p.p = capn_new_struct(s, 16, 0); |
||||
return p; |
||||
} |
||||
cereal_CarState_WheelSpeeds_list cereal_new_CarState_WheelSpeeds_list(struct capn_segment *s, int len) { |
||||
cereal_CarState_WheelSpeeds_list p; |
||||
p.p = capn_new_list(s, len, 16, 0); |
||||
return p; |
||||
} |
||||
void cereal_read_CarState_WheelSpeeds(struct cereal_CarState_WheelSpeeds *s, cereal_CarState_WheelSpeeds_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->fl = capn_to_f32(capn_read32(p.p, 0)); |
||||
s->fr = capn_to_f32(capn_read32(p.p, 4)); |
||||
s->rl = capn_to_f32(capn_read32(p.p, 8)); |
||||
s->rr = capn_to_f32(capn_read32(p.p, 12)); |
||||
} |
||||
void cereal_write_CarState_WheelSpeeds(const struct cereal_CarState_WheelSpeeds *s, cereal_CarState_WheelSpeeds_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write32(p.p, 0, capn_from_f32(s->fl)); |
||||
capn_write32(p.p, 4, capn_from_f32(s->fr)); |
||||
capn_write32(p.p, 8, capn_from_f32(s->rl)); |
||||
capn_write32(p.p, 12, capn_from_f32(s->rr)); |
||||
} |
||||
void cereal_get_CarState_WheelSpeeds(struct cereal_CarState_WheelSpeeds *s, cereal_CarState_WheelSpeeds_list l, int i) { |
||||
cereal_CarState_WheelSpeeds_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarState_WheelSpeeds(s, p); |
||||
} |
||||
void cereal_set_CarState_WheelSpeeds(const struct cereal_CarState_WheelSpeeds *s, cereal_CarState_WheelSpeeds_list l, int i) { |
||||
cereal_CarState_WheelSpeeds_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarState_WheelSpeeds(s, p); |
||||
} |
||||
|
||||
cereal_CarState_CruiseState_ptr cereal_new_CarState_CruiseState(struct capn_segment *s) { |
||||
cereal_CarState_CruiseState_ptr p; |
||||
p.p = capn_new_struct(s, 8, 0); |
||||
return p; |
||||
} |
||||
cereal_CarState_CruiseState_list cereal_new_CarState_CruiseState_list(struct capn_segment *s, int len) { |
||||
cereal_CarState_CruiseState_list p; |
||||
p.p = capn_new_list(s, len, 8, 0); |
||||
return p; |
||||
} |
||||
void cereal_read_CarState_CruiseState(struct cereal_CarState_CruiseState *s, cereal_CarState_CruiseState_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->enabled = (capn_read8(p.p, 0) & 1) != 0; |
||||
s->speed = capn_to_f32(capn_read32(p.p, 4)); |
||||
} |
||||
void cereal_write_CarState_CruiseState(const struct cereal_CarState_CruiseState *s, cereal_CarState_CruiseState_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write1(p.p, 0, s->enabled != 0); |
||||
capn_write32(p.p, 4, capn_from_f32(s->speed)); |
||||
} |
||||
void cereal_get_CarState_CruiseState(struct cereal_CarState_CruiseState *s, cereal_CarState_CruiseState_list l, int i) { |
||||
cereal_CarState_CruiseState_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarState_CruiseState(s, p); |
||||
} |
||||
void cereal_set_CarState_CruiseState(const struct cereal_CarState_CruiseState *s, cereal_CarState_CruiseState_list l, int i) { |
||||
cereal_CarState_CruiseState_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarState_CruiseState(s, p); |
||||
} |
||||
|
||||
cereal_CarState_ButtonEvent_ptr cereal_new_CarState_ButtonEvent(struct capn_segment *s) { |
||||
cereal_CarState_ButtonEvent_ptr p; |
||||
p.p = capn_new_struct(s, 8, 0); |
||||
return p; |
||||
} |
||||
cereal_CarState_ButtonEvent_list cereal_new_CarState_ButtonEvent_list(struct capn_segment *s, int len) { |
||||
cereal_CarState_ButtonEvent_list p; |
||||
p.p = capn_new_list(s, len, 8, 0); |
||||
return p; |
||||
} |
||||
void cereal_read_CarState_ButtonEvent(struct cereal_CarState_ButtonEvent *s, cereal_CarState_ButtonEvent_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->pressed = (capn_read8(p.p, 0) & 1) != 0; |
||||
s->type = (enum cereal_CarState_ButtonEvent_Type)(int) capn_read16(p.p, 2); |
||||
} |
||||
void cereal_write_CarState_ButtonEvent(const struct cereal_CarState_ButtonEvent *s, cereal_CarState_ButtonEvent_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write1(p.p, 0, s->pressed != 0); |
||||
capn_write16(p.p, 2, (uint16_t) (s->type)); |
||||
} |
||||
void cereal_get_CarState_ButtonEvent(struct cereal_CarState_ButtonEvent *s, cereal_CarState_ButtonEvent_list l, int i) { |
||||
cereal_CarState_ButtonEvent_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarState_ButtonEvent(s, p); |
||||
} |
||||
void cereal_set_CarState_ButtonEvent(const struct cereal_CarState_ButtonEvent *s, cereal_CarState_ButtonEvent_list l, int i) { |
||||
cereal_CarState_ButtonEvent_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarState_ButtonEvent(s, p); |
||||
} |
||||
|
||||
cereal_RadarState_ptr cereal_new_RadarState(struct capn_segment *s) { |
||||
cereal_RadarState_ptr p; |
||||
p.p = capn_new_struct(s, 0, 3); |
||||
return p; |
||||
} |
||||
cereal_RadarState_list cereal_new_RadarState_list(struct capn_segment *s, int len) { |
||||
cereal_RadarState_list p; |
||||
p.p = capn_new_list(s, len, 0, 3); |
||||
return p; |
||||
} |
||||
void cereal_read_RadarState(struct cereal_RadarState *s, cereal_RadarState_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->errors.p = capn_getp(p.p, 0, 0); |
||||
s->points.p = capn_getp(p.p, 1, 0); |
||||
s->canMonoTimes.p = capn_getp(p.p, 2, 0); |
||||
} |
||||
void cereal_write_RadarState(const struct cereal_RadarState *s, cereal_RadarState_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_setp(p.p, 0, s->errors.p); |
||||
capn_setp(p.p, 1, s->points.p); |
||||
capn_setp(p.p, 2, s->canMonoTimes.p); |
||||
} |
||||
void cereal_get_RadarState(struct cereal_RadarState *s, cereal_RadarState_list l, int i) { |
||||
cereal_RadarState_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_RadarState(s, p); |
||||
} |
||||
void cereal_set_RadarState(const struct cereal_RadarState *s, cereal_RadarState_list l, int i) { |
||||
cereal_RadarState_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_RadarState(s, p); |
||||
} |
||||
|
||||
cereal_RadarState_RadarPoint_ptr cereal_new_RadarState_RadarPoint(struct capn_segment *s) { |
||||
cereal_RadarState_RadarPoint_ptr p; |
||||
p.p = capn_new_struct(s, 32, 0); |
||||
return p; |
||||
} |
||||
cereal_RadarState_RadarPoint_list cereal_new_RadarState_RadarPoint_list(struct capn_segment *s, int len) { |
||||
cereal_RadarState_RadarPoint_list p; |
||||
p.p = capn_new_list(s, len, 32, 0); |
||||
return p; |
||||
} |
||||
void cereal_read_RadarState_RadarPoint(struct cereal_RadarState_RadarPoint *s, cereal_RadarState_RadarPoint_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->trackId = capn_read64(p.p, 0); |
||||
s->dRel = capn_to_f32(capn_read32(p.p, 8)); |
||||
s->yRel = capn_to_f32(capn_read32(p.p, 12)); |
||||
s->vRel = capn_to_f32(capn_read32(p.p, 16)); |
||||
s->aRel = capn_to_f32(capn_read32(p.p, 20)); |
||||
s->yvRel = capn_to_f32(capn_read32(p.p, 24)); |
||||
} |
||||
void cereal_write_RadarState_RadarPoint(const struct cereal_RadarState_RadarPoint *s, cereal_RadarState_RadarPoint_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write64(p.p, 0, s->trackId); |
||||
capn_write32(p.p, 8, capn_from_f32(s->dRel)); |
||||
capn_write32(p.p, 12, capn_from_f32(s->yRel)); |
||||
capn_write32(p.p, 16, capn_from_f32(s->vRel)); |
||||
capn_write32(p.p, 20, capn_from_f32(s->aRel)); |
||||
capn_write32(p.p, 24, capn_from_f32(s->yvRel)); |
||||
} |
||||
void cereal_get_RadarState_RadarPoint(struct cereal_RadarState_RadarPoint *s, cereal_RadarState_RadarPoint_list l, int i) { |
||||
cereal_RadarState_RadarPoint_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_RadarState_RadarPoint(s, p); |
||||
} |
||||
void cereal_set_RadarState_RadarPoint(const struct cereal_RadarState_RadarPoint *s, cereal_RadarState_RadarPoint_list l, int i) { |
||||
cereal_RadarState_RadarPoint_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_RadarState_RadarPoint(s, p); |
||||
} |
||||
|
||||
cereal_CarControl_ptr cereal_new_CarControl(struct capn_segment *s) { |
||||
cereal_CarControl_ptr p; |
||||
p.p = capn_new_struct(s, 16, 2); |
||||
return p; |
||||
} |
||||
cereal_CarControl_list cereal_new_CarControl_list(struct capn_segment *s, int len) { |
||||
cereal_CarControl_list p; |
||||
p.p = capn_new_list(s, len, 16, 2); |
||||
return p; |
||||
} |
||||
void cereal_read_CarControl(struct cereal_CarControl *s, cereal_CarControl_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->enabled = (capn_read8(p.p, 0) & 1) != 0; |
||||
s->gas = capn_to_f32(capn_read32(p.p, 4)); |
||||
s->brake = capn_to_f32(capn_read32(p.p, 8)); |
||||
s->steeringTorque = capn_to_f32(capn_read32(p.p, 12)); |
||||
s->cruiseControl.p = capn_getp(p.p, 0, 0); |
||||
s->hudControl.p = capn_getp(p.p, 1, 0); |
||||
} |
||||
void cereal_write_CarControl(const struct cereal_CarControl *s, cereal_CarControl_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write1(p.p, 0, s->enabled != 0); |
||||
capn_write32(p.p, 4, capn_from_f32(s->gas)); |
||||
capn_write32(p.p, 8, capn_from_f32(s->brake)); |
||||
capn_write32(p.p, 12, capn_from_f32(s->steeringTorque)); |
||||
capn_setp(p.p, 0, s->cruiseControl.p); |
||||
capn_setp(p.p, 1, s->hudControl.p); |
||||
} |
||||
void cereal_get_CarControl(struct cereal_CarControl *s, cereal_CarControl_list l, int i) { |
||||
cereal_CarControl_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarControl(s, p); |
||||
} |
||||
void cereal_set_CarControl(const struct cereal_CarControl *s, cereal_CarControl_list l, int i) { |
||||
cereal_CarControl_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarControl(s, p); |
||||
} |
||||
|
||||
cereal_CarControl_CruiseControl_ptr cereal_new_CarControl_CruiseControl(struct capn_segment *s) { |
||||
cereal_CarControl_CruiseControl_ptr p; |
||||
p.p = capn_new_struct(s, 16, 0); |
||||
return p; |
||||
} |
||||
cereal_CarControl_CruiseControl_list cereal_new_CarControl_CruiseControl_list(struct capn_segment *s, int len) { |
||||
cereal_CarControl_CruiseControl_list p; |
||||
p.p = capn_new_list(s, len, 16, 0); |
||||
return p; |
||||
} |
||||
void cereal_read_CarControl_CruiseControl(struct cereal_CarControl_CruiseControl *s, cereal_CarControl_CruiseControl_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->cancel = (capn_read8(p.p, 0) & 1) != 0; |
||||
s->override = (capn_read8(p.p, 0) & 2) != 0; |
||||
s->speedOverride = capn_to_f32(capn_read32(p.p, 4)); |
||||
s->accelOverride = capn_to_f32(capn_read32(p.p, 8)); |
||||
} |
||||
void cereal_write_CarControl_CruiseControl(const struct cereal_CarControl_CruiseControl *s, cereal_CarControl_CruiseControl_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write1(p.p, 0, s->cancel != 0); |
||||
capn_write1(p.p, 1, s->override != 0); |
||||
capn_write32(p.p, 4, capn_from_f32(s->speedOverride)); |
||||
capn_write32(p.p, 8, capn_from_f32(s->accelOverride)); |
||||
} |
||||
void cereal_get_CarControl_CruiseControl(struct cereal_CarControl_CruiseControl *s, cereal_CarControl_CruiseControl_list l, int i) { |
||||
cereal_CarControl_CruiseControl_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarControl_CruiseControl(s, p); |
||||
} |
||||
void cereal_set_CarControl_CruiseControl(const struct cereal_CarControl_CruiseControl *s, cereal_CarControl_CruiseControl_list l, int i) { |
||||
cereal_CarControl_CruiseControl_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarControl_CruiseControl(s, p); |
||||
} |
||||
|
||||
cereal_CarControl_HUDControl_ptr cereal_new_CarControl_HUDControl(struct capn_segment *s) { |
||||
cereal_CarControl_HUDControl_ptr p; |
||||
p.p = capn_new_struct(s, 16, 0); |
||||
return p; |
||||
} |
||||
cereal_CarControl_HUDControl_list cereal_new_CarControl_HUDControl_list(struct capn_segment *s, int len) { |
||||
cereal_CarControl_HUDControl_list p; |
||||
p.p = capn_new_list(s, len, 16, 0); |
||||
return p; |
||||
} |
||||
void cereal_read_CarControl_HUDControl(struct cereal_CarControl_HUDControl *s, cereal_CarControl_HUDControl_ptr p) { |
||||
capn_resolve(&p.p); |
||||
s->speedVisible = (capn_read8(p.p, 0) & 1) != 0; |
||||
s->setSpeed = capn_to_f32(capn_read32(p.p, 4)); |
||||
s->lanesVisible = (capn_read8(p.p, 0) & 2) != 0; |
||||
s->leadVisible = (capn_read8(p.p, 0) & 4) != 0; |
||||
s->visualAlert = (enum cereal_CarControl_HUDControl_VisualAlert)(int) capn_read16(p.p, 2); |
||||
s->audibleAlert = (enum cereal_CarControl_HUDControl_AudibleAlert)(int) capn_read16(p.p, 8); |
||||
} |
||||
void cereal_write_CarControl_HUDControl(const struct cereal_CarControl_HUDControl *s, cereal_CarControl_HUDControl_ptr p) { |
||||
capn_resolve(&p.p); |
||||
capn_write1(p.p, 0, s->speedVisible != 0); |
||||
capn_write32(p.p, 4, capn_from_f32(s->setSpeed)); |
||||
capn_write1(p.p, 1, s->lanesVisible != 0); |
||||
capn_write1(p.p, 2, s->leadVisible != 0); |
||||
capn_write16(p.p, 2, (uint16_t) (s->visualAlert)); |
||||
capn_write16(p.p, 8, (uint16_t) (s->audibleAlert)); |
||||
} |
||||
void cereal_get_CarControl_HUDControl(struct cereal_CarControl_HUDControl *s, cereal_CarControl_HUDControl_list l, int i) { |
||||
cereal_CarControl_HUDControl_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_read_CarControl_HUDControl(s, p); |
||||
} |
||||
void cereal_set_CarControl_HUDControl(const struct cereal_CarControl_HUDControl *s, cereal_CarControl_HUDControl_list l, int i) { |
||||
cereal_CarControl_HUDControl_ptr p; |
||||
p.p = capn_getp(l.p, i, 0); |
||||
cereal_write_CarControl_HUDControl(s, p); |
||||
} |
@ -0,0 +1,287 @@ |
||||
#ifndef CAPN_8E2AF1E78AF8B8D |
||||
#define CAPN_8E2AF1E78AF8B8D |
||||
/* AUTO GENERATED - DO NOT EDIT */ |
||||
#include <capnp_c.h> |
||||
|
||||
#if CAPN_VERSION != 1 |
||||
#error "version mismatch between capnp_c.h and generated code" |
||||
#endif |
||||
|
||||
#include "c++.capnp.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
struct cereal_CarState; |
||||
struct cereal_CarState_WheelSpeeds; |
||||
struct cereal_CarState_CruiseState; |
||||
struct cereal_CarState_ButtonEvent; |
||||
struct cereal_RadarState; |
||||
struct cereal_RadarState_RadarPoint; |
||||
struct cereal_CarControl; |
||||
struct cereal_CarControl_CruiseControl; |
||||
struct cereal_CarControl_HUDControl; |
||||
|
||||
typedef struct {capn_ptr p;} cereal_CarState_ptr; |
||||
typedef struct {capn_ptr p;} cereal_CarState_WheelSpeeds_ptr; |
||||
typedef struct {capn_ptr p;} cereal_CarState_CruiseState_ptr; |
||||
typedef struct {capn_ptr p;} cereal_CarState_ButtonEvent_ptr; |
||||
typedef struct {capn_ptr p;} cereal_RadarState_ptr; |
||||
typedef struct {capn_ptr p;} cereal_RadarState_RadarPoint_ptr; |
||||
typedef struct {capn_ptr p;} cereal_CarControl_ptr; |
||||
typedef struct {capn_ptr p;} cereal_CarControl_CruiseControl_ptr; |
||||
typedef struct {capn_ptr p;} cereal_CarControl_HUDControl_ptr; |
||||
|
||||
typedef struct {capn_ptr p;} cereal_CarState_list; |
||||
typedef struct {capn_ptr p;} cereal_CarState_WheelSpeeds_list; |
||||
typedef struct {capn_ptr p;} cereal_CarState_CruiseState_list; |
||||
typedef struct {capn_ptr p;} cereal_CarState_ButtonEvent_list; |
||||
typedef struct {capn_ptr p;} cereal_RadarState_list; |
||||
typedef struct {capn_ptr p;} cereal_RadarState_RadarPoint_list; |
||||
typedef struct {capn_ptr p;} cereal_CarControl_list; |
||||
typedef struct {capn_ptr p;} cereal_CarControl_CruiseControl_list; |
||||
typedef struct {capn_ptr p;} cereal_CarControl_HUDControl_list; |
||||
|
||||
enum cereal_CarState_Error { |
||||
cereal_CarState_Error_commIssue = 0, |
||||
cereal_CarState_Error_steerUnavailable = 1, |
||||
cereal_CarState_Error_brakeUnavailable = 2, |
||||
cereal_CarState_Error_gasUnavailable = 3, |
||||
cereal_CarState_Error_wrongGear = 4, |
||||
cereal_CarState_Error_doorOpen = 5, |
||||
cereal_CarState_Error_seatbeltNotLatched = 6, |
||||
cereal_CarState_Error_espDisabled = 7, |
||||
cereal_CarState_Error_wrongCarMode = 8, |
||||
cereal_CarState_Error_steerTemporarilyUnavailable = 9, |
||||
cereal_CarState_Error_reverseGear = 10 |
||||
}; |
||||
|
||||
enum cereal_CarState_ButtonEvent_Type { |
||||
cereal_CarState_ButtonEvent_Type_unknown = 0, |
||||
cereal_CarState_ButtonEvent_Type_leftBlinker = 1, |
||||
cereal_CarState_ButtonEvent_Type_rightBlinker = 2, |
||||
cereal_CarState_ButtonEvent_Type_accelCruise = 3, |
||||
cereal_CarState_ButtonEvent_Type_decelCruise = 4, |
||||
cereal_CarState_ButtonEvent_Type_cancel = 5, |
||||
cereal_CarState_ButtonEvent_Type_altButton1 = 6, |
||||
cereal_CarState_ButtonEvent_Type_altButton2 = 7, |
||||
cereal_CarState_ButtonEvent_Type_altButton3 = 8 |
||||
}; |
||||
|
||||
enum cereal_RadarState_Error { |
||||
cereal_RadarState_Error_notValid = 0 |
||||
}; |
||||
|
||||
enum cereal_CarControl_HUDControl_VisualAlert { |
||||
cereal_CarControl_HUDControl_VisualAlert_none = 0, |
||||
cereal_CarControl_HUDControl_VisualAlert_fcw = 1, |
||||
cereal_CarControl_HUDControl_VisualAlert_steerRequired = 2, |
||||
cereal_CarControl_HUDControl_VisualAlert_brakePressed = 3, |
||||
cereal_CarControl_HUDControl_VisualAlert_wrongGear = 4, |
||||
cereal_CarControl_HUDControl_VisualAlert_seatbeltUnbuckled = 5, |
||||
cereal_CarControl_HUDControl_VisualAlert_speedTooHigh = 6 |
||||
}; |
||||
|
||||
enum cereal_CarControl_HUDControl_AudibleAlert { |
||||
cereal_CarControl_HUDControl_AudibleAlert_none = 0, |
||||
cereal_CarControl_HUDControl_AudibleAlert_beepSingle = 1, |
||||
cereal_CarControl_HUDControl_AudibleAlert_beepTriple = 2, |
||||
cereal_CarControl_HUDControl_AudibleAlert_beepRepeated = 3, |
||||
cereal_CarControl_HUDControl_AudibleAlert_chimeSingle = 4, |
||||
cereal_CarControl_HUDControl_AudibleAlert_chimeDouble = 5, |
||||
cereal_CarControl_HUDControl_AudibleAlert_chimeRepeated = 6, |
||||
cereal_CarControl_HUDControl_AudibleAlert_chimeContinuous = 7 |
||||
}; |
||||
|
||||
struct cereal_CarState { |
||||
capn_list16 errors; |
||||
float vEgo; |
||||
cereal_CarState_WheelSpeeds_ptr wheelSpeeds; |
||||
float gas; |
||||
unsigned gasPressed : 1; |
||||
float brake; |
||||
unsigned brakePressed : 1; |
||||
float steeringAngle; |
||||
float steeringTorque; |
||||
unsigned steeringPressed : 1; |
||||
cereal_CarState_CruiseState_ptr cruiseState; |
||||
cereal_CarState_ButtonEvent_list buttonEvents; |
||||
capn_list64 canMonoTimes; |
||||
}; |
||||
|
||||
static const size_t cereal_CarState_word_count = 3; |
||||
|
||||
static const size_t cereal_CarState_pointer_count = 5; |
||||
|
||||
static const size_t cereal_CarState_struct_bytes_count = 64; |
||||
|
||||
struct cereal_CarState_WheelSpeeds { |
||||
float fl; |
||||
float fr; |
||||
float rl; |
||||
float rr; |
||||
}; |
||||
|
||||
static const size_t cereal_CarState_WheelSpeeds_word_count = 2; |
||||
|
||||
static const size_t cereal_CarState_WheelSpeeds_pointer_count = 0; |
||||
|
||||
static const size_t cereal_CarState_WheelSpeeds_struct_bytes_count = 16; |
||||
|
||||
struct cereal_CarState_CruiseState { |
||||
unsigned enabled : 1; |
||||
float speed; |
||||
}; |
||||
|
||||
static const size_t cereal_CarState_CruiseState_word_count = 1; |
||||
|
||||
static const size_t cereal_CarState_CruiseState_pointer_count = 0; |
||||
|
||||
static const size_t cereal_CarState_CruiseState_struct_bytes_count = 8; |
||||
|
||||
struct cereal_CarState_ButtonEvent { |
||||
unsigned pressed : 1; |
||||
enum cereal_CarState_ButtonEvent_Type type; |
||||
}; |
||||
|
||||
static const size_t cereal_CarState_ButtonEvent_word_count = 1; |
||||
|
||||
static const size_t cereal_CarState_ButtonEvent_pointer_count = 0; |
||||
|
||||
static const size_t cereal_CarState_ButtonEvent_struct_bytes_count = 8; |
||||
|
||||
struct cereal_RadarState { |
||||
capn_list16 errors; |
||||
cereal_RadarState_RadarPoint_list points; |
||||
capn_list64 canMonoTimes; |
||||
}; |
||||
|
||||
static const size_t cereal_RadarState_word_count = 0; |
||||
|
||||
static const size_t cereal_RadarState_pointer_count = 3; |
||||
|
||||
static const size_t cereal_RadarState_struct_bytes_count = 24; |
||||
|
||||
struct cereal_RadarState_RadarPoint { |
||||
uint64_t trackId; |
||||
float dRel; |
||||
float yRel; |
||||
float vRel; |
||||
float aRel; |
||||
float yvRel; |
||||
}; |
||||
|
||||
static const size_t cereal_RadarState_RadarPoint_word_count = 4; |
||||
|
||||
static const size_t cereal_RadarState_RadarPoint_pointer_count = 0; |
||||
|
||||
static const size_t cereal_RadarState_RadarPoint_struct_bytes_count = 32; |
||||
|
||||
struct cereal_CarControl { |
||||
unsigned enabled : 1; |
||||
float gas; |
||||
float brake; |
||||
float steeringTorque; |
||||
cereal_CarControl_CruiseControl_ptr cruiseControl; |
||||
cereal_CarControl_HUDControl_ptr hudControl; |
||||
}; |
||||
|
||||
static const size_t cereal_CarControl_word_count = 2; |
||||
|
||||
static const size_t cereal_CarControl_pointer_count = 2; |
||||
|
||||
static const size_t cereal_CarControl_struct_bytes_count = 32; |
||||
|
||||
struct cereal_CarControl_CruiseControl { |
||||
unsigned cancel : 1; |
||||
unsigned override : 1; |
||||
float speedOverride; |
||||
float accelOverride; |
||||
}; |
||||
|
||||
static const size_t cereal_CarControl_CruiseControl_word_count = 2; |
||||
|
||||
static const size_t cereal_CarControl_CruiseControl_pointer_count = 0; |
||||
|
||||
static const size_t cereal_CarControl_CruiseControl_struct_bytes_count = 16; |
||||
|
||||
struct cereal_CarControl_HUDControl { |
||||
unsigned speedVisible : 1; |
||||
float setSpeed; |
||||
unsigned lanesVisible : 1; |
||||
unsigned leadVisible : 1; |
||||
enum cereal_CarControl_HUDControl_VisualAlert visualAlert; |
||||
enum cereal_CarControl_HUDControl_AudibleAlert audibleAlert; |
||||
}; |
||||
|
||||
static const size_t cereal_CarControl_HUDControl_word_count = 2; |
||||
|
||||
static const size_t cereal_CarControl_HUDControl_pointer_count = 0; |
||||
|
||||
static const size_t cereal_CarControl_HUDControl_struct_bytes_count = 16; |
||||
|
||||
cereal_CarState_ptr cereal_new_CarState(struct capn_segment*); |
||||
cereal_CarState_WheelSpeeds_ptr cereal_new_CarState_WheelSpeeds(struct capn_segment*); |
||||
cereal_CarState_CruiseState_ptr cereal_new_CarState_CruiseState(struct capn_segment*); |
||||
cereal_CarState_ButtonEvent_ptr cereal_new_CarState_ButtonEvent(struct capn_segment*); |
||||
cereal_RadarState_ptr cereal_new_RadarState(struct capn_segment*); |
||||
cereal_RadarState_RadarPoint_ptr cereal_new_RadarState_RadarPoint(struct capn_segment*); |
||||
cereal_CarControl_ptr cereal_new_CarControl(struct capn_segment*); |
||||
cereal_CarControl_CruiseControl_ptr cereal_new_CarControl_CruiseControl(struct capn_segment*); |
||||
cereal_CarControl_HUDControl_ptr cereal_new_CarControl_HUDControl(struct capn_segment*); |
||||
|
||||
cereal_CarState_list cereal_new_CarState_list(struct capn_segment*, int len); |
||||
cereal_CarState_WheelSpeeds_list cereal_new_CarState_WheelSpeeds_list(struct capn_segment*, int len); |
||||
cereal_CarState_CruiseState_list cereal_new_CarState_CruiseState_list(struct capn_segment*, int len); |
||||
cereal_CarState_ButtonEvent_list cereal_new_CarState_ButtonEvent_list(struct capn_segment*, int len); |
||||
cereal_RadarState_list cereal_new_RadarState_list(struct capn_segment*, int len); |
||||
cereal_RadarState_RadarPoint_list cereal_new_RadarState_RadarPoint_list(struct capn_segment*, int len); |
||||
cereal_CarControl_list cereal_new_CarControl_list(struct capn_segment*, int len); |
||||
cereal_CarControl_CruiseControl_list cereal_new_CarControl_CruiseControl_list(struct capn_segment*, int len); |
||||
cereal_CarControl_HUDControl_list cereal_new_CarControl_HUDControl_list(struct capn_segment*, int len); |
||||
|
||||
void cereal_read_CarState(struct cereal_CarState*, cereal_CarState_ptr); |
||||
void cereal_read_CarState_WheelSpeeds(struct cereal_CarState_WheelSpeeds*, cereal_CarState_WheelSpeeds_ptr); |
||||
void cereal_read_CarState_CruiseState(struct cereal_CarState_CruiseState*, cereal_CarState_CruiseState_ptr); |
||||
void cereal_read_CarState_ButtonEvent(struct cereal_CarState_ButtonEvent*, cereal_CarState_ButtonEvent_ptr); |
||||
void cereal_read_RadarState(struct cereal_RadarState*, cereal_RadarState_ptr); |
||||
void cereal_read_RadarState_RadarPoint(struct cereal_RadarState_RadarPoint*, cereal_RadarState_RadarPoint_ptr); |
||||
void cereal_read_CarControl(struct cereal_CarControl*, cereal_CarControl_ptr); |
||||
void cereal_read_CarControl_CruiseControl(struct cereal_CarControl_CruiseControl*, cereal_CarControl_CruiseControl_ptr); |
||||
void cereal_read_CarControl_HUDControl(struct cereal_CarControl_HUDControl*, cereal_CarControl_HUDControl_ptr); |
||||
|
||||
void cereal_write_CarState(const struct cereal_CarState*, cereal_CarState_ptr); |
||||
void cereal_write_CarState_WheelSpeeds(const struct cereal_CarState_WheelSpeeds*, cereal_CarState_WheelSpeeds_ptr); |
||||
void cereal_write_CarState_CruiseState(const struct cereal_CarState_CruiseState*, cereal_CarState_CruiseState_ptr); |
||||
void cereal_write_CarState_ButtonEvent(const struct cereal_CarState_ButtonEvent*, cereal_CarState_ButtonEvent_ptr); |
||||
void cereal_write_RadarState(const struct cereal_RadarState*, cereal_RadarState_ptr); |
||||
void cereal_write_RadarState_RadarPoint(const struct cereal_RadarState_RadarPoint*, cereal_RadarState_RadarPoint_ptr); |
||||
void cereal_write_CarControl(const struct cereal_CarControl*, cereal_CarControl_ptr); |
||||
void cereal_write_CarControl_CruiseControl(const struct cereal_CarControl_CruiseControl*, cereal_CarControl_CruiseControl_ptr); |
||||
void cereal_write_CarControl_HUDControl(const struct cereal_CarControl_HUDControl*, cereal_CarControl_HUDControl_ptr); |
||||
|
||||
void cereal_get_CarState(struct cereal_CarState*, cereal_CarState_list, int i); |
||||
void cereal_get_CarState_WheelSpeeds(struct cereal_CarState_WheelSpeeds*, cereal_CarState_WheelSpeeds_list, int i); |
||||
void cereal_get_CarState_CruiseState(struct cereal_CarState_CruiseState*, cereal_CarState_CruiseState_list, int i); |
||||
void cereal_get_CarState_ButtonEvent(struct cereal_CarState_ButtonEvent*, cereal_CarState_ButtonEvent_list, int i); |
||||
void cereal_get_RadarState(struct cereal_RadarState*, cereal_RadarState_list, int i); |
||||
void cereal_get_RadarState_RadarPoint(struct cereal_RadarState_RadarPoint*, cereal_RadarState_RadarPoint_list, int i); |
||||
void cereal_get_CarControl(struct cereal_CarControl*, cereal_CarControl_list, int i); |
||||
void cereal_get_CarControl_CruiseControl(struct cereal_CarControl_CruiseControl*, cereal_CarControl_CruiseControl_list, int i); |
||||
void cereal_get_CarControl_HUDControl(struct cereal_CarControl_HUDControl*, cereal_CarControl_HUDControl_list, int i); |
||||
|
||||
void cereal_set_CarState(const struct cereal_CarState*, cereal_CarState_list, int i); |
||||
void cereal_set_CarState_WheelSpeeds(const struct cereal_CarState_WheelSpeeds*, cereal_CarState_WheelSpeeds_list, int i); |
||||
void cereal_set_CarState_CruiseState(const struct cereal_CarState_CruiseState*, cereal_CarState_CruiseState_list, int i); |
||||
void cereal_set_CarState_ButtonEvent(const struct cereal_CarState_ButtonEvent*, cereal_CarState_ButtonEvent_list, int i); |
||||
void cereal_set_RadarState(const struct cereal_RadarState*, cereal_RadarState_list, int i); |
||||
void cereal_set_RadarState_RadarPoint(const struct cereal_RadarState_RadarPoint*, cereal_RadarState_RadarPoint_list, int i); |
||||
void cereal_set_CarControl(const struct cereal_CarControl*, cereal_CarControl_list, int i); |
||||
void cereal_set_CarControl_CruiseControl(const struct cereal_CarControl_CruiseControl*, cereal_CarControl_CruiseControl_list, int i); |
||||
void cereal_set_CarControl_HUDControl(const struct cereal_CarControl_HUDControl*, cereal_CarControl_HUDControl_list, int i); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
#endif |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,26 +0,0 @@ |
||||
#!/usr/bin/bash |
||||
|
||||
# enable wifi access point for debugging only! |
||||
#service call wifi 37 i32 0 i32 1 # WifiService.setWifiApEnabled(null, true) |
||||
|
||||
# check out the openpilot repo |
||||
if [ ! -d /data/openpilot ]; then |
||||
cd /tmp |
||||
git clone https://github.com/commaai/openpilot.git -b release |
||||
mv /tmp/openpilot /data/openpilot |
||||
fi |
||||
|
||||
# enter openpilot directory |
||||
cd /data/openpilot |
||||
|
||||
# automatic update |
||||
git pull |
||||
|
||||
# start manager |
||||
cd selfdrive |
||||
mkdir -p /sdcard/realdata |
||||
PYTHONPATH=/data/openpilot ./manager.py |
||||
|
||||
# if broken, keep on screen error |
||||
while true; do sleep 1; done |
||||
|
@ -1,7 +0,0 @@ |
||||
#!/bin/bash |
||||
set -e |
||||
|
||||
# moving continue into place runs the continue script |
||||
adb push files/continue.sh /tmp/continue.sh |
||||
adb shell mv /tmp/continue.sh /data/data/com.termux/files/ |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,117 @@ |
||||
/*
|
||||
Copyright (C) 2011 Joseph A. Adams (joeyadams3.14159@gmail.com) |
||||
All rights reserved. |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
||||
*/ |
||||
|
||||
#ifndef CCAN_JSON_H |
||||
#define CCAN_JSON_H |
||||
|
||||
#include <stdbool.h> |
||||
#include <stddef.h> |
||||
|
||||
typedef enum { |
||||
JSON_NULL, |
||||
JSON_BOOL, |
||||
JSON_STRING, |
||||
JSON_NUMBER, |
||||
JSON_ARRAY, |
||||
JSON_OBJECT, |
||||
} JsonTag; |
||||
|
||||
typedef struct JsonNode JsonNode; |
||||
|
||||
struct JsonNode |
||||
{ |
||||
/* only if parent is an object or array (NULL otherwise) */ |
||||
JsonNode *parent; |
||||
JsonNode *prev, *next; |
||||
|
||||
/* only if parent is an object (NULL otherwise) */ |
||||
char *key; /* Must be valid UTF-8. */ |
||||
|
||||
JsonTag tag; |
||||
union { |
||||
/* JSON_BOOL */ |
||||
bool bool_; |
||||
|
||||
/* JSON_STRING */ |
||||
char *string_; /* Must be valid UTF-8. */ |
||||
|
||||
/* JSON_NUMBER */ |
||||
double number_; |
||||
|
||||
/* JSON_ARRAY */ |
||||
/* JSON_OBJECT */ |
||||
struct { |
||||
JsonNode *head, *tail; |
||||
} children; |
||||
}; |
||||
}; |
||||
|
||||
/*** Encoding, decoding, and validation ***/ |
||||
|
||||
JsonNode *json_decode (const char *json); |
||||
char *json_encode (const JsonNode *node); |
||||
char *json_encode_string (const char *str); |
||||
char *json_stringify (const JsonNode *node, const char *space); |
||||
void json_delete (JsonNode *node); |
||||
|
||||
bool json_validate (const char *json); |
||||
|
||||
/*** Lookup and traversal ***/ |
||||
|
||||
JsonNode *json_find_element (JsonNode *array, int index); |
||||
JsonNode *json_find_member (JsonNode *object, const char *key); |
||||
|
||||
JsonNode *json_first_child (const JsonNode *node); |
||||
|
||||
#define json_foreach(i, object_or_array) \ |
||||
for ((i) = json_first_child(object_or_array); \
|
||||
(i) != NULL; \
|
||||
(i) = (i)->next) |
||||
|
||||
/*** Construction and manipulation ***/ |
||||
|
||||
JsonNode *json_mknull(void); |
||||
JsonNode *json_mkbool(bool b); |
||||
JsonNode *json_mkstring(const char *s); |
||||
JsonNode *json_mknumber(double n); |
||||
JsonNode *json_mkarray(void); |
||||
JsonNode *json_mkobject(void); |
||||
|
||||
void json_append_element(JsonNode *array, JsonNode *element); |
||||
void json_prepend_element(JsonNode *array, JsonNode *element); |
||||
void json_append_member(JsonNode *object, const char *key, JsonNode *value); |
||||
void json_prepend_member(JsonNode *object, const char *key, JsonNode *value); |
||||
|
||||
void json_remove_from_parent(JsonNode *node); |
||||
|
||||
/*** Debugging ***/ |
||||
|
||||
/*
|
||||
* Look for structure and encoding problems in a JsonNode or its descendents. |
||||
* |
||||
* If a problem is detected, return false, writing a description of the problem |
||||
* to errmsg (unless errmsg is NULL). |
||||
*/ |
||||
bool json_check(const JsonNode *node, char errmsg[256]); |
||||
|
||||
#endif |
@ -0,0 +1,17 @@ |
||||
CEREAL_CFLAGS = -I$(PHONELIBS)/capnp-c/include
|
||||
CEREAL_CXXFLAGS = -I$(PHONELIBS)/capnp-cpp/include
|
||||
CEREAL_LIBS = -L$(PHONELIBS)/capnp-cpp/aarch64/lib/ \
|
||||
-L$(PHONELIBS)/capnp-c/aarch64/lib/ \
|
||||
-l:libcapn.a -l:libcapnp.a -l:libkj.a
|
||||
CEREAL_OBJS = ../../cereal/gen/c/log.capnp.o ../../cereal/gen/c/car.capnp.o
|
||||
|
||||
log.capnp.o: ../../cereal/gen/cpp/log.capnp.c++ |
||||
@echo "[ CXX ] $@"
|
||||
$(CXX) $(CXXFLAGS) $(CEREAL_CFLAGS) \
|
||||
-c -o '$@' '$<'
|
||||
|
||||
car.capnp.o: ../../cereal/gen/cpp/car.capnp.c++ |
||||
@echo "[ CXX ] $@"
|
||||
$(CXX) $(CXXFLAGS) $(CEREAL_CFLAGS) \
|
||||
-c -o '$@' '$<'
|
||||
|
@ -0,0 +1,71 @@ |
||||
#include <stdlib.h> |
||||
#include <stdio.h> |
||||
|
||||
#include <GLES3/gl3.h> |
||||
|
||||
#include "glutil.h" |
||||
|
||||
GLuint load_shader(GLenum shaderType, const char *src) { |
||||
GLint status = 0, len = 0; |
||||
GLuint shader; |
||||
|
||||
if (!(shader = glCreateShader(shaderType))) |
||||
return 0; |
||||
|
||||
glShaderSource(shader, 1, &src, NULL); |
||||
glCompileShader(shader); |
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &status); |
||||
|
||||
if (status) |
||||
return shader; |
||||
|
||||
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len); |
||||
if (len) { |
||||
char *msg = (char*)malloc(len); |
||||
if (msg) { |
||||
glGetShaderInfoLog(shader, len, NULL, msg); |
||||
msg[len-1] = 0; |
||||
fprintf(stderr, "error compiling shader:\n%s\n", msg); |
||||
free(msg); |
||||
} |
||||
} |
||||
glDeleteShader(shader); |
||||
return 0; |
||||
} |
||||
|
||||
GLuint load_program(const char *vert_src, const char *frag_src) { |
||||
GLuint vert, frag, prog; |
||||
GLint status = 0, len = 0; |
||||
|
||||
if (!(vert = load_shader(GL_VERTEX_SHADER, vert_src))) |
||||
return 0; |
||||
if (!(frag = load_shader(GL_FRAGMENT_SHADER, frag_src))) |
||||
goto fail_frag; |
||||
if (!(prog = glCreateProgram())) |
||||
goto fail_prog; |
||||
|
||||
glAttachShader(prog, vert); |
||||
glAttachShader(prog, frag); |
||||
glLinkProgram(prog); |
||||
|
||||
glGetProgramiv(prog, GL_LINK_STATUS, &status); |
||||
if (status) |
||||
return prog; |
||||
|
||||
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &len); |
||||
if (len) { |
||||
char *buf = (char*) malloc(len); |
||||
if (buf) { |
||||
glGetProgramInfoLog(prog, len, NULL, buf); |
||||
buf[len-1] = 0; |
||||
fprintf(stderr, "error linking program:\n%s\n", buf); |
||||
free(buf); |
||||
} |
||||
} |
||||
glDeleteProgram(prog); |
||||
fail_prog: |
||||
glDeleteShader(frag); |
||||
fail_frag: |
||||
glDeleteShader(vert); |
||||
return 0; |
||||
} |
@ -0,0 +1,8 @@ |
||||
#ifndef COMMON_GLUTIL_H |
||||
#define COMMON_GLUTIL_H |
||||
|
||||
#include <GLES3/gl3.h> |
||||
GLuint load_shader(GLenum shaderType, const char *src); |
||||
GLuint load_program(const char *vert_src, const char *frag_src); |
||||
|
||||
#endif |
@ -1 +1 @@ |
||||
const char *openpilot_version = "0.2.3"; |
||||
const char *openpilot_version = "0.2.4"; |
||||
|
Binary file not shown.
Loading…
Reference in new issue