Compare commits
No commits in common. "master" and "different-filter" have entirely different histories.
master
...
different-
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,6 +0,0 @@
|
||||
[submodule "fw/ch32fun"]
|
||||
path = fw/ch32fun
|
||||
url = https://github.com/cnlohr/ch32fun
|
||||
[submodule "fw/u8g2"]
|
||||
path = fw/u8g2
|
||||
url = https://github.com/olikraus/u8g2
|
||||
BIN
3D/3DModel.FCStd
Normal file
BIN
3D/3DModel.FCStd
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
12
README.md
12
README.md
@ -2,14 +2,4 @@
|
||||
|
||||
Repo for a cool usb-c soldering iron that uses C245 cartridges and power up to 130W.
|
||||
|
||||
Read the [project report](doc/report/README.md) (in italian).
|
||||
|
||||
# IDEAS
|
||||
|
||||
* USB-C connector on the edge of the PCB like the [alientek T90B](https://youtu.be/Xl0IKpvlF3Y?si=ecKIGLwI0vSPZbJ4&t=7) (clamping plate)
|
||||
* OLED Screen on a separate PCB, same project with a V-Cut
|
||||
* More compact tip recess, stabilized by a, aluminium ring, maybe bought at the hardware store
|
||||
* Single screw disassembly
|
||||
* 13mm grip dimensions and 18mm otherwise
|
||||
* 1mm walls in PETG
|
||||
* Add a ~small~ button to the bootsel line
|
||||
Read the [project report](doc/report/README.md) (in italian).
|
||||
12
fw/.gitignore
vendored
12
fw/.gitignore
vendored
@ -1,12 +0,0 @@
|
||||
.zen
|
||||
.vscode
|
||||
.ccls-cache
|
||||
.cache
|
||||
*.bin
|
||||
*.lst
|
||||
*.map
|
||||
*.elf
|
||||
*.hex
|
||||
*.o
|
||||
.build
|
||||
compile_commands.json
|
||||
Binary file not shown.
Binary file not shown.
53
fw/Makefile
53
fw/Makefile
@ -1,53 +0,0 @@
|
||||
all : build
|
||||
|
||||
TARGET := main
|
||||
TARGET_MCU := CH32X035
|
||||
TARGET_MCU_PACKAGE := CH32X035F8U6
|
||||
BUILD_DIR := .build
|
||||
DISPLAY := ssd1306_128x32
|
||||
|
||||
# include u8g2
|
||||
U8G2_DIR:=u8g2/csrc
|
||||
U8G2_SRC:=$(U8G2_DIR)/u8x8_d_$(DISPLAY).c $(filter-out $(U8G2_DIR)/u8x8_d_%.c, \
|
||||
$(filter-out $(U8G2_DIR)/mui%.c, $(wildcard $(U8G2_DIR)/*.c)))
|
||||
|
||||
# include fr_math
|
||||
FRMATH_DIR:=fr_math
|
||||
FRMATH_SRC:=$(wildcard $(FRMATH_DIR)/*.c)
|
||||
|
||||
# include protothreads
|
||||
PT_DIR:=pt
|
||||
|
||||
EXTRA_CFLAGS += -I$(U8G2_DIR) -I$(FRMATH_DIR) -I$(PT_DIR)
|
||||
ADDITIONAL_C_FILES += lib_i2c.c display.c sc7a20.c pd.c
|
||||
HEADER_FILES := $(wildcard *.h) $(wildcard $(PT_DIR)/*.h)
|
||||
|
||||
include ch32fun/ch32fun/ch32fun.mk
|
||||
|
||||
FLASH_COMMAND=$(MINICHLINK)/minichlink -C isp -w $< $(WRITE_SECTION) -b
|
||||
|
||||
# create build directory
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
# build u8g2
|
||||
U8G2_OBJS := $(addprefix $(BUILD_DIR)/, $(notdir $(U8G2_SRC:.c=.o)))
|
||||
$(BUILD_DIR)/%.o : $(U8G2_DIR)/%.c | $(BUILD_DIR)
|
||||
$(PREFIX)-gcc $(CFLAGS) -c $< -o $@
|
||||
|
||||
# build target
|
||||
TARGET_OBJS := $(addprefix $(BUILD_DIR)/, $(filter-out ch32fun.o, $(notdir $(FILES_TO_COMPILE:.c=.o))))
|
||||
$(BUILD_DIR)/%.o : %.c $(HEADER_FILES) | $(BUILD_DIR)
|
||||
$(PREFIX)-gcc $(CFLAGS) -c $< -o $@
|
||||
|
||||
# link target, the rest of the build is specified in ch32fun.mk
|
||||
$(TARGET).elf : $(FILES_TO_COMPILE) $(LINKER_SCRIPT) $(EXTRA_ELF_DEPENDENCIES) $(U8G2_OBJS) $(TARGET_OBJS) ch32fun.o
|
||||
$(PREFIX)-gcc -o $@ $(U8G2_OBJS) $(TARGET_OBJS) ch32fun.o $(CFLAGS) $(LDFLAGS)
|
||||
|
||||
|
||||
flash : cv_flash
|
||||
clean : cv_clean
|
||||
rm -f $(BUILD_DIR)/*.o *.o || true
|
||||
|
||||
monitor :
|
||||
picocom --imap lfcrlf /dev/ttyACM0
|
||||
26
fw/README.md
26
fw/README.md
@ -1,26 +0,0 @@
|
||||
# USB-C Soldering Iron Firmware
|
||||
|
||||
```
|
||||
SHRIM
|
||||
__-------._
|
||||
_` __===O~O_\.
|
||||
/ \ _ __w_=
|
||||
/___ /~^
|
||||
| |~^
|
||||
\ __\~^ \ V/
|
||||
\_ _\ __ / /
|
||||
`- __|_-'
|
||||
```
|
||||
|
||||
## Special thanks to:
|
||||
|
||||
* cnlohr and all the contributors of [ch32fun][ch32fun]
|
||||
* deftio for [FR_math][frmath] which I briefly used
|
||||
* olkiarus for [u8g2][u8g2]
|
||||
* The Swedish Institute of Computer Science for [protothreads][pt]
|
||||
|
||||
|
||||
[ch32fun]: https://github.com/cnlohr/ch32fun
|
||||
[frmath]: https://github.com/deftio/fr_math
|
||||
[u8g2]: https://github.com/olikraus/u8g2
|
||||
[pt]: https://dunkels.com/adam/pt/index.html
|
||||
@ -1 +0,0 @@
|
||||
Subproject commit cfffff6d6bd9bd97d7348d044a1de145f4548072
|
||||
237
fw/coroutine.h
237
fw/coroutine.h
@ -1,237 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2026, Alessandro Mauri <alemauri001@gmail.com>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This file is a heavily modified, single-header derivative of the
|
||||
* protothreads library.
|
||||
*
|
||||
* =============================================================================
|
||||
* Original Protothreads License:
|
||||
* =============================================================================
|
||||
* Copyright (c) 2004-2005, Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 the Institute 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 INSTITUTE 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 INSTITUTE 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.
|
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _COROUTINE_H
|
||||
#define _COROUTINE_H
|
||||
|
||||
/* This is an implementation of stackless coroutines that uses the labels as
|
||||
* values [1] feature of GNU C, similar to protothreads [2] with the lc-addrlabels.h
|
||||
* include, the only difference being better ergonomics and minimal type checking.
|
||||
*
|
||||
* Since coroutines implemented this way need to return to wait for a condition
|
||||
* stack-local variables are NOT preserved between wait()s, as such these functions
|
||||
* have to be considered stackless. Any state that has to be preserved between
|
||||
* waits have to be declared static or have to be preserved outside the routine.
|
||||
*
|
||||
* This library's intended use is in microcontrollers and memory-constrained
|
||||
* systems where having a full rtos and/or having stackful coroutines is either
|
||||
* too heavy or overkill. Stackless coroutines implemented this way are an
|
||||
* alternative way of expressing state machines. Since coroutines have to be
|
||||
* repeatedly called to be "scheduled", the code maintains a main loop, but state
|
||||
* changes can be expressed with waits on conditions, timers, semaphores and other
|
||||
* more expressive constructs.
|
||||
*
|
||||
* A simple example program is:
|
||||
*
|
||||
* #include "coroutine.h"
|
||||
*
|
||||
* // Updates the timer when called, returns true when it expires
|
||||
* static int timer_expired(struct timer *t);
|
||||
* // Sets a timer in milliseconds
|
||||
* static void timer_set(struct timer *t, int interval);
|
||||
*
|
||||
* // First coroutine, waits for 1s and prints something
|
||||
* coroutine coro_1(coro_state_t *s)
|
||||
* {
|
||||
* static struct timer t;
|
||||
* coro_begin(s);
|
||||
* for (;;) {
|
||||
* timer_set(&t, 1000);
|
||||
* coro_wait_until(s, timer_expired(&t));
|
||||
* printf("coroutine 1\n");
|
||||
* }
|
||||
* coro_end();
|
||||
* }
|
||||
*
|
||||
* // Second coroutine, waits for 500ms and prints something
|
||||
* coroutine coro_2(coro_state_t *s)
|
||||
* {
|
||||
* static struct timer t;
|
||||
* coro_begin(s);
|
||||
* for (;;) {
|
||||
* timer_set(&t, 500);
|
||||
* coro_wait_until(s, timer_expired(&t));
|
||||
* printf("coroutine 2\n");
|
||||
* }
|
||||
* coro_end();
|
||||
* }
|
||||
*
|
||||
* int main(void)
|
||||
* {
|
||||
* coro_state_t s1, s2;
|
||||
* coro_init(&s1);
|
||||
* coro_init(&s2);
|
||||
*
|
||||
* // Main loop, calls each coroutine periodically
|
||||
* for (;;) {
|
||||
* coro_1(&s1);
|
||||
* coro_2(&s2);
|
||||
* usleep(100);
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* [1]: https://www.gnu.org/software/c-intro-and-ref/manual/html_node/Labels-as-Values.html
|
||||
* [2]: https://dunkels.com/adam/pt/index.html
|
||||
*/
|
||||
|
||||
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||
// GCC: the extension is always present unless strict ANSI mode is forced.
|
||||
// (Even with -pedantic it still works, just warns.)
|
||||
#define HAVE_LABELS_AS_VALUES 1
|
||||
#elif __has_extension(c_labels_as_values)
|
||||
#define HAVE_LABELS_AS_VALUES 1
|
||||
#else
|
||||
#define HAVE_LABELS_AS_VALUES 0
|
||||
#endif
|
||||
|
||||
_Static_assert(HAVE_LABELS_AS_VALUES, "This library requires the GNU C 'labels as values' extension");
|
||||
|
||||
// Useful macros
|
||||
#define CORO_CONCAT2(s1, s2) s1##s2
|
||||
#define CORO_CONCAT(s1, s2) CORO_CONCAT2(s1, s2)
|
||||
#define CORO_CHECK_TYPE(var,type) { typedef void (*type_t)(type); type_t tmp = (type_t)0; if(0) tmp(var); }
|
||||
|
||||
|
||||
// Return value of a coroutine, a coroutine should be scheduled (called) until
|
||||
// it's return value becomes DONE
|
||||
typedef enum {
|
||||
CORO_INIT = 0,
|
||||
CORO_CONT = CORO_INIT,
|
||||
CORO_DONE = 1,
|
||||
CORO_YIELDED = 2,
|
||||
CORO_WAITING = 3,
|
||||
} coroutine;
|
||||
|
||||
// Local continuation of the coroutine, where it left off
|
||||
typedef void* coro_state_t;
|
||||
|
||||
|
||||
/* -------------------------- COROUTINE MANAGEMENT -------------------------- */
|
||||
|
||||
// Initialize the coroutine state
|
||||
#define coro_init(s) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
do { *s = NULL; } while (0)
|
||||
|
||||
// Jump to the previous state where the coroutine left off, __yield flag indicates
|
||||
// wether the coroutine should yield this cycle
|
||||
#define coro_begin(s) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
unsigned char __yield = 0; \
|
||||
do { if(*s != NULL) goto *(*s); } while (0)
|
||||
|
||||
// Just to suppress the unused variable warning when no yield is used
|
||||
#define coro_end() (void)__yield
|
||||
|
||||
// Set a jump with a gcc label as value feature, this is a GNU C extension
|
||||
#define CORO_SET_JUMP(s) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
do { \
|
||||
CORO_CONCAT(LC_LABEL, __LINE__): \
|
||||
*s = &&CORO_CONCAT(LC_LABEL, __LINE__); \
|
||||
} while (0)
|
||||
|
||||
// Yield from a coroutine
|
||||
#define coro_yield(s) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
do { \
|
||||
__yield = 1; \
|
||||
CORO_SET_JUMP(s); \
|
||||
if (__yield == 1) return CORO_YIELDED; \
|
||||
} while (0)
|
||||
|
||||
// Wait until a condition is met (becomes true)
|
||||
#define coro_wait_until(s, cond) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
do { \
|
||||
CORO_SET_JUMP(s); \
|
||||
if (!(cond)) return CORO_WAITING; \
|
||||
} while (0)
|
||||
|
||||
// Shorthand for wait_until
|
||||
#define coro_wait(s, cond) coro_wait_until(s, cond)
|
||||
|
||||
// Wait while a condition remains true
|
||||
#define coro_wait_while(s, cond) coro_wait_until(s, !(cond))
|
||||
|
||||
// Exit from the coroutine, resets the state
|
||||
#define coro_exit(s) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
do { \
|
||||
coro_init(s); \
|
||||
return CORO_DONE; \
|
||||
} while (0)
|
||||
|
||||
// Restart a coroutine, when called it will not resume from where it left off,
|
||||
// instead it will start from the beginning, the only difference with exit is
|
||||
// the return value. To determine wether a coroutine has exited or restarted
|
||||
// is to check it's return value
|
||||
#define coro_restart(s) CORO_CHECK_TYPE(s, coro_state_t*) \
|
||||
do { \
|
||||
coro_init(s); \
|
||||
return CORO_INIT; \
|
||||
} while(0)
|
||||
|
||||
|
||||
/* ------------------------- SEMAPHORE IMPLEMENTATION ----------------------- */
|
||||
// Implements a basic semaphore type with the classic wait and signal operations
|
||||
// semaphores are not bound checked
|
||||
|
||||
typedef int coro_semaphore_t;
|
||||
|
||||
// Initializes a semaphore with a starting value of "count"
|
||||
#define coro_sem_init(sem, count) CORO_CHECK_TYPE(sem, coro_semaphore_t*) \
|
||||
do { \
|
||||
*sem = (int)count; \
|
||||
} while (0)
|
||||
|
||||
// Wait until a semaphore has a value other than zero
|
||||
#define coro_sem_wait(state, sem) \
|
||||
CORO_CHECK_TYPE(state, coro_state_t*) \
|
||||
CORO_CHECK_TYPE(sem, coro_semaphore_t*) \
|
||||
do { \
|
||||
coro_wait_until(state, *(sem) > 0); \
|
||||
--(*sem); \
|
||||
} while (0)
|
||||
|
||||
// Signal a semaphore
|
||||
#define coro_sem_signal(state, sem) \
|
||||
CORO_CHECK_TYPE(state, coro_state_t*) \
|
||||
CORO_CHECK_TYPE(sem, coro_semaphore_t*) \
|
||||
++(*sem)
|
||||
|
||||
|
||||
#endif
|
||||
354
fw/display.c
354
fw/display.c
@ -1,354 +0,0 @@
|
||||
#include <u8g2.h>
|
||||
#include <ch32fun.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "display.h"
|
||||
#include "lib_i2c.h"
|
||||
|
||||
|
||||
static u8g2_t u8g2;
|
||||
static const char digits_lut[] =
|
||||
"0001020304050607080910111213141516171819"
|
||||
"2021222324252627282930313233343536373839"
|
||||
"4041424344454647484950515253545556575859"
|
||||
"6061626364656667686970717273747576777879"
|
||||
"8081828384858687888990919293949596979899";
|
||||
|
||||
|
||||
// GPIO and delay callback for u8g2/u8x8 display driver
|
||||
static uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
switch(msg) {
|
||||
case U8X8_MSG_GPIO_AND_DELAY_INIT:
|
||||
// called once during init phase of u8g2/u8x8
|
||||
// can be used to setup pins
|
||||
printf("TODO: U8X8_MSG_GPIO_AND_DELAY_INIT\n");
|
||||
break;
|
||||
case U8X8_MSG_DELAY_NANO:
|
||||
// delay arg_int * 1 nano second
|
||||
// at 48MHz 1 cycle = 20ns, 1 nop = 1 cycle
|
||||
// the for lopp takes about 2 cycles per iteration
|
||||
for (int i = 0; i < (arg_int/(20*3)); i++) {
|
||||
asm("nop");
|
||||
}
|
||||
break;
|
||||
case U8X8_MSG_DELAY_100NANO:
|
||||
// delay arg_int * 100 nano seconds
|
||||
// at 48MHz 1 cycle = 20ns, 1 nop = 1 cycle
|
||||
// the for lopp takes about 2 cycles per iteration
|
||||
for (int i = 0; i < ((arg_int*100)/(20*3)); i++) {
|
||||
asm("nop");
|
||||
}
|
||||
break;
|
||||
case U8X8_MSG_DELAY_10MICRO:
|
||||
// delay arg_int * 10 micro seconds
|
||||
Delay_Us(arg_int*10);
|
||||
break;
|
||||
case U8X8_MSG_DELAY_MILLI:
|
||||
// delay arg_int * 1 milli second
|
||||
Delay_Ms(arg_int);
|
||||
break;
|
||||
case U8X8_MSG_DELAY_I2C:
|
||||
// arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz
|
||||
// arg_int=1: delay by 5us, arg_int = 4: delay by 1.25us
|
||||
printf("TODO: U8X8_MSG_DELAY_I2C\n");
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D0:
|
||||
// D0 or SPI clock pin: Output level in arg_int
|
||||
//case U8X8_MSG_GPIO_SPI_CLOCK:
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D1:
|
||||
// D1 or SPI data pin: Output level in arg_int
|
||||
//case U8X8_MSG_GPIO_SPI_DATA:
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D2:
|
||||
// D2 pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D3:
|
||||
// D3 pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D4:
|
||||
// D4 pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D5:
|
||||
// D5 pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D6:
|
||||
// D6 pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_D7:
|
||||
// D7 pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_E:
|
||||
// E/WR pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_CS:
|
||||
// CS (chip select) pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_DC:
|
||||
// DC (data/cmd, A0, register select) pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_RESET:
|
||||
funDigitalWrite(PIN_DISP_RST, arg_int);
|
||||
// Reset pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_CS1:
|
||||
// CS1 (chip select) pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_CS2:
|
||||
// CS2 (chip select) pin: Output level in arg_int
|
||||
break;
|
||||
case U8X8_MSG_GPIO_I2C_CLOCK:
|
||||
// arg_int=0: Output low at I2C clock pin
|
||||
// arg_int=1: Input dir with pullup high for I2C clock pin
|
||||
break;
|
||||
case U8X8_MSG_GPIO_I2C_DATA:
|
||||
// arg_int=0: Output low at I2C data pin
|
||||
// arg_int=1: Input dir with pullup high for I2C data pin
|
||||
break;
|
||||
case U8X8_MSG_GPIO_MENU_SELECT:
|
||||
// get menu select pin state
|
||||
u8x8_SetGPIOResult(u8x8, 0);
|
||||
break;
|
||||
case U8X8_MSG_GPIO_MENU_NEXT:
|
||||
// get menu next pin state
|
||||
u8x8_SetGPIOResult(u8x8, 0);
|
||||
break;
|
||||
case U8X8_MSG_GPIO_MENU_PREV:
|
||||
// get menu prev pin state
|
||||
u8x8_SetGPIOResult(u8x8, 0);
|
||||
break;
|
||||
case U8X8_MSG_GPIO_MENU_HOME:
|
||||
// get menu home pin state
|
||||
u8x8_SetGPIOResult(u8x8, 0);
|
||||
break;
|
||||
default:
|
||||
// default return value
|
||||
u8x8_SetGPIOResult(u8x8, 1);
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static uint8_t u8x8_byte_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
|
||||
{
|
||||
static uint8_t buffer[32];
|
||||
static uint8_t buffer_idx;
|
||||
uint8_t *data;
|
||||
|
||||
switch(msg) {
|
||||
case U8X8_MSG_BYTE_INIT:
|
||||
break;
|
||||
case U8X8_MSG_BYTE_SEND:
|
||||
data = (uint8_t*)arg_ptr;
|
||||
while (arg_int > 0) {
|
||||
buffer[buffer_idx++] = *data;
|
||||
data++;
|
||||
arg_int--;
|
||||
}
|
||||
break;
|
||||
case U8X8_MSG_BYTE_START_TRANSFER:
|
||||
buffer_idx = 0;
|
||||
break;
|
||||
case U8X8_MSG_BYTE_END_TRANSFER:
|
||||
i2c_sendBytes(I2C_TARGET, u8x8_GetI2CAddress(u8x8) >> 1, buffer, buffer_idx);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
u8g2_t* display_init(void)
|
||||
{
|
||||
#if SSD1306_128X32
|
||||
u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, U8G2_R0, u8x8_byte_i2c, u8x8_gpio_and_delay);
|
||||
#elif SSD1312_96X16
|
||||
// NOTE: display size is wrong, hardware is 96x16, but driver is configured for 120x28
|
||||
u8g2_Setup_ssd1312_i2c_128x32_f(&u8g2, U8G2_R0, u8x8_byte_i2c, u8x8_gpio_and_delay);
|
||||
#else
|
||||
static_assert(0, "unsupported display");
|
||||
#endif
|
||||
// TODO: log errors and return NULL on failure
|
||||
u8g2_InitDisplay(&u8g2);
|
||||
u8g2_SetPowerSave(&u8g2, 0);
|
||||
u8g2_SetContrast(&u8g2, 255);
|
||||
|
||||
u8g2_SetBitmapMode(&u8g2, 1);
|
||||
u8g2_SetFontMode(&u8g2, 1);
|
||||
|
||||
return &u8g2;
|
||||
}
|
||||
|
||||
|
||||
const char* u16toa(uint16_t value)
|
||||
{
|
||||
// Max uint16_t is 65535 (5 digits) + null terminator
|
||||
static char buf[6];
|
||||
char *p = &buf[5];
|
||||
*p = '\0';
|
||||
|
||||
// Process two digits at a time using the LUT
|
||||
while (value >= 100) {
|
||||
const unsigned int idx = (value % 100) * 2;
|
||||
value /= 100;
|
||||
*--p = digits_lut[idx + 1];
|
||||
*--p = digits_lut[idx];
|
||||
}
|
||||
|
||||
// Handle the remaining value (< 100)
|
||||
if (value < 10) {
|
||||
*--p = (char)('0' + value);
|
||||
} else {
|
||||
const unsigned int idx = value * 2;
|
||||
*--p = digits_lut[idx + 1];
|
||||
*--p = digits_lut[idx];
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
const char* i16toa(int16_t value)
|
||||
{
|
||||
static char buf[7];
|
||||
uint16_t uval;
|
||||
bool negative = false;
|
||||
|
||||
if (value < 0) {
|
||||
negative = true;
|
||||
uval = (uint16_t)-value;
|
||||
} else {
|
||||
uval = (uint16_t)value;
|
||||
}
|
||||
|
||||
char *p = &buf[6];
|
||||
*p = '\0';
|
||||
|
||||
// Same LUT logic as unsigned
|
||||
while (uval >= 100) {
|
||||
const unsigned int idx = (uval % 100) * 2;
|
||||
uval /= 100;
|
||||
*--p = digits_lut[idx + 1];
|
||||
*--p = digits_lut[idx];
|
||||
}
|
||||
|
||||
if (uval < 10) {
|
||||
*--p = (char)('0' + uval);
|
||||
} else {
|
||||
const unsigned int idx = uval * 2;
|
||||
*--p = digits_lut[idx + 1];
|
||||
*--p = digits_lut[idx];
|
||||
}
|
||||
|
||||
if (negative) {
|
||||
*--p = '-';
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
static char str_buf[32];
|
||||
uint8_t str_len;
|
||||
int buf_putc(char c) { str_buf[str_len++] = c; return 0; }
|
||||
const char* buf_get(void) { str_buf[str_len] = '\0'; str_len = 0; return str_buf; }
|
||||
|
||||
|
||||
// 7 segment display segments
|
||||
static const uint8_t seg_left_xbm[] = {0x01,0x03,0x03,0x03,0x03,0x01};
|
||||
static const uint8_t seg_right_xbm[] = {0x02,0x03,0x03,0x03,0x03,0x02};
|
||||
static const uint8_t seg_top_xbm[] = {0x3f,0x1e};
|
||||
static const uint8_t seg_bot_xbm[] = {0x1e,0x3f};
|
||||
static const uint8_t seg_center_xbm[] = {0x1e,0x3f,0x1e};
|
||||
static const uint8_t image_degc_xbm[] = {0x02,0x05,0x1a,0x24,0x04,0x04,0x24,0x18};
|
||||
static const uint8_t image_degf_xbm[] = {0x02,0x05,0x3a,0x08,0x18,0x08,0x08,0x08};
|
||||
|
||||
static void draw_7seg(u8g2_t *u8g2, uint8_t x, uint8_t y, uint8_t n)
|
||||
{
|
||||
switch (n) {
|
||||
case 0:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
|
||||
break;
|
||||
case 1:
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
break;
|
||||
case 2:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
case 3:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
case 4:
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
case 5:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
case 6:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
case 7:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
break;
|
||||
case 8:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+8, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
case 9:
|
||||
u8g2_DrawXBM(u8g2, x+1, y+0, 6, 2, seg_top_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+1, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+6, y+8, 2, 6, seg_right_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+13, 6, 2, seg_bot_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+0, y+1, 2, 6, seg_left_xbm);
|
||||
u8g2_DrawXBM(u8g2, x+1, y+6, 6, 3, seg_center_xbm);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void draw_temp(u8g2_t *u8g2, uint8_t x, uint8_t y, int16_t temp, bool degc)
|
||||
{
|
||||
if (temp > 999 || temp < 0) temp = 0;
|
||||
const char *s = u8x8_u16toa(temp, 3);
|
||||
draw_7seg(u8g2, x+0, y+0, s[0]-'0');
|
||||
draw_7seg(u8g2, x+9, y+0, s[1]-'0');
|
||||
draw_7seg(u8g2, x+18, y+0, s[2]-'0');
|
||||
u8g2_DrawXBM(u8g2, x+27, y+8, 6, 8, degc ? image_degc_xbm : image_degf_xbm);
|
||||
}
|
||||
28
fw/display.h
28
fw/display.h
@ -1,28 +0,0 @@
|
||||
#ifndef _DISPLAY_H
|
||||
#define _DISPLAY_H
|
||||
|
||||
#include <u8g2.h>
|
||||
|
||||
#define SSD1306_128X32 1
|
||||
// #define SSD1312_96X16 1
|
||||
#define PIN_DISP_RST PA7 // display reset
|
||||
|
||||
#ifdef SSD1306_128X32
|
||||
#define x_off 0
|
||||
#define y_off 0
|
||||
#endif
|
||||
|
||||
#ifdef SSD1312_96X16
|
||||
#define x_off 0
|
||||
#define y_off 8
|
||||
#endif
|
||||
|
||||
u8g2_t* display_init(void);
|
||||
const char* i16toa(int16_t value);
|
||||
const char* u16toa(uint16_t value);
|
||||
int buf_putc(char c);
|
||||
const char* buf_get(void);
|
||||
void draw_temp(u8g2_t *u8g2, uint8_t x, uint8_t y, int16_t temp, bool degc);
|
||||
|
||||
|
||||
#endif // _DISPLAY_H
|
||||
47
fw/filter.h
47
fw/filter.h
@ -1,47 +0,0 @@
|
||||
#ifndef _FILTER_H
|
||||
#define _FILTER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
static_assert(-4 >> 1 == -2, ">> doesn't do sign extension");
|
||||
|
||||
// Fixed-Point Exponential Moving Average
|
||||
// alpha = 1/2^k
|
||||
// x: output value
|
||||
// s: current sample
|
||||
#define U16_FP_EMA_K2(x, s) (uint16_t)((((uint32_t)(x)<<2) - (x) + (s)) >> 2)
|
||||
#define U16_FP_EMA_K4(x, s) (uint16_t)((((uint32_t)(x)<<4) - (x) + (s)) >> 4)
|
||||
#define U16_FP_EMA_K8(x, s) (uint16_t)((((uint32_t)(x)<<8) - (x) + (s)) >> 8)
|
||||
#define U16_FP_EMA_K16(x, s) (uint16_t)((((uint32_t)(x)<<16) - (x) + (s)) >> 16)
|
||||
|
||||
#define I16_FP_EMA_K2(x, s) (int16_t)((((int32_t)(x)<<2) - (x) + (s)) >> 2)
|
||||
#define I16_FP_EMA_K4(x, s) (int16_t)((((int32_t)(x)<<4) - (x) + (s)) >> 4)
|
||||
#define I16_FP_EMA_K8(x, s) (int16_t)((((int32_t)(x)<<8) - (x) + (s)) >> 8)
|
||||
#define I16_FP_EMA_K16(x, s) (int16_t)((((int32_t)(x)<<16) - (x) + (s)) >> 16)
|
||||
|
||||
// Integer square root (binary search)
|
||||
// https://en.wikipedia.org/wiki/Integer_square_root
|
||||
static inline uint16_t isqrt(uint32_t x)
|
||||
{
|
||||
uint16_t l = 0; // lower bound of the square root
|
||||
uint16_t r = x + 1; // upper bound of the square root
|
||||
|
||||
while (l != r - 1) {
|
||||
uint32_t m = (l + r) / 2; // midpoint to test
|
||||
if (m * m <= x) {
|
||||
l = m;
|
||||
} else {
|
||||
r = m;
|
||||
}
|
||||
}
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
#endif // _FILTER_H
|
||||
123
fw/fpmath.h
123
fw/fpmath.h
@ -1,123 +0,0 @@
|
||||
#ifndef _FPMATH_H
|
||||
#define _FPMATH_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* Minimal Fixed-Point math library implementation
|
||||
*/
|
||||
|
||||
// This library depends on sign extension
|
||||
static_assert(-4 >> 1 == -2, ">> doesn't do sign extension");
|
||||
|
||||
|
||||
// Fixed point signed type in 16.16 format
|
||||
#define FP_R 16
|
||||
typedef int32_t fp16_t;
|
||||
|
||||
|
||||
#define POW10(d) ( \
|
||||
((d) == 0) ? 1L : \
|
||||
((d) == 1) ? 10L : \
|
||||
((d) == 2) ? 100L : \
|
||||
((d) == 3) ? 1000L : \
|
||||
((d) == 4) ? 10000L : \
|
||||
((d) == 5) ? 100000L : \
|
||||
((d) == 6) ? 1000000L : \
|
||||
((d) == 7) ? 10000000L : \
|
||||
((d) == 8) ? 100000000L : 1000000000L)
|
||||
|
||||
|
||||
static inline fp16_t i2fp(int16_t i)
|
||||
{
|
||||
return (int32_t)i << FP_R;
|
||||
}
|
||||
|
||||
|
||||
static inline int16_t fp2i(fp16_t f)
|
||||
{
|
||||
return (int16_t)(f >> FP_R);
|
||||
}
|
||||
|
||||
|
||||
static inline fp16_t num2fp(int16_t i, int16_t f, uint8_t d)
|
||||
{
|
||||
return i2fp(i) + (i < 0 ? -(i2fp(f)/POW10(d)) : i2fp(f)/POW10(d));
|
||||
}
|
||||
|
||||
|
||||
// Saturating addition
|
||||
static inline fp16_t fp_add(fp16_t a, fp16_t b)
|
||||
{
|
||||
fp16_t r;
|
||||
if (__builtin_add_overflow(a, b, &r)) {
|
||||
// Positive overflow
|
||||
if (a > 0 && b > 0) {
|
||||
r = INT32_MAX;
|
||||
} else {
|
||||
r = INT32_MIN;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
static inline fp16_t fp_sub(fp16_t a, fp16_t b)
|
||||
{
|
||||
fp16_t r;
|
||||
if (__builtin_sub_overflow(a, b, &r)) {
|
||||
if (a >= 0 && b < 0) {
|
||||
r = INT32_MAX;
|
||||
} else {
|
||||
r = INT32_MIN;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
// Saturating multiplication
|
||||
static inline fp16_t fp_mul(fp16_t a, fp16_t b)
|
||||
{
|
||||
int64_t r = ((int64_t)a * (int64_t)b + 0x8000) >> 16;
|
||||
if (r > (int64_t)0x7fffffff) return INT32_MAX;
|
||||
if (r < -(int64_t)0x80000000) return INT32_MIN;
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
static inline fp16_t fp_div(fp16_t a, fp16_t b)
|
||||
{
|
||||
if (b == 0) {
|
||||
return (a >= 0) ? INT32_MAX : INT32_MIN;
|
||||
}
|
||||
|
||||
int64_t r = ((int64_t)a << 16) / b;
|
||||
|
||||
// Saturate to 32-bit bounds
|
||||
if (r > (int64_t)0x7fffffff) return INT32_MAX;
|
||||
if (r < -(int64_t)0x80000000) return INT32_MIN;
|
||||
|
||||
return (fp16_t)r;
|
||||
}
|
||||
|
||||
|
||||
static inline fp16_t fp_clamp(fp16_t x, fp16_t min, fp16_t max)
|
||||
{
|
||||
return x < min ? min : (x > max ? max : x);
|
||||
}
|
||||
|
||||
|
||||
static inline fp16_t fp_map(fp16_t x, fp16_t src_start, fp16_t src_end, fp16_t dst_start, fp16_t dst_end)
|
||||
{
|
||||
fp16_t x_offset = fp_sub(x, src_start);
|
||||
fp16_t dst_range = fp_sub(dst_end, dst_start);
|
||||
fp16_t src_range = fp_sub(src_end, src_start);
|
||||
fp16_t scaled = fp_mul(x_offset, dst_range);
|
||||
fp16_t mapped_offset = fp_div(scaled, src_range);
|
||||
return fp_add(mapped_offset, dst_start);
|
||||
}
|
||||
|
||||
|
||||
#endif // _FPMATH_H
|
||||
@ -1,43 +0,0 @@
|
||||
#ifndef _FUNCONFIG_H
|
||||
#define _FUNCONFIG_H
|
||||
|
||||
#define FUNCONF_USE_DEBUGPRINTF 0 // can only have one printf
|
||||
#define FUNCONF_USE_USBPRINTF 1
|
||||
#define FUNCONF_DEBUG_HARDFAULT 0
|
||||
#define CH32X035 1
|
||||
#define I2C_TARGET I2C1
|
||||
#define FRAME_TIME_MS 20 // 50Hz
|
||||
#define PWM_FREQ_HZ 100000 // TIM3 PWM frequency
|
||||
|
||||
// Pin definitions
|
||||
#define PIN_VBUS PA0 // vbus voltage feedback
|
||||
#define PIN_CURRENT PA1 // current feedback
|
||||
#define PIN_NTC PA2 // ntc temperature sensor
|
||||
#define PIN_TEMP PA3 // thermocouple amplifier
|
||||
#define PIN_12V PA5 // 12V regulator enable
|
||||
#define PIN_HEATER PA6 // power mosfet gate control
|
||||
#define PIN_ENC_A PB3 // rotary encoder A
|
||||
#define PIN_ENC_B PB11 // rotary encoder B
|
||||
#define PIN_BTN PB1 // rotary encoder button
|
||||
|
||||
// Analog channel definitions
|
||||
#define VBUS_ADC_CHANNEL ANALOG_0 // PA0
|
||||
#define CURRENT_ADC_CHANNEL ANALOG_1 // PA1
|
||||
#define NTC_ADC_CHANNEL ANALOG_2 // PA2
|
||||
#define TEMP_ADC_CHANNEL ANALOG_3 // PA3
|
||||
#define VREF_INT_CHANNEL 15 // Internal channel set to 1.2V reference
|
||||
|
||||
#define ENCODER_INV true
|
||||
#define ENCODER_FAST 3
|
||||
|
||||
#define MAX_BOARD_TEMP 50
|
||||
#define MAX_TIP_TEMP 500
|
||||
#define TURN_OFF_DELAY 3
|
||||
#define CYCLES_PER_MEASURE 2
|
||||
#define BOARD_MAX_VOLTAGE 28000
|
||||
#define MIN_TIP_SET_TEMP 100
|
||||
#define MAX_TIP_SET_TEMP 420
|
||||
|
||||
|
||||
|
||||
#endif // _FUNCONFIG_H
|
||||
231
fw/lib_i2c.c
231
fw/lib_i2c.c
@ -1,231 +0,0 @@
|
||||
// MIT License
|
||||
// Copyright (c) 2025 UniTheCat
|
||||
// Tested with Ch32X03x and CH32V30x
|
||||
|
||||
#include "lib_i2c.h"
|
||||
|
||||
|
||||
//! ####################################
|
||||
//! I2C INIT FUNCTIONS
|
||||
//! ####################################
|
||||
|
||||
void i2c_init(I2C_TypeDef* I2Cx, u32 PCLK, u32 i2cSpeed_Hz) {
|
||||
// Enable I2C clock
|
||||
if (I2Cx == I2C1) {
|
||||
RCC->APB1PCENR |= RCC_APB1Periph_I2C1;
|
||||
}
|
||||
#ifdef I2C2
|
||||
else if (I2Cx == I2C2) {
|
||||
RCC->APB1PCENR |= RCC_APB1Periph_I2C2;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Disable I2C before configuration
|
||||
I2Cx->CTLR1 &= ~I2C_CTLR1_PE;
|
||||
|
||||
// configure I2C clock
|
||||
I2Cx->CTLR2 = (PCLK / 1000000);
|
||||
I2Cx->CKCFGR = PCLK / (i2cSpeed_Hz << 1); // PeripheralClock / (100KHz * 2)
|
||||
|
||||
// Enable I2C
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_PE;
|
||||
|
||||
// Enable ACK
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_ACK;
|
||||
}
|
||||
|
||||
u8 i2c_start(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 isRead) {
|
||||
//# Wait while BUSY, when BUSY is set to 0 then continue
|
||||
u32 timeout = I2C_DEFAULT_TIMEOUT;
|
||||
while((I2Cx->STAR2 & I2C_STAR2_BUSY) && --timeout);
|
||||
// if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x11; }
|
||||
|
||||
//# Generate START condition
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_START;
|
||||
|
||||
//# Wait while SB is 0, when SB is set to 1 then continue
|
||||
timeout = I2C_DEFAULT_TIMEOUT;
|
||||
while(!(I2Cx->STAR1 & I2C_STAR1_SB) && --timeout);
|
||||
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x12; }
|
||||
// printf("timeoutB: %d\n", I2C_DEFAULT_TIMEOUT - timeout);
|
||||
|
||||
//# Send address + read/write. Write = 0, Read = 1
|
||||
I2Cx->DATAR = (i2cAddress << 1) | isRead;
|
||||
|
||||
//# Wait while ADDR is 0, if ADDR is set to 1 then continue
|
||||
timeout = I2C_DEFAULT_TIMEOUT;
|
||||
while(!(I2Cx->STAR1 & I2C_STAR1_ADDR) && --timeout);
|
||||
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x13; }
|
||||
// printf("timeoutC: %d\n", I2C_DEFAULT_TIMEOUT - timeout);
|
||||
|
||||
//! REQUIRED. Clear ADDR by reading STAR1 then STAR2
|
||||
(void)I2Cx->STAR1;
|
||||
(void)I2Cx->STAR2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void i2c_stop(I2C_TypeDef* I2Cx)
|
||||
{
|
||||
//# Generate STOP condition
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
|
||||
}
|
||||
|
||||
void i2c_scan(I2C_TypeDef* I2Cx, void (*onPingFound)(u8 address)) {
|
||||
// mininum 0x08 to 0x77 (0b1110111)
|
||||
for (int i = 0x08; i < 0x77; i++) {
|
||||
u8 ping = i2c_start(I2Cx, i, 1);
|
||||
|
||||
//# Generate STOP condition
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
|
||||
if (ping == 0) onPingFound(i);
|
||||
}
|
||||
}
|
||||
|
||||
//! ####################################
|
||||
//! I2C SEND FUNCTION
|
||||
//! ####################################
|
||||
|
||||
u8 i2c_sendBytes_noStop(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len) {
|
||||
u8 err = i2c_start(I2Cx, i2cAddress, 0); // Write mode
|
||||
if (err) return err;
|
||||
u32 timeout;
|
||||
|
||||
for(u8 i = 0; i < len; i++) {
|
||||
//# Wait for register empty
|
||||
timeout = I2C_DEFAULT_TIMEOUT;
|
||||
while(!(I2Cx->STAR1 & I2C_STAR1_TXE) && --timeout);
|
||||
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x21; }
|
||||
I2Cx->DATAR = buffer[i]; // Send data
|
||||
}
|
||||
|
||||
//# Wait for transmission complete. Wait while BTF is 0, when set to 1 continue
|
||||
timeout = I2C_DEFAULT_TIMEOUT;
|
||||
while(!(I2Cx->STAR1 & I2C_STAR1_BTF) && --timeout);
|
||||
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x22; }
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 i2c_sendBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len) {
|
||||
u8 err = i2c_sendBytes_noStop(I2Cx, i2cAddress, buffer, len);
|
||||
//# Generate STOP condition
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
|
||||
return err;
|
||||
}
|
||||
|
||||
u8 i2c_sendByte(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 data) {
|
||||
return i2c_sendBytes(I2Cx, i2cAddress, &data, 1);
|
||||
}
|
||||
|
||||
|
||||
//! ####################################
|
||||
//! I2C RECEIVE FUNCTIONS
|
||||
//! ####################################
|
||||
|
||||
u8 i2c_readBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, u8* buffer, u8 len) {
|
||||
u8 err = i2c_start(I2Cx, i2cAddress, 1); // Read mode
|
||||
if (err) return err;
|
||||
|
||||
//# Enable ACK at the beginning
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_ACK;
|
||||
|
||||
for(u8 i = 0; i < len; i++) {
|
||||
//# Before reading the last bytes, disable ACK to signal the slave to stop sending
|
||||
if(i == len-1) I2Cx->CTLR1 &= ~I2C_CTLR1_ACK;
|
||||
|
||||
//# Wait for data. Wait while RxNE is 0, when set to 1 continue
|
||||
u32 timeout = I2C_DEFAULT_TIMEOUT;
|
||||
while(!(I2Cx->STAR1 & I2C_STAR1_RXNE) && --timeout);
|
||||
if (timeout == 0) { I2Cx->CTLR1 |= I2C_CTLR1_STOP; return 0x31; }
|
||||
|
||||
//# Read data
|
||||
buffer[i] = I2Cx->DATAR;
|
||||
}
|
||||
|
||||
//# Generate STOP condition
|
||||
I2Cx->CTLR1 |= I2C_CTLR1_STOP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Write to register and then do read data, no stop inbetween
|
||||
u8 i2c_readRegTx_buffer(I2C_TypeDef* I2Cx, u8 i2cAddress,
|
||||
u8 *tx_buf, u8 tx_len, u8 *rx_buf, u8 rx_len
|
||||
) {
|
||||
u8 err = i2c_sendBytes_noStop(I2Cx, i2cAddress, tx_buf, tx_len); // Send register address
|
||||
if (err) return err;
|
||||
err = i2c_readBytes(I2Cx, i2cAddress, rx_buf, rx_len); // Read data
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
//! ####################################
|
||||
//! I2C SLAVE FUNCTIONS
|
||||
//! ####################################
|
||||
|
||||
void i2c_slave_init(I2C_TypeDef* I2Cx, u16 self_addr, u32 PCLK, u32 i2cSpeed_Hz) {
|
||||
i2c_init(I2Cx, PCLK, i2cSpeed_Hz);
|
||||
|
||||
// Configure the CH32 I2C slave address to make it an I2C slave
|
||||
I2Cx->OADDR1 = (self_addr << 1);
|
||||
I2Cx->OADDR2 = 0;
|
||||
|
||||
I2Cx->CTLR2 |= I2C_CTLR2_ITEVTEN | I2C_CTLR2_ITERREN | I2C_CTLR2_ITBUFEN;
|
||||
|
||||
// Enable Event and Error Interrupts
|
||||
if (I2Cx == I2C1) {
|
||||
NVIC_EnableIRQ(I2C1_EV_IRQn); // I2C Event interrupt
|
||||
NVIC_EnableIRQ(I2C1_ER_IRQn); // I2C Error interrupt
|
||||
}
|
||||
|
||||
#ifdef I2C2
|
||||
else if (I2Cx == I2C2) {
|
||||
NVIC_EnableIRQ(I2C2_EV_IRQn); // I2C Event interrupt
|
||||
NVIC_EnableIRQ(I2C2_ER_IRQn); // I2C Error interrupt
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void I2C1_ER_IRQHandler(void) __attribute__((interrupt));
|
||||
void I2C1_ER_IRQHandler(void) {
|
||||
// get I2C status
|
||||
uint16_t STAR1 = I2C1->STAR1;
|
||||
|
||||
// Obtain and clear Bus error
|
||||
if (STAR1 & I2C_STAR1_BERR) {
|
||||
I2C1->STAR1 &= ~(I2C_STAR1_BERR);
|
||||
}
|
||||
|
||||
// Obtain and clear Arbitration lost error
|
||||
if (STAR1 & I2C_STAR1_ARLO) {
|
||||
I2C1->STAR1 &= ~(I2C_STAR1_ARLO);
|
||||
}
|
||||
|
||||
// Obtain and clear Acknowledge failure error
|
||||
if (STAR1 & I2C_STAR1_AF) {
|
||||
I2C1->STAR1 &= ~(I2C_STAR1_AF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef I2C2
|
||||
void I2C2_ER_IRQHandler(void) __attribute__((interrupt));
|
||||
void I2C2_ER_IRQHandler(void) {
|
||||
// get I2C status
|
||||
uint16_t STAR1 = I2C2->STAR1;
|
||||
|
||||
// Obtain and clear Bus error
|
||||
if (STAR1 & I2C_STAR1_BERR) {
|
||||
I2C2->STAR1 &= ~(I2C_STAR1_BERR);
|
||||
}
|
||||
|
||||
// Obtain and clear Arbitration lost error
|
||||
if (STAR1 & I2C_STAR1_ARLO) {
|
||||
I2C2->STAR1 &= ~(I2C_STAR1_ARLO);
|
||||
}
|
||||
|
||||
// Obtain and clear Acknowledge failure error
|
||||
if (STAR1 & I2C_STAR1_AF) {
|
||||
I2C2->STAR1 &= ~(I2C_STAR1_AF);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
61
fw/lib_i2c.h
61
fw/lib_i2c.h
@ -1,61 +0,0 @@
|
||||
// MIT License
|
||||
// Copyright (c) 2025 UniTheCat
|
||||
// Tested with Ch32X03x and CH32V30x
|
||||
|
||||
#ifndef _LIB_I2C_H
|
||||
#define _LIB_I2C_H
|
||||
|
||||
#include <ch32fun.h>
|
||||
|
||||
|
||||
#define I2C_DEFAULT_TIMEOUT 50000
|
||||
|
||||
|
||||
#if defined(FUNCONF_USE_DEBUGPRINTF) || defined(FUNCONF_USE_USBPRINTF) || defined(FUNCONF_USE_UARTPRINTF)
|
||||
#include <stdio.h>
|
||||
static inline void print_i2c_device(uint8_t addr)
|
||||
{
|
||||
printf("Device found at 0x%02X\n", addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//! ####################################
|
||||
//! I2C INIT FUNCTIONS
|
||||
//! ####################################
|
||||
|
||||
void i2c_init(I2C_TypeDef* I2Cx, u32 PCLK, u32 i2cSpeed_Hz);
|
||||
u8 i2c_start(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 isRead);
|
||||
void i2c_stop(I2C_TypeDef* I2Cx);
|
||||
void i2c_scan(I2C_TypeDef* I2Cx, void (*onPingFound)(u8 address));
|
||||
|
||||
//! ####################################
|
||||
//! I2C SEND FUNCTION
|
||||
//! ####################################
|
||||
|
||||
u8 i2c_sendBytes_noStop(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len);
|
||||
u8 i2c_sendBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, const u8* buffer, u8 len);
|
||||
u8 i2c_sendByte(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 data);
|
||||
|
||||
//! ####################################
|
||||
//! I2C RECEIVE FUNCTIONS
|
||||
//! ####################################
|
||||
|
||||
u8 i2c_readBytes(I2C_TypeDef* I2Cx, u8 i2cAddress, u8* buffer, u8 len);
|
||||
u8 i2c_readByte(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 reg, u8* buffer);
|
||||
|
||||
// Write to register and then do read data, no stop inbetween
|
||||
u8 i2c_readRegTx_buffer(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 *tx_buf, u8 tx_len, u8 *rx_buf, u8 rx_len);
|
||||
inline u8 i2c_readReg_buffer(I2C_TypeDef* I2Cx, u8 i2cAddress, u8 reg, u8 *rx_buf, u8 rx_len)
|
||||
{
|
||||
return i2c_readRegTx_buffer(I2Cx, i2cAddress, ®, 1, rx_buf, rx_len);
|
||||
}
|
||||
|
||||
//! ####################################
|
||||
//! I2C SLAVE FUNCTIONS
|
||||
//! ####################################
|
||||
|
||||
void i2c_slave_init(I2C_TypeDef* I2Cx, u16 self_addr, u32 PCLK, u32 i2cSpeed_Hz);
|
||||
|
||||
|
||||
#endif // _LIB_I2C_H
|
||||
694
fw/main.c
694
fw/main.c
@ -1,694 +0,0 @@
|
||||
#include <ch32fun.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <fsusb.h>
|
||||
|
||||
#include "funconfig.h"
|
||||
#include "lib_i2c.h"
|
||||
#include "display.h"
|
||||
#include "filter.h"
|
||||
#include "sc7a20.h"
|
||||
#include "pd.h"
|
||||
#include "ntc.h"
|
||||
#include "fpmath.h"
|
||||
#include "coroutine.h"
|
||||
|
||||
|
||||
// Task timers
|
||||
struct timer {
|
||||
uint32_t start, set;
|
||||
};
|
||||
|
||||
// Set a timer, call timer_expired repeatedly to update it
|
||||
static inline void timer_set(struct timer *t, uint32_t ms)
|
||||
{
|
||||
t->start = funSysTick32();
|
||||
t->set = Ticks_from_Ms(ms);
|
||||
}
|
||||
|
||||
// Check if enough time has passed from timer_set call
|
||||
static inline bool timer_expired(struct timer *t)
|
||||
{
|
||||
return funSysTick32() > (t->start + t->set);
|
||||
}
|
||||
|
||||
|
||||
// Button
|
||||
struct button {
|
||||
bool now, prev;
|
||||
};
|
||||
|
||||
static inline void button_init(struct button *btn, bool pullup)
|
||||
{
|
||||
btn->now = btn->prev = pullup;
|
||||
}
|
||||
|
||||
static inline void button_update(struct button *btn, bool state)
|
||||
{
|
||||
btn->prev = btn->now;
|
||||
btn->now = state;
|
||||
}
|
||||
|
||||
#define button_rising(btn) ((btn).now == true && (btn).prev == false)
|
||||
#define button_falling(btn) ((btn).now == false && (btn).prev == true)
|
||||
|
||||
|
||||
/* ------------------------------ Global State ------------------------------ */
|
||||
u8g2_t *u8g2; // Display state
|
||||
int16_t encoder; // Rotary encoder counter
|
||||
struct pd_profile_t pd_profile; // USB Power Delivery profile
|
||||
uint16_t vcc_mv = 3300; // Logic (and analog) voltage
|
||||
uint16_t tip_mv; // Tip amplifier reading in mV
|
||||
uint16_t tip_temp_c; // Converted tip temperature in degrees C
|
||||
int16_t temp_c; // Board temperature in degrees C
|
||||
uint16_t vbus_mv; // USB bus voltage in mV
|
||||
uint16_t current_ma; // USB bus current to the heater in mA
|
||||
uint16_t power; // Current power provided to the heater
|
||||
uint16_t duty; // Current mosfet driver duty cycle (0-100%)
|
||||
bool enabled = false; // Power electronics enabled
|
||||
|
||||
|
||||
// convert the raw TPA191 adc reading to a current in milliamps
|
||||
static inline int16_t get_current_ma(uint16_t adc_reading)
|
||||
{
|
||||
// Rshunt = 4 milliOhm
|
||||
// Gain = 100
|
||||
u32 mv = ((u32)adc_reading * vcc_mv) / 4096;
|
||||
return (mv * 10) / 4;
|
||||
}
|
||||
|
||||
|
||||
// this callback is mandatory when FUNCONF_USE_USBPRINTF is defined,
|
||||
// can be empty though
|
||||
void handle_usbfs_input(int numbytes, uint8_t *data)
|
||||
{
|
||||
(void)numbytes;
|
||||
(void)data;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* __ ____ ____
|
||||
* A: |____| |____| |____
|
||||
* ____ ____ __
|
||||
* B: ____| |____| |____|
|
||||
* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
|
||||
* f r r f f r r f f r
|
||||
* |<---->| single detent
|
||||
*/
|
||||
void update_encoder(void)
|
||||
{
|
||||
// 0 = 00, 1 = 01, 2 = 10, 3 = 11
|
||||
static uint8_t last_state = 0;
|
||||
static int8_t count;
|
||||
// Lookup table: state_table[last_state][current_state]
|
||||
// 0 = invalid move or bounce (ignore)
|
||||
// 1 = valid forward step
|
||||
// -1 = valid backward step
|
||||
static const int8_t state_table[4][4] = {
|
||||
{ 0, 1, -1, 0}, // from 00
|
||||
{-1, 0, 0, 1}, // from 01
|
||||
{ 1, 0, 0, -1}, // from 10
|
||||
{ 0, -1, 1, 0} // from 11
|
||||
};
|
||||
|
||||
// FIXME: even with interrupts disabled and debounce, a single detent triggers
|
||||
// multiple interrupts, leading to multiple encoder updates in a short time.
|
||||
if (funDigitalRead(PIN_BTN) == 0) return;
|
||||
bool a = funDigitalRead(PIN_ENC_A);
|
||||
bool b = funDigitalRead(PIN_ENC_B);
|
||||
Delay_Us(100);
|
||||
if (a != funDigitalRead(PIN_ENC_A) || b != funDigitalRead(PIN_ENC_B))
|
||||
return; // debounce
|
||||
|
||||
uint8_t current_state = (a << 1) | b;
|
||||
|
||||
// Find the movement direction based on transition
|
||||
count += state_table[last_state][current_state];
|
||||
|
||||
#if ENCODER_INV
|
||||
if (count == 4) encoder--, count = 0;
|
||||
if (count == -4) encoder++, count = 0;
|
||||
#else
|
||||
if (count == 4) encoder++, count = 0;
|
||||
if (count == -4) encoder--, count = 0;
|
||||
#endif
|
||||
|
||||
// Save current state for the next interrupt
|
||||
last_state = current_state;
|
||||
}
|
||||
|
||||
// Attached to PIN_ENC_A rising and falling edges
|
||||
void EXTI7_0_IRQHandler(void) __attribute__((interrupt));
|
||||
void EXTI7_0_IRQHandler(void)
|
||||
{
|
||||
__disable_irq();
|
||||
update_encoder();
|
||||
EXTI->INTFR = EXTI_Line3;
|
||||
__enable_irq();
|
||||
}
|
||||
|
||||
// Attached to PIN_ENC_B rising and falling edges
|
||||
void EXTI15_8_IRQHandler(void) __attribute__((interrupt));
|
||||
void EXTI15_8_IRQHandler(void)
|
||||
{
|
||||
__disable_irq();
|
||||
update_encoder();
|
||||
EXTI->INTFR = EXTI_Line11;
|
||||
__enable_irq();
|
||||
}
|
||||
|
||||
|
||||
// Procedure to get hardware I2C working on the CH32X035F8U6
|
||||
static inline void setup_i2c(void)
|
||||
{
|
||||
// Order here matters, first initialize the AFIO and I2C subsystems then
|
||||
// change register values, do that the other way around and the configuration
|
||||
// wont take effect
|
||||
// Enable AFIO (Alternate Function IO)
|
||||
RCC->APB2PCENR |= RCC_AFIOEN;
|
||||
// Init I2C
|
||||
i2c_init(I2C_TARGET, FUNCONF_SYSTEM_CORE_CLOCK, 400000);
|
||||
|
||||
// To utilize the I2C bus we need to disable SWD first, since the pins overlap
|
||||
AFIO->PCFR1 &= ~(0b0111 << 24);
|
||||
AFIO->PCFR1 |= 0b0100 << 24;
|
||||
|
||||
// Map SCL to PC18 and SDA to PC19
|
||||
AFIO->PCFR1 |= 0b0101 << 2;
|
||||
// Manually set the I2C pins to Alternate Function IO, CNF=10b, MODE=10b
|
||||
GPIOC->CFGXR &= ~((0xF << 8) | (0xF << 12)); // first clear the bits
|
||||
// then set them
|
||||
GPIOC->CFGXR |= 0b1010 << 8; // PC18
|
||||
GPIOC->CFGXR |= 0b1010 << 12; // PC19
|
||||
}
|
||||
|
||||
|
||||
volatile uint16_t adc_buffer[16];
|
||||
// Set-up the adc to perform continous conversion of enabled channels, enable
|
||||
// channel injection and setup DMA to automatically transfer conversion results
|
||||
// to a buffer
|
||||
static inline void setup_adc_and_dma(uint8_t *channels, uint8_t ch_size, uint8_t *injected, uint8_t in_size)
|
||||
{
|
||||
if (channels == NULL || ch_size == 0) return;
|
||||
// FIXME: for now only support a single configuration register, so at max 6 channels
|
||||
// I don't want to implement logic to switch registers right now
|
||||
// TODO: report an error
|
||||
if (ch_size > 6) return;
|
||||
|
||||
// General ADC initialization, I use this only for enabling clocks and such
|
||||
funAnalogInit(); // general initialization
|
||||
|
||||
// Set the SCAN and CONT bits to enter continous conversion mode
|
||||
// Do not set the IAUTO bit to ensure injected channels are converted only
|
||||
// when specified by software
|
||||
// Set the regular channel trigger mode to software (EXTSEL = 0b111) to ensure
|
||||
// conversion starts in sync with DMA (this should already be done by funAnalogInit())
|
||||
ADC1->CTLR1 |= ADC_SCAN;
|
||||
ADC1->CTLR2 |= ADC_CONT | ADC_EXTSEL;
|
||||
|
||||
// Setup regular channels (scanned continously)
|
||||
// TODO: setup sampling time
|
||||
for (uint8_t i = 0; i < ch_size; i++) {
|
||||
// Increase sampling time to have less cross talk between channels
|
||||
// 0b111 means 11 ADC clock cycles (max)
|
||||
if (channels[i] < 10) {
|
||||
ADC1->SAMPTR2 |= 0b111 << (channels[i]*3);
|
||||
} else {
|
||||
ADC1->SAMPTR1 |= 0b111 << ((channels[i]-10)*3);
|
||||
}
|
||||
ADC1->RSQR3 |= channels[i] << (i*5);
|
||||
}
|
||||
// Set the number of normal conversion channels
|
||||
ADC1->RSQR1 |= (ch_size-1) << 20;
|
||||
|
||||
// Set-up injection channels
|
||||
// The injection channel register allows for up to 4 channels, if the buffer is larger
|
||||
// skip this step
|
||||
// TODO: report an error
|
||||
if (injected != NULL && in_size != 0 && in_size <= 4) {
|
||||
// enable injection group
|
||||
// JEXTSEL = 0b111 (software trigger)
|
||||
ADC1->CTLR2 |= ADC_JEXTSEL;
|
||||
for (uint8_t i = 0; i < in_size; i++) {
|
||||
ADC1->ISQR |= injected[i] << ((4-in_size+i)*5);
|
||||
}
|
||||
// Set the number of injection channels
|
||||
ADC1->ISQR |= (in_size-1) << 20;
|
||||
}
|
||||
|
||||
// Set-up DMA, ADC is connected only to channel 1
|
||||
// Turn on DMA
|
||||
RCC->AHBPCENR |= RCC_AHBPeriph_DMA1;
|
||||
// 1. Set the address of the source peripheral, in this case the output
|
||||
// register of the ADC
|
||||
DMA1_Channel1->PADDR = (uint32_t)&(ADC1->RDATAR);
|
||||
// 2. Set the destination (base) address of the data
|
||||
DMA1_Channel1->MADDR = (uint32_t)adc_buffer;
|
||||
// 3. Set the number of transfers to be done each cycle, in this case it's
|
||||
// the same as the number of regular conversion cycles
|
||||
DMA1_Channel1->CNTR = ch_size;
|
||||
// 4. Set mode: Peripheral to Memory, MEM2MEM=0 DIR=0
|
||||
// Circular mode CIRC=1, restart after CNTR transfers
|
||||
// Max priority to not lose conversions and offset values in the buffer
|
||||
DMA1_Channel1->CFGR =
|
||||
DMA_M2M_Disable |
|
||||
DMA_Priority_VeryHigh |
|
||||
DMA_MemoryDataSize_HalfWord |
|
||||
DMA_PeripheralDataSize_HalfWord |
|
||||
DMA_MemoryInc_Enable |
|
||||
DMA_Mode_Circular |
|
||||
DMA_DIR_PeripheralSRC;
|
||||
// Turn on DMA channel 1
|
||||
DMA1_Channel1->CFGR |= DMA_CFGR1_EN;
|
||||
|
||||
// Enable DMA requests from the ADC
|
||||
ADC1->CTLR2 |= ADC_DMA;
|
||||
// Power up ADC again
|
||||
ADC1->CTLR2 |= ADC_ADON;
|
||||
// start conversion
|
||||
ADC1->CTLR2 |= ADC_SWSTART;
|
||||
}
|
||||
|
||||
|
||||
// Perform a conversion on the injected ADC channels, this is synchronous and
|
||||
// halts conversion on the normal channels until it completes
|
||||
volatile uint16_t injection_results[4];
|
||||
static inline bool adc_injection_conversion() {
|
||||
// Clear any pending flags
|
||||
ADC1->STATR &= ~(ADC_JEOC);
|
||||
|
||||
// Start injection conversion using external trigger method
|
||||
ADC1->CTLR2 |= ADC_JSWSTART;
|
||||
|
||||
// Wait for all conversions to complete
|
||||
s32 timeout = 1000000;
|
||||
while(!(ADC1->STATR & ADC_JEOC) && timeout--) {}
|
||||
|
||||
if (timeout <= 0) return false;
|
||||
|
||||
// Read all results
|
||||
injection_results[0] = ADC1->IDATAR1 & 0x0FFF;
|
||||
injection_results[1] = ADC1->IDATAR2 & 0x0FFF;
|
||||
injection_results[2] = ADC1->IDATAR3 & 0x0FFF;
|
||||
injection_results[3] = ADC1->IDATAR4 & 0x0FFF;
|
||||
|
||||
// Clear JEOC flag
|
||||
ADC1->STATR &= ~ADC_JEOC;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// mask for the CCxP bits
|
||||
// when set PWM outputs are held HIGH by default and pulled LOW
|
||||
// when zero PWM outputs are held LOW by default and pulled HIGH
|
||||
// #define TIM3_DEFAULT 0xff
|
||||
#define TIM3_DEFAULT 0x00
|
||||
static inline void setup_pwm(void)
|
||||
{
|
||||
// Enable TIM3 clock
|
||||
RCC->APB1PCENR |= RCC_APB1Periph_TIM3;
|
||||
|
||||
// Since TIM3 is enabled with TIM3->SMCFGR.SMS = 0b000 (default value) the
|
||||
// clock source is the internal clock
|
||||
// The internal clock goes through the HBB prescaler RCC->CFGR0.HPRE which
|
||||
// by default is disabled
|
||||
|
||||
// Reset TIM3 to init all regs
|
||||
RCC->APB1PRSTR |= RCC_APB1Periph_TIM3;
|
||||
RCC->APB1PRSTR &= ~RCC_APB1Periph_TIM3;
|
||||
|
||||
// set TIM3 clock prescaler divider
|
||||
TIM3->PSC = 0x0000; // no prescaler
|
||||
// set PWM total cycle width
|
||||
static_assert((FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1) < 0xffff, "PWM_FREQ_HZ too low for TIM3");
|
||||
TIM3->ATRLR = FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1;
|
||||
|
||||
// for channel 1 let CCxS stay 00 (output), set OC1M to 110 (PWM 1)
|
||||
// enabling preload (OC1PE) causes the new pulse width in compare capture
|
||||
// register only to come into effect when UG bit in SWEVGR is set
|
||||
// (= initiate update) (auto-clears)
|
||||
TIM3->CHCTLR1 |= TIM_OC1M_2 | TIM_OC1M_1 | TIM_OC1PE;
|
||||
|
||||
// Enable channel 1 output (PA6)
|
||||
TIM3->CCER |= TIM_CC1E | ( TIM_CC1P & TIM3_DEFAULT );
|
||||
|
||||
// CTLR1: default is up, events generated, edge align
|
||||
// enable auto-reload of preload
|
||||
TIM3->CTLR1 |= TIM_ARPE;
|
||||
}
|
||||
|
||||
|
||||
static inline void pwm_on(void)
|
||||
{
|
||||
// initialize counter
|
||||
TIM3->SWEVGR |= TIM_UG;
|
||||
// Enable TIM3
|
||||
TIM3->CTLR1 |= TIM_CEN;
|
||||
}
|
||||
|
||||
|
||||
static inline void pwm_off(void)
|
||||
{
|
||||
// Disable TIM3
|
||||
TIM3->CTLR1 &= ~TIM_CEN;
|
||||
TIM3->CH1CVR = 0;
|
||||
}
|
||||
|
||||
|
||||
static inline void pwm_set(uint16_t pulse_width)
|
||||
{
|
||||
TIM3->CH1CVR = pulse_width;
|
||||
}
|
||||
|
||||
|
||||
// Input: temperature difference
|
||||
// Output: duty-cycle 0-max_duty
|
||||
uint16_t pid(int16_t delta, int16_t max_duty)
|
||||
{
|
||||
// PID coefficients
|
||||
const fp16_t Kp = num2fp( 1, 1700, 4);
|
||||
const fp16_t Ti = num2fp(10, 0000, 4);
|
||||
const fp16_t Td = num2fp( 0, 1500, 4);
|
||||
|
||||
static fp16_t err_p, err_i, intgrt, err_d, dt, prev_err;
|
||||
static u32 t, prev_t;
|
||||
|
||||
t = funSysTick32();
|
||||
dt = fp_div(i2fp((t-prev_t)/DELAY_MS_TIME), i2fp(1000));
|
||||
|
||||
// if pid was paused, reset the integrator
|
||||
if (dt > num2fp(0, 2, 1)) intgrt = 0;
|
||||
|
||||
fp16_t err = i2fp(delta); // temperature delta as fixed point number
|
||||
|
||||
err_p = err;
|
||||
err_i = fp_mul(fp_div(err, Ti), dt);
|
||||
err_d = fp_mul(fp_div(fp_sub(err, prev_err), dt), Td);
|
||||
|
||||
prev_err = err;
|
||||
prev_t = t;
|
||||
|
||||
fp16_t e = 0;
|
||||
e = fp_add(e, err_p);
|
||||
e = fp_add(fp_add(e, err_i), intgrt);
|
||||
e = fp_add(e, err_d);
|
||||
e = fp_mul(e, Kp);
|
||||
|
||||
// TODO: use a back calculation anti windup strategy
|
||||
// only integrate if the output is less then max
|
||||
if (e < i2fp(100) && e > 0) {
|
||||
intgrt = fp_add(intgrt, err_i);
|
||||
}
|
||||
|
||||
e = fp_clamp(e, i2fp(0), i2fp(100));
|
||||
|
||||
// TODO: implement minimum duty cycle
|
||||
return fp2i(fp_map(e, 0, i2fp(100), 0, i2fp(max_duty)));
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------ Board Setup ------------------------------- */
|
||||
static inline void setup(void)
|
||||
{
|
||||
// Generic system setup
|
||||
SystemInit();
|
||||
funGpioInitAll();
|
||||
USBFSSetup();
|
||||
|
||||
// ====================== Analog pin configuration ====================== //
|
||||
funPinMode(PIN_VBUS, GPIO_CFGLR_IN_ANALOG);
|
||||
funPinMode(PIN_CURRENT, GPIO_CFGLR_IN_ANALOG);
|
||||
funPinMode(PIN_NTC, GPIO_CFGLR_IN_ANALOG);
|
||||
funPinMode(PIN_TEMP, GPIO_CFGLR_IN_ANALOG);
|
||||
|
||||
// Analog inputs setup (dma and injection conversion)
|
||||
uint8_t adc_channels[] = {
|
||||
VBUS_ADC_CHANNEL,
|
||||
CURRENT_ADC_CHANNEL,
|
||||
NTC_ADC_CHANNEL
|
||||
};
|
||||
uint8_t adc_injected[] = {
|
||||
TEMP_ADC_CHANNEL,
|
||||
VREF_INT_CHANNEL
|
||||
};
|
||||
setup_adc_and_dma(adc_channels, sizeof(adc_channels), adc_injected, sizeof(adc_injected));
|
||||
|
||||
// ====================== Digital pin configuration ===================== //
|
||||
funPinMode(PIN_12V, GPIO_CFGLR_OUT_10Mhz_PP);
|
||||
funDigitalWrite(PIN_12V, 0);
|
||||
funPinMode(PIN_HEATER, GPIO_CFGLR_OUT_10Mhz_AF_PP);
|
||||
funDigitalWrite(PIN_HEATER, 0);
|
||||
funPinMode(PIN_DISP_RST, GPIO_CFGLR_OUT_10Mhz_PP);
|
||||
funDigitalWrite(PIN_DISP_RST, 1);
|
||||
|
||||
funPinMode(PIN_ENC_A, GPIO_CFGLR_IN_PUPD); // enable pull-up/down
|
||||
funDigitalWrite(PIN_ENC_A, 1); // specify pull-up
|
||||
funPinMode(PIN_ENC_B, GPIO_CFGLR_IN_PUPD); // enable pull-up/down
|
||||
funDigitalWrite(PIN_ENC_B, 1); // specify pull-up
|
||||
funPinMode(PIN_BTN, GPIO_CFGLR_IN_FLOAT);
|
||||
|
||||
// Setup PWM timer, includes pin setup
|
||||
setup_pwm();
|
||||
pwm_off();
|
||||
|
||||
// =========================== Encoder Setup ============================ //
|
||||
// Configure the IO as an interrupt.
|
||||
// PIN_ENC_B is on port B, channel 11
|
||||
AFIO->EXTICR1 |= AFIO_EXTICR1_EXTI11_PB; // Port B channel (pin) 11
|
||||
EXTI->INTENR |= EXTI_INTENR_MR11; // Enable EXT11
|
||||
EXTI->FTENR |= EXTI_FTENR_TR11; // Falling edge trigger
|
||||
EXTI->RTENR |= EXTI_RTENR_TR11; // Rising edge trigger
|
||||
// enable interrupt
|
||||
NVIC_EnableIRQ(EXTI15_8_IRQn);
|
||||
|
||||
// PIN_ENC_A is on port B, channel 3
|
||||
AFIO->EXTICR1 |= AFIO_EXTICR1_EXTI3_PB; // Port B channel (pin) 3
|
||||
EXTI->INTENR |= EXTI_INTENR_MR3; // Enable EXT3
|
||||
EXTI->FTENR |= EXTI_FTENR_TR3; // Falling edge trigger
|
||||
EXTI->RTENR |= EXTI_RTENR_TR3; // Rising edge trigger
|
||||
// enable interrupt
|
||||
NVIC_EnableIRQ(EXTI7_0_IRQn);
|
||||
|
||||
// ============================= I2C Setup ============================== //
|
||||
// Setup i2c line, includes setting the pin alternate mode
|
||||
setup_i2c();
|
||||
// Start i2c peripherals
|
||||
u8g2 = display_init();
|
||||
sc7a20_init();
|
||||
}
|
||||
|
||||
|
||||
// Update the global istantaneous voltage, current, power and board temperature
|
||||
// this requires the automatic conversion (ADC+DMA) to be running
|
||||
static inline void update_power_and_temperature(void)
|
||||
{
|
||||
// Voltage current and power
|
||||
vbus_mv = U16_FP_EMA_K4(vbus_mv, ((u32)adc_buffer[0]*vcc_mv*11)/4096);
|
||||
current_ma = U16_FP_EMA_K4(current_ma, get_current_ma(adc_buffer[1]));
|
||||
power = ((u32)vbus_mv*current_ma)/1000000;
|
||||
// Board temperature
|
||||
temp_c = I16_FP_EMA_K4(temp_c, get_temp_c(adc_buffer[2]));
|
||||
}
|
||||
|
||||
|
||||
// Update VCC and the tip temperature, both are sampled with injection conversion
|
||||
// so it is triggered in this function
|
||||
static inline void update_tip_and_vcc(void)
|
||||
{
|
||||
// Tip calibration factors
|
||||
const fp16_t tip_k = num2fp(0, 14473, 5);
|
||||
const fp16_t tip_off = num2fp(0, 0, 0);
|
||||
|
||||
adc_injection_conversion();
|
||||
// Calibrate VCC with the internal reference value
|
||||
vcc_mv = I16_FP_EMA_K4(vcc_mv, ((uint32_t)1200 * 4096)/injection_results[1]);
|
||||
|
||||
uint16_t tip_mv = ((u32)injection_results[0]*vcc_mv)/4096;
|
||||
int16_t tt_now = fp2i(fp_add(fp_mul(i2fp(tip_mv), tip_k), tip_off));
|
||||
// Tip temp with cold-junction compensation, assume the board temperature is
|
||||
// the same as the cold junction, on an external handle this is not always true
|
||||
tip_temp_c = I16_FP_EMA_K4(tip_temp_c, tt_now + temp_c);
|
||||
}
|
||||
|
||||
|
||||
// coroutine to draw the "main" ui which draws the current tip temperature, power
|
||||
// pwm state, etc.
|
||||
coro_state_t cs_ui;
|
||||
coroutine c_draw_main_ui(coro_state_t *state)
|
||||
{
|
||||
static struct timer t;
|
||||
coro_begin(state);
|
||||
|
||||
for(;;) {
|
||||
// Wait for the next frame, roughly 30 fps
|
||||
timer_set(&t, 33);
|
||||
coro_wait_until(state, timer_expired(&t));
|
||||
|
||||
// Draw UI
|
||||
u8g2_ClearBuffer(u8g2);
|
||||
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
|
||||
draw_temp(u8g2, x_off+0, y_off+0, tip_temp_c, true);
|
||||
u8g2_DrawStr(u8g2, x_off+32, y_off+6, "A:");
|
||||
u8g2_DrawStr(u8g2, x_off+42, y_off+6, u16toa((current_ma+500)/1000));
|
||||
u8g2_DrawStr(u8g2, x_off+60, y_off+6, "V:");
|
||||
u8g2_DrawStr(u8g2, x_off+70, y_off+6, u16toa((vbus_mv+500)/1000));
|
||||
uint8_t p = (power*100)/pd_profile.set_power;
|
||||
uint8_t w = (uint16_t)(p*54)/100;
|
||||
u8g2_DrawBox(u8g2, x_off+42, y_off+14, w, 5);
|
||||
}
|
||||
|
||||
coro_end();
|
||||
}
|
||||
|
||||
|
||||
// coroutine to update the tip temperature, vcc and compute the new pid value
|
||||
// this has to be called periodically but only with pwm disabled
|
||||
coro_state_t cs_duty;
|
||||
coroutine c_update_duty(coro_state_t *state)
|
||||
{
|
||||
static struct timer t;
|
||||
coro_begin(state);
|
||||
|
||||
for(;;) {
|
||||
timer_set(&t, 50);
|
||||
coro_wait_until(state, timer_expired(&t));
|
||||
|
||||
pwm_set(0);
|
||||
Delay_Ms(TURN_OFF_DELAY);
|
||||
update_tip_and_vcc();
|
||||
if (enabled) {
|
||||
duty = pid((int16_t)pd_profile.set_temp - tip_temp_c, pd_profile.max_duty);
|
||||
} else {
|
||||
duty = 0;
|
||||
}
|
||||
}
|
||||
|
||||
coro_end();
|
||||
}
|
||||
|
||||
|
||||
__attribute__((noreturn)) int main(void)
|
||||
{
|
||||
setup();
|
||||
|
||||
coro_init(&cs_ui);
|
||||
coro_init(&cs_duty);
|
||||
|
||||
u8g2_ClearBuffer(u8g2);
|
||||
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
|
||||
u8g2_DrawStr(u8g2, x_off+0, y_off+7, "Negotiating...");
|
||||
u8g2_SendBuffer(u8g2);
|
||||
|
||||
// Init USBPD
|
||||
bool has_pd = pd_negotiate(eUSBPD_VCC_3V3);
|
||||
if (has_pd == false) {
|
||||
while (true) {
|
||||
// No Power Delivery, maybe we are attached to a computer, so poll the input
|
||||
poll_input();
|
||||
|
||||
update_power_and_temperature();
|
||||
update_tip_and_vcc();
|
||||
|
||||
u8g2_ClearBuffer(u8g2);
|
||||
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
|
||||
u8g2_DrawStr(u8g2, x_off+0, y_off+7, "Negotiation FAILED");
|
||||
u8g2_DrawStr(u8g2, x_off+0, y_off+14, USBPD_ResultToStr(pd_get_result()));
|
||||
u8g2_DrawStr(u8g2, x_off+0, y_off+21, u16toa(vcc_mv));
|
||||
u8g2_DrawStr(u8g2, x_off+0, y_off+28, u16toa(temp_c));
|
||||
u8g2_DrawStr(u8g2, x_off+30, y_off+28, u16toa(tip_temp_c));
|
||||
u8g2_SendBuffer(u8g2);
|
||||
}
|
||||
} else {
|
||||
pd_get_profile(&pd_profile, 100);
|
||||
|
||||
// TODO: let the user decide the power profile
|
||||
pd_profile.set_temp = 320;
|
||||
pd_profile.set_power = 95; // Slightly below max power to avoid overloading
|
||||
pd_profile.tip_r = 2500; // TODO: tip check and resistance calculator
|
||||
pd_profile.max_duty = MIN(
|
||||
(100*(u32)isqrt((
|
||||
MIN(pd_profile.set_power, pd_profile.power_avail)*pd_profile.tip_r)/1000) * 1000) / pd_profile.voltage
|
||||
, 100);
|
||||
}
|
||||
|
||||
|
||||
enum {
|
||||
STATE_MENU,
|
||||
STATE_HEATING,
|
||||
} state = STATE_MENU;
|
||||
|
||||
/* ============================== Main Loop =============================== */
|
||||
struct button btn;
|
||||
button_init(&btn, true);
|
||||
for (;;) {
|
||||
button_update(&btn, funDigitalRead(PIN_BTN));
|
||||
|
||||
update_power_and_temperature();
|
||||
|
||||
c_update_duty(&cs_duty);
|
||||
|
||||
switch (state) {
|
||||
case STATE_MENU:
|
||||
u8g2_ClearBuffer(u8g2);
|
||||
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
|
||||
u8g2_DrawStr(u8g2, x_off+0, y_off+7, "TEMP:");
|
||||
u8g2_DrawStr(u8g2, x_off+25, y_off+7, u8g2_u16toa(pd_profile.set_temp, 4));
|
||||
|
||||
if (encoder != 0) {
|
||||
pd_profile.set_temp += encoder >= ENCODER_FAST ? 20 : encoder;
|
||||
encoder = 0;
|
||||
if (pd_profile.set_temp < MIN_TIP_SET_TEMP) pd_profile.set_temp = MIN_TIP_SET_TEMP;
|
||||
if (pd_profile.set_temp > MAX_TIP_SET_TEMP) pd_profile.set_temp = MAX_TIP_SET_TEMP;
|
||||
}
|
||||
|
||||
if (button_falling(btn)) {
|
||||
state = STATE_HEATING;
|
||||
enabled = false;
|
||||
}
|
||||
break;
|
||||
case STATE_HEATING:
|
||||
c_draw_main_ui(&cs_ui);
|
||||
|
||||
if (enabled) {
|
||||
funDigitalWrite(PIN_12V, 1);
|
||||
|
||||
// Safety logic
|
||||
if (current_ma > pd_profile.max_current + pd_profile.max_current/10) {
|
||||
enabled = false;
|
||||
}
|
||||
if (temp_c > MAX_BOARD_TEMP) {
|
||||
enabled = false;
|
||||
}
|
||||
if (tip_temp_c > MAX_TIP_TEMP) {
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
const uint16_t tim_max = FUNCONF_SYSTEM_CORE_CLOCK / PWM_FREQ_HZ - 1;
|
||||
pwm_set(((u32)duty*tim_max)/100);
|
||||
u8g2_DrawBox(u8g2, x_off+92, y_off+0, 4, 4);
|
||||
} else {
|
||||
funDigitalWrite(PIN_12V, 0);
|
||||
}
|
||||
|
||||
// move to menu mode when encoder is turned
|
||||
if (encoder != 0) {
|
||||
state = STATE_MENU;
|
||||
funDigitalWrite(PIN_12V, 0);
|
||||
pwm_set(0);
|
||||
}
|
||||
|
||||
// Check button to toggle enable
|
||||
if (button_falling(btn)) {
|
||||
enabled = !enabled;
|
||||
if (enabled) {
|
||||
pwm_on();
|
||||
} else {
|
||||
pwm_off();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
u8g2_SendBuffer(u8g2);
|
||||
}
|
||||
}
|
||||
31
fw/ntc.h
31
fw/ntc.h
@ -1,31 +0,0 @@
|
||||
#ifndef _NTC_H
|
||||
#define _NTC_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// LUT for converting NTC readings to degrees celsius
|
||||
// Nominal: 10kOhm, Beta: 3380, Step: 64
|
||||
// TODO: Add a fixed offset to account for toollerances
|
||||
const uint8_t ntc_step_size = 64;
|
||||
const int16_t ntc_lut[] = {
|
||||
1316, 197, 155, 133, 119, 108, 100, 93, 87, 82, 77, 73, 69, 66, 63, 60,
|
||||
57, 54, 52, 50, 47, 45, 43, 41, 39, 37, 35, 34, 32, 30, 28, 27,
|
||||
25, 23, 22, 20, 19, 17, 15, 14, 12, 11, 9, 7, 6, 4, 2, 0,
|
||||
-1, -3, -5, -7, -9, -11, -14, -16, -19, -22, -25, -28, -32, -38, -44, -55,
|
||||
-55 // extra value to not have an extra if statement
|
||||
};
|
||||
|
||||
// Convert the raw adc reading to a temperature in celsius with the ntc lut,
|
||||
// linearly interpolating between positions
|
||||
static inline int16_t get_temp_c(uint16_t adc_reading)
|
||||
{
|
||||
if (adc_reading > 4095) return 0;
|
||||
uint8_t index = adc_reading / ntc_step_size;
|
||||
uint8_t remainder = adc_reading % ntc_step_size;
|
||||
int16_t temp_base = index < ntc_step_size ? ntc_lut[index] : 0;
|
||||
int16_t temp_next = ntc_lut[index + 1];
|
||||
return temp_base + ((temp_next - temp_base) * remainder)/ntc_step_size;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
127
fw/pd.c
127
fw/pd.c
@ -1,127 +0,0 @@
|
||||
#include <ch32fun.h>
|
||||
|
||||
#define USBPD_IMPLEMENTATION
|
||||
#include "usbpd.h"
|
||||
|
||||
#include "funconfig.h"
|
||||
#include "display.h"
|
||||
|
||||
#include "pd.h"
|
||||
|
||||
|
||||
extern u8g2_t *u8g2;
|
||||
|
||||
static size_t cap_count = 0;
|
||||
static USBPD_SPR_CapabilitiesMessage_t *capabilities = NULL;
|
||||
static USBPD_Result_e result;
|
||||
|
||||
|
||||
USBPD_Result_e pd_get_result()
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
// Initializes the Power Delivery peripheral and starts the Power Delivery
|
||||
// negotiation, returns true if successful, indicating the board is connected to
|
||||
// a Power Delivery source.
|
||||
// As a side effect, fills the capabilities buffer with the source's capabilities.
|
||||
bool pd_negotiate(USBPD_VCC_e vcc)
|
||||
{
|
||||
result = USBPD_Init(vcc);
|
||||
if (result != eUSBPD_OK) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Delay_Ms(100);
|
||||
|
||||
u32 start = funSysTick32();
|
||||
while (eUSBPD_BUSY == (result = USBPD_SinkNegotiate())) {
|
||||
u32 now = funSysTick32();
|
||||
if (now - start > Ticks_from_Ms(5000)) {
|
||||
break;
|
||||
}
|
||||
|
||||
u8g2_ClearBuffer(u8g2);
|
||||
u8g2_SetBitmapMode(u8g2, 1);
|
||||
u8g2_SetFontMode(u8g2, 1);
|
||||
u8g2_SetFont(u8g2, u8g2_font_5x8_tr);
|
||||
u8g2_DrawStr(u8g2, 0, 8+7, USBPD_StateToStr(USBPD_GetState()));
|
||||
u8g2_SendBuffer(u8g2);
|
||||
|
||||
Delay_Ms(1);
|
||||
}
|
||||
if (result != eUSBPD_OK) {
|
||||
return false;
|
||||
}
|
||||
cap_count = USBPD_GetCapabilities(&capabilities);
|
||||
if (capabilities == NULL || cap_count == 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool pd_get_profile(struct pd_profile_t *profile, uint16_t min_power)
|
||||
{
|
||||
if (profile == NULL || min_power == 0 || min_power > 140) {
|
||||
return false;
|
||||
}
|
||||
if (capabilities == NULL || cap_count == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
u16 voltage = 0, current = 0, power = 0;
|
||||
for (u32 i = 0; i < cap_count; i++) {
|
||||
USBPD_SinkPDO_t *pdo = &capabilities->Sink[i];
|
||||
switch (pdo->Header.PDOType) {
|
||||
case eUSBPD_PDO_FIXED:
|
||||
voltage = pdo->FixedSupply.VoltageIn50mV * 50;
|
||||
current = pdo->FixedSupply.CurrentIn10mA * 10;
|
||||
power = ((u32)voltage * current) / (u32)1000000;
|
||||
break;
|
||||
case eUSBPD_PDO_BATTERY:
|
||||
voltage = pdo->BatterySupply.MaxVoltageIn50mV * 50;
|
||||
power = pdo->BatterySupply.MaxPowerIn250mW / 4;
|
||||
current = ((u32)power * 1000) / voltage;
|
||||
break;
|
||||
case eUSBPD_PDO_VARIABLE:
|
||||
// TODO: PPS
|
||||
// if (pdo->VariableSupply.MaxVoltageIn50mV/20 > max_v) {
|
||||
// max_v = pdo->VariableSupply.MaxVoltageIn50mV/20;
|
||||
// }
|
||||
break;
|
||||
case eUSBPD_PDO_AUGMENTED:
|
||||
switch (pdo->Header.AugmentedType) {
|
||||
case eUSBPD_APDO_SPR_PPS:
|
||||
// TODO: SPR_PPS
|
||||
break;
|
||||
case eUSBPD_APDO_SPR_AVS:
|
||||
// TODO: SPR AVS
|
||||
break;
|
||||
case eUSBPD_APDO_EPR_AVS:
|
||||
/* TODO: EPR AVS
|
||||
voltage = pdo->EPR_AVS.MaxVoltageIn100mV * 100;
|
||||
current = pdo->EPR_AVS.PeakCurrent * 1000;
|
||||
power = pdo->EPR_AVS.PDPIn1W;
|
||||
*/
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Selects the first PDO that meets the minimum power requirement
|
||||
if (power >= min_power && voltage <= BOARD_MAX_VOLTAGE) {
|
||||
if (USBPD_SelectPDO(i, 0) != eUSBPD_OK) {
|
||||
return false;
|
||||
}
|
||||
profile->voltage = voltage;
|
||||
profile->max_current = current;
|
||||
profile->power_avail = power;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
25
fw/pd.h
25
fw/pd.h
@ -1,25 +0,0 @@
|
||||
#ifndef _PD_H
|
||||
#define _PD_H
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "usbpd.h"
|
||||
|
||||
|
||||
struct pd_profile_t {
|
||||
uint16_t voltage; // Vbus Voltage in millivolts
|
||||
uint16_t max_current; // Maximum current in milliamps
|
||||
uint16_t power_avail; // Available power (from supply) in watts
|
||||
uint16_t set_power; // Maximum power in watts, set by the user
|
||||
uint16_t set_temp; // Set temperature in celsius, set by the user
|
||||
uint16_t tip_r; // Tip resistance in milliOhms
|
||||
uint8_t max_duty; // Maximum duty cycle (0-100) to stay within the power limit
|
||||
};
|
||||
|
||||
|
||||
USBPD_Result_e pd_get_result();
|
||||
bool pd_negotiate(USBPD_VCC_e vcc);
|
||||
bool pd_get_profile(struct pd_profile_t *profile, uint16_t min_power);
|
||||
|
||||
#endif // _PD_H
|
||||
62
fw/sc7a20.c
62
fw/sc7a20.c
@ -1,62 +0,0 @@
|
||||
/*
|
||||
* Register functions for the SC7A20 accellerometer
|
||||
* Original Author:
|
||||
* Ralim
|
||||
* Created on: 18 Sep. 2020
|
||||
* https://github.com/Ralim/IronOS.git
|
||||
*/
|
||||
|
||||
#include <ch32fun.h>
|
||||
#include "lib_i2c.h"
|
||||
|
||||
#include "sc7a20.h"
|
||||
|
||||
|
||||
// Initialization values for control registers, in reg-value pairs
|
||||
// Basically setup the unit to run, and enable 4D orientation detection
|
||||
// TODO: Make better comments and define values
|
||||
static const uint8_t i2c_registers[][2] = {
|
||||
{ SC7A20_CTRL_REG1, 0b01100111}, // 200Hz, XYZ enabled
|
||||
{ SC7A20_CTRL_REG2, 0b00000000}, // Setup filter to 0x00 ??
|
||||
{ SC7A20_CTRL_REG3, 0b00000000}, // INT1 off
|
||||
{ SC7A20_CTRL_REG4, 0b00001000}, // Block mode off,little-endian,2G,High-pres,self test off
|
||||
{ SC7A20_CTRL_REG5, 0b00000100}, // fifo off, D4D on INT1
|
||||
{ SC7A20_CTRL_REG6, 0x00}, // INT2 off
|
||||
{ SC7A20_INT2_CFG, 0b01111110}, // setup for movement detection
|
||||
{ SC7A20_INT2_THS, 0x28}, //
|
||||
{SC7A20_INT2_DURATION, 64}, //
|
||||
{ SC7A20_INT1_CFG, 0b01111110}, //
|
||||
{ SC7A20_INT1_THS, 0x28}, //
|
||||
{SC7A20_INT1_DURATION, 64}
|
||||
};
|
||||
|
||||
|
||||
void sc7a20_init()
|
||||
{
|
||||
// Setup acceleration readings
|
||||
// 2G range
|
||||
// bandwidth = 250Hz
|
||||
// High pass filter on (Slow compensation)
|
||||
// Turn off IRQ output pins
|
||||
// Orientation recognition in symmetrical mode
|
||||
// Hysteresis is set to ~ 16 counts
|
||||
// Theta blocking is set to 0b10
|
||||
for (uint8_t i = 0; i < sizeof(i2c_registers) / sizeof(i2c_registers[0]); i++) {
|
||||
uint8_t bytes[2] = {i2c_registers[i][0], i2c_registers[i][1]};
|
||||
i2c_sendBytes(I2C_TARGET, SC7A20_ADDRESS, bytes, 2);
|
||||
}
|
||||
}
|
||||
|
||||
void sc7a20_get_readings(int16_t *x, int16_t *y, int16_t *z)
|
||||
{
|
||||
// We can tell the accelerometer to output in LE mode which makes this simple
|
||||
int16_t sensorData[3] = {0};
|
||||
|
||||
i2c_sendByte(I2C_TARGET, SC7A20_ADDRESS, SC7A20_OUT_X_L | 0x80);
|
||||
i2c_readBytes(I2C_TARGET, SC7A20_ADDRESS, (u8*)sensorData, 6);
|
||||
|
||||
// Lower byte is sent first
|
||||
*x = (int16_t)sensorData[0];
|
||||
*y = (int16_t)sensorData[1];
|
||||
*z = (int16_t)sensorData[2];
|
||||
}
|
||||
57
fw/sc7a20.h
57
fw/sc7a20.h
@ -1,57 +0,0 @@
|
||||
/*
|
||||
* Defines for the SC7A20 accellerometer
|
||||
* Original Author:
|
||||
* Ralim
|
||||
* Created on: 18 Sep. 2020
|
||||
* https://github.com/Ralim/IronOS.git
|
||||
*/
|
||||
|
||||
#ifndef _SC7A20_H_
|
||||
#define _SC7A20_H_
|
||||
|
||||
#include <ch32fun.h>
|
||||
|
||||
#define SC7A20_ADDRESS 0x18
|
||||
|
||||
#define SC7A20_WHO_AM_I_VALUE (0b00010001)
|
||||
#define SC7A20_WHO_AMI_I 0x0F
|
||||
#define SC7A20_CTRL_REG1 0x20
|
||||
#define SC7A20_CTRL_REG2 0x21
|
||||
#define SC7A20_CTRL_REG3 0x22
|
||||
#define SC7A20_CTRL_REG4 0x23
|
||||
#define SC7A20_CTRL_REG5 0x24
|
||||
#define SC7A20_CTRL_REG6 0x25
|
||||
#define SC7A20_REFERENCE 0x26
|
||||
#define SC7A20_STATUS_REG 0x27
|
||||
#define SC7A20_OUT_X_L 0x28
|
||||
#define SC7A20_OUT_X_L_ALT 0xA8
|
||||
#define SC7A20_OUT_X_H 0x29
|
||||
#define SC7A20_OUT_Y_L 0x2A
|
||||
#define SC7A20_OUT_Y_H 0x2B
|
||||
#define SC7A20_OUT_Z_L 0x2C
|
||||
#define SC7A20_OUT_Z_H 0x2D
|
||||
#define SC7A20_FIFO_CTRL 0x2E
|
||||
#define SC7A20_FIFO_SRC 0x2F
|
||||
#define SC7A20_INT1_CFG 0x30
|
||||
#define SC7A20_INT1_SOURCE 0x31
|
||||
#define SC7A20_INT1_THS 0x32
|
||||
#define SC7A20_INT1_DURATION 0x33
|
||||
#define SC7A20_INT2_CFG 0x34
|
||||
#define SC7A20_INT2_SOURCE 0x35
|
||||
#define SC7A20_INT2_THS 0x36
|
||||
#define SC7A20_INT2_DURATION 0x37
|
||||
#define SC7A20_CLICK_CFG 0x38
|
||||
#define SC7A20_CLICK_SRC 0x39
|
||||
#define SC7A20_CLICK_THS 0x3A
|
||||
#define SC7A20_TIME_LIMIT 0x3B
|
||||
#define SC7A20_TIME_LATENCY 0x3C
|
||||
#define SC7A20_TIME_WINDOW 0x3D
|
||||
#define SC7A20_ACT_THS 0x3E
|
||||
#define SC7A20_ACT_DURATION 0x3F
|
||||
|
||||
|
||||
void sc7a20_init(void);
|
||||
void sc7a20_get_readings(int16_t *x, int16_t *y, int16_t *z);
|
||||
|
||||
|
||||
#endif /* CORE_DRIVERS_BMA223_DEFINES_H_ */
|
||||
@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import math
|
||||
|
||||
# Script to generate NTC lookup table
|
||||
# ^ Vcc
|
||||
# |
|
||||
# [RES]
|
||||
# |
|
||||
# +-- Vadc
|
||||
# |
|
||||
# [NTC]
|
||||
# |
|
||||
# _|_ GND
|
||||
# ///
|
||||
|
||||
adc_res = 12
|
||||
ntc_value = 10_000 # at 25°C
|
||||
resistor_value = 10_000
|
||||
ntc_beta = 3380 # at 25°C
|
||||
steps = 64
|
||||
|
||||
# NTC resistance to temperature (°C) conversion
|
||||
def resistance_to_t(ntc_r):
|
||||
# Standard B-parameter equation
|
||||
# T = 1 / (1/T0 + 1/B * ln(R/R0))
|
||||
inv_t = 1/(25 + 273.15) + math.log(ntc_r/ntc_value)/ntc_beta
|
||||
return 1/inv_t - 273.15
|
||||
|
||||
# Resistor divider percentage to NTC resistance conversion
|
||||
# x = NTC / (NTC + RES) => NTC = RES * x / (1 - x)
|
||||
def x_to_r(x):
|
||||
x = max(0.0001, min(0.9999, x))
|
||||
return resistor_value * x / (1 - x)
|
||||
|
||||
# Use 4096 for cleaner divisions
|
||||
adc_max = 2**adc_res
|
||||
step_size = adc_max // steps
|
||||
|
||||
values = []
|
||||
for i in range(steps):
|
||||
adc_val = i * step_size
|
||||
x = adc_val / adc_max
|
||||
r = x_to_r(adc_val / adc_max)
|
||||
t = resistance_to_t(r)
|
||||
values.append(int(round(t)))
|
||||
|
||||
def to_c_array(values, ctype="float", name="table", formatter=str, colcount=8):
|
||||
# apply formatting to each element
|
||||
values = [formatter(v) for v in values]
|
||||
# split into rows with up to `colcount` elements per row
|
||||
rows = [values[i:i+colcount] for i in range(0, len(values), colcount)]
|
||||
# separate elements with commas, separate rows with newlines
|
||||
body = ',\n '.join([', '.join(r) for r in rows])
|
||||
# assemble components into the complete string
|
||||
return '{} {}[] = {{\n {}}};'.format(ctype, name, body)
|
||||
|
||||
print("uint8_t ntc_step_size = {};".format(int(step_size)))
|
||||
print(to_c_array(values, ctype="int16_t", name="ntc_lut", formatter=str, colcount=16))
|
||||
1
fw/u8g2
1
fw/u8g2
@ -1 +0,0 @@
|
||||
Subproject commit 3b8939cd015d6aca6a19f761df84859916f1f7d9
|
||||
182
fw/usb_config.h
182
fw/usb_config.h
@ -1,182 +0,0 @@
|
||||
#ifndef _USB_CONFIG_H
|
||||
#define _USB_CONFIG_H
|
||||
|
||||
#include "funconfig.h"
|
||||
#include "ch32fun.h"
|
||||
|
||||
// Endpoint numbers, at least one (EP0)
|
||||
#define FUSB_CONFIG_EPS 4
|
||||
// Endpoint configuration for CDC TTY
|
||||
#define FUSB_EP1_MODE 1 // TX (IN), CDC Interrupt Endpoint
|
||||
#define FUSB_EP2_MODE -1 // RX (OUT), CDC Data OUT
|
||||
#define FUSB_EP3_MODE 1 // TX (IN), CDC Data IN
|
||||
// Other hardware configuration
|
||||
#define FUSB_SUPPORTS_SLEEP 0
|
||||
#define FUSB_HID_INTERFACES 0
|
||||
#define FUSB_CURSED_TURBO_DMA 0 // Hacky, but seems fine, shaves 2.5us off filling 64-byte buffers.
|
||||
#define FUSB_HID_USER_REPORTS 0
|
||||
#define FUSB_IO_PROFILE 0
|
||||
#define FUSB_USE_HPE FUNCONF_ENABLE_HPE
|
||||
#define FUSB_USER_HANDLERS 1
|
||||
#define FUSB_USE_DMA7_COPY 0
|
||||
#define FUSB_VDD_5V 0 // 3.3V
|
||||
|
||||
#include "usb_defines.h"
|
||||
|
||||
#define FUSB_USB_VID 0x1209
|
||||
#define FUSB_USB_PID 0xd035
|
||||
#define FUSB_USB_REV 0x0007
|
||||
#define FUSB_STR_MANUFACTURER u"ch32fun"
|
||||
#define FUSB_STR_PRODUCT u"USB TTY"
|
||||
#define FUSB_STR_SERIAL u"007"
|
||||
|
||||
//Taken from http://www.usbmadesimple.co.uk/ums_ms_desc_dev.htm
|
||||
static const uint8_t device_descriptor[] = {
|
||||
18, //bLength - Length of this descriptor
|
||||
1, //bDescriptorType - Type (Device)
|
||||
0x10, 0x01, //bcdUSB - The highest USB spec version this device supports (USB1.1)
|
||||
0x02, //bDeviceClass - Device Class
|
||||
0x0, //bDeviceSubClass - Device Subclass
|
||||
0x0, //bDeviceProtocol - Device Protocol (000 = use config descriptor)
|
||||
64, //bMaxPacketSize - Max packet size for EP0
|
||||
(uint8_t)(FUSB_USB_VID), (uint8_t)(FUSB_USB_VID >> 8), //idVendor - ID Vendor
|
||||
(uint8_t)(FUSB_USB_PID), (uint8_t)(FUSB_USB_PID >> 8), //idProduct - ID Product
|
||||
(uint8_t)(FUSB_USB_REV), (uint8_t)(FUSB_USB_REV >> 8), //bcdDevice - Device Release Number
|
||||
1, //iManufacturer - Index of Manufacturer string
|
||||
2, //iProduct - Index of Product string
|
||||
3, //iSerialNumber - Index of Serial string
|
||||
1, //bNumConfigurations - Max number of configurations (if more then 1, you can switch between them)
|
||||
};
|
||||
|
||||
/* Configuration Descriptor Set */
|
||||
static const uint8_t config_descriptor[ ] =
|
||||
{
|
||||
0x09, // bLength
|
||||
0x02, // bDescriptorType (Configuration)
|
||||
0x43, 0x00, // wTotalLength 67
|
||||
0x02, // bNumInterfaces 2
|
||||
0x01, // bConfigurationValue
|
||||
0x00, // iConfiguration (String Index)
|
||||
0x80, // bmAttributes
|
||||
0x32, // bMaxPower 100mA
|
||||
|
||||
0x09, // bLength
|
||||
0x04, // bDescriptorType - Interface
|
||||
0x00, // bInterfaceNumber - 0
|
||||
0x00, // bAlternateSetting
|
||||
0x01, // bNumEndpoints - 1
|
||||
0x02, // bInterfaceClass - CDC
|
||||
0x02, // bInterfaceSubClass - Abstract Control Model (Table 4 in CDC120.pdf)
|
||||
0x01, // bInterfaceProtocol - AT Commands: V.250 etc (Table 5)
|
||||
0x00, // iInterface (String Index)
|
||||
|
||||
// Setting up CDC interface (Table 18)
|
||||
0x05, // bLength
|
||||
0x24, // bDescriptorType - CS_INTERFACE (Table 12)
|
||||
0x00, // bDescriptorSubType - Header Functional Descriptor (Table 13)
|
||||
0x10, 0x01, // bcdCDC - USB version - USB1.1
|
||||
// Call Management Functional Descriptor
|
||||
0x05, // bLength
|
||||
0x24, // bDescriptorType - CS_INTERFACE
|
||||
0x01, // bDescriptorSubType - Call Management Functional Descriptor (Table 13)
|
||||
0x00, // bmCapabilities: (Table 3 in PSTN120.pdf)
|
||||
// Bit 0 — Device handles call management itself:
|
||||
// 1 = device handles call management (e.g. call setup, termination, etc.)
|
||||
// 0 = host handles it
|
||||
// Bit 1 — Device can send/receive call management information over a Data Class interface:
|
||||
// 1 = can use the Data Class interface for call management
|
||||
// 0 = must use the Communication Class interface
|
||||
0x01, // bDataInterface - Indicates that multiplexed commands are handled via data interface 01h (same value as used in the UNION Functional Descriptor)
|
||||
// Abstract Control Management Functional Descriptor
|
||||
0x04, // bLength
|
||||
0x24, // bDescriptorType - CS_INTERFACE
|
||||
0x02, // bDescriptorSubType - Abstract Control Management Functional Descriptor (Table 13)
|
||||
0x02, // bmCapabilities - Device supports the request combination of Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State (Table 4 in PSTN120.pdf)
|
||||
// Union Descriptor Functional Descriptor
|
||||
0x05, // bLength
|
||||
0x24, // bDescriptorType - CS_INTERFACE
|
||||
0x06, // bDescriptorSubType - Union Descriptor Functional Descriptor (Table 13)
|
||||
0x00, // bControlInterface (Interface number of the control (Communications Class) interface)
|
||||
0x01, // bSubordinateInterface0 (Interface number of the subordinate (Data Class) interface)
|
||||
// Setting up EP1 for CDC config interface
|
||||
0x07, // bLength
|
||||
0x05, // bDescriptorType (Endpoint)
|
||||
0x81, // bEndpointAddress (IN/D2H)
|
||||
0x03, // bmAttributes (Interrupt)
|
||||
0x40, 0x00, // wMaxPacketSize 64
|
||||
0x01, // bInterval 1 (unit depends on device speed)
|
||||
|
||||
// Transmission interface with two bulk endpoints
|
||||
0x09, // bLength
|
||||
0x04, // bDescriptorType (Interface)
|
||||
0x01, // bInterfaceNumber 1
|
||||
0x00, // bAlternateSetting
|
||||
0x02, // bNumEndpoints 2
|
||||
0x0A, // bInterfaceClass
|
||||
0x00, // bInterfaceSubClass
|
||||
0x00, // bInterfaceProtocol - Transparent
|
||||
0x00, // iInterface (String Index)
|
||||
// EP2 - device to host
|
||||
0x07, // bLength
|
||||
0x05, // bDescriptorType (Endpoint)
|
||||
0x02, // bEndpointAddress (OUT/H2D)
|
||||
0x02, // bmAttributes (Bulk)
|
||||
0x40, 0x00, // wMaxPacketSize 64
|
||||
0x00, // bInterval 0 (unit depends on device speed)
|
||||
// EP3 - host to device
|
||||
0x07, // bLength
|
||||
0x05, // bDescriptorType (Endpoint)
|
||||
0x83, // bEndpointAddress (IN/D2H)
|
||||
0x02, // bmAttributes (Bulk)
|
||||
0x40, 0x00, // wMaxPacketSize 64
|
||||
0x00, // bInterval 0 (unit depends on device speed)
|
||||
|
||||
// 67 bytes
|
||||
};
|
||||
|
||||
struct usb_string_descriptor_struct {
|
||||
uint8_t bLength;
|
||||
uint8_t bDescriptorType;
|
||||
uint16_t wString[];
|
||||
};
|
||||
const static struct usb_string_descriptor_struct language __attribute__((section(".rodata"))) = {
|
||||
4,
|
||||
3,
|
||||
{0x0409} // Language ID - English US (look in USB_LANGIDs)
|
||||
};
|
||||
const static struct usb_string_descriptor_struct string1 __attribute__((section(".rodata"))) = {
|
||||
sizeof(FUSB_STR_MANUFACTURER),
|
||||
3, // bDescriptorType - String Descriptor (0x03)
|
||||
FUSB_STR_MANUFACTURER
|
||||
};
|
||||
const static struct usb_string_descriptor_struct string2 __attribute__((section(".rodata"))) = {
|
||||
sizeof(FUSB_STR_PRODUCT),
|
||||
3,
|
||||
FUSB_STR_PRODUCT
|
||||
};
|
||||
const static struct usb_string_descriptor_struct string3 __attribute__((section(".rodata"))) = {
|
||||
sizeof(FUSB_STR_SERIAL),
|
||||
3,
|
||||
FUSB_STR_SERIAL
|
||||
};
|
||||
|
||||
// This table defines which descriptor data is sent for each specific
|
||||
// request from the host (in wValue and wIndex).
|
||||
const static struct descriptor_list_struct {
|
||||
uint32_t lIndexValue; // (uint16_t)Index of a descriptor in config or Language ID for string descriptors | (uint8_t)Descriptor type | (uint8_t)Type of string descriptor
|
||||
const uint8_t *addr;
|
||||
uint8_t length;
|
||||
} descriptor_list[] = {
|
||||
{0x00000100, device_descriptor, sizeof(device_descriptor)},
|
||||
{0x00000200, config_descriptor, sizeof(config_descriptor)},
|
||||
// {0x00002100, config_descriptor + 18, 9 }, // Not sure why, this seems to be useful for Windows + Android.
|
||||
|
||||
{0x00000300, (const uint8_t *)&language, 4},
|
||||
{0x04090301, (const uint8_t *)&string1, string1.bLength},
|
||||
{0x04090302, (const uint8_t *)&string2, string2.bLength},
|
||||
{0x04090303, (const uint8_t *)&string3, string3.bLength}
|
||||
};
|
||||
#define DESCRIPTOR_LIST_ENTRIES ((sizeof(descriptor_list))/(sizeof(struct descriptor_list_struct)) )
|
||||
|
||||
|
||||
#endif
|
||||
979
fw/usbpd.h
979
fw/usbpd.h
@ -1,979 +0,0 @@
|
||||
/* USB PD Library
|
||||
* 2025-06-21 Bogdan Ionescu
|
||||
* Configuration:
|
||||
* - USBPD_IMPLEMENTATION: Enable USB PD implementation
|
||||
* - FUNCONF_USBPD_NO_STR: Disable string conversion functions
|
||||
* Notes:
|
||||
* - This library is based on the USB Power Delivery Specification.
|
||||
* https://www.usb.org/document-library/usb-power-delivery
|
||||
* - Packed bitfield structs are used for de/serialization of USB PD messages and
|
||||
* are taken directly from the spec above.
|
||||
* - Not all messages are implemented.
|
||||
* - Formatting macros are provided next to the struct deffinitions.
|
||||
* Basic usage:
|
||||
* USBPD_VCC_e vcc = eUSBPD_VCC_5V0; // set the VCC voltage
|
||||
* USBPD_Result_e result = USBPD_Init( vcc ); // initialize the peripheral
|
||||
*
|
||||
* // wait for negotiation to complete.
|
||||
* while ( eUSBPD_BUSY == ( result = USBPD_SinkNegotiate() ) );
|
||||
*
|
||||
* USBPD_SPR_CapabilitiesMessage_t *capabilities;
|
||||
* const size_t count = USBPD_GetCapabilities( &capabilities );
|
||||
* USBPD_SelectPDO( count - 1, voltage ); // select the last supply (voltage is only used for PPS)
|
||||
*
|
||||
* The above is not a complete example, check the funtion declarations below for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ch32fun.h"
|
||||
#include "funconfig.h"
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef PACKED
|
||||
#define PACKED __attribute__( ( packed ) )
|
||||
#endif
|
||||
|
||||
// USB PD spec type definitions
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_PORTDATAROLE_DFP = 0, // Downstream Facing Port
|
||||
eUSBPD_PORTDATAROLE_UFP = 1, // Upstream Facing Port
|
||||
} USBPD_PortDataRole_e;
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_PORTPOWEROLE_SINK = 0, // Sink Power Role
|
||||
eUSBPD_PORTPOWEROLE_SOURCE = 1, // Source Power Role
|
||||
} USBPD_PortPowerRole_e;
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_REV_10 = 0x00u, // Revision 1.0
|
||||
eUSBPD_REV_20 = 0x01u, // Revision 2.0
|
||||
eUSBPD_REV_30 = 0x02u, // Revision 3.0
|
||||
} USBPD_SpecificationRevision_e;
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_CTRL_MSG_GOODCRC = 0x01u,
|
||||
eUSBPD_CTRL_MSG_GOTOMIN = 0x02u, // Depracated
|
||||
eUSBPD_CTRL_MSG_ACCEPT = 0x03u,
|
||||
eUSBPD_CTRL_MSG_REJECT = 0x04u,
|
||||
eUSBPD_CTRL_MSG_PING = 0x05u, // Deprecated
|
||||
eUSBPD_CTRL_MSG_PS_RDY = 0x06u,
|
||||
eUSBPD_CTRL_MSG_GET_SOURCE_CAP = 0x07u,
|
||||
eUSBPD_CTRL_MSG_GET_SINK_CAP = 0x08u,
|
||||
eUSBPD_CTRL_MSG_DR_SWAP = 0x09u,
|
||||
eUSBPD_CTRL_MSG_PR_SWAP = 0x0Au,
|
||||
eUSBPD_CTRL_MSG_VCONN_SWAP = 0x0Bu,
|
||||
eUSBPD_CTRL_MSG_WAIT = 0x0Cu,
|
||||
eUSBPD_CTRL_MSG_SOFT_RESET = 0x0Du,
|
||||
eUSBPD_CTRL_MSG_DATA_RESET = 0x0Eu,
|
||||
eUSBPD_CTRL_MSG_DATA_RESET_COMPLETE = 0x0Fu,
|
||||
eUSBPD_CTRL_MSG_NOT_SUPPORTED = 0x10u,
|
||||
eUSBPD_CTRL_MSG_GET_SOURCE_CAPEXT = 0x11u,
|
||||
eUSBPD_CTRL_MSG_GET_STATUS = 0x12u,
|
||||
eUSBPD_CTRL_MSG_FR_SWAP = 0x13u,
|
||||
eUSBPD_CTRL_MSG_GET_PPS_STATUS = 0x14u,
|
||||
eUSBPD_CTRL_MSG_GET_COUNTRY_CODES = 0x15u,
|
||||
eUSBPD_CTRL_MSG_GET_SINK_CAPEXT = 0x16u,
|
||||
eUSBPD_CTRL_MSG_GET_SOURCE_INFO = 0x17u,
|
||||
eUSBPD_CTRL_MSG_GET_REVISION = 0x18u,
|
||||
} USBPD_ControlMessage_e;
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_DATA_MSG_SOURCE_CAP = 0x01u,
|
||||
eUSBPD_DATA_MSG_REQUEST = 0x02u,
|
||||
eUSBPD_DATA_MSG_BIST = 0x03u,
|
||||
eUSBPD_DATA_MSG_SINK_CAP = 0x04u,
|
||||
eUSBPD_DATA_MSG_BATTERY_STATUS = 0x05u,
|
||||
eUSBPD_DATA_MSG_ALERT = 0x06u,
|
||||
eUSBPD_DATA_MSG_GET_COUNTRY_INFO = 0x07u,
|
||||
eUSBPD_DATA_MSG_ENTER_USB = 0x08u,
|
||||
eUSBPD_DATA_MSG_EPR_REUEST = 0x09u,
|
||||
eUSBPD_DATA_MSG_EPR_MODE = 0x0Au,
|
||||
eUSBPD_DATA_MSG_SOURCE_INFO = 0x0Bu,
|
||||
eUSBPD_DATA_MSG_REVISION = 0x0Cu,
|
||||
eUSBPD_DATA_MSG_VENDOR_DEFINED = 0x0Fu
|
||||
} USBPD_DataMessage_e;
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_EXTENDED_MSG_SOURCE_CAP_EXT = 0b00001,
|
||||
eUSBPD_EXTENDED_MSG_STATUS = 0b00010,
|
||||
eUSBPD_EXTENDED_MSG_GET_BATTERY_CAP = 0b00011,
|
||||
eUSBPD_EXTENDED_MSG_GET_BATTERY_STATUS = 0b00100,
|
||||
eUSBPD_EXTENDED_MSG_BATTERY_CAP = 0b00101,
|
||||
eUSBPD_EXTENDED_MSG_GET_MANUFACTURER_INFO = 0b00110,
|
||||
eUSBPD_EXTENDED_MSG_MANUFACTURER_INFO = 0b00111,
|
||||
eUSBPD_EXTENDED_MSG_SECURITY_REQUEST = 0b01000,
|
||||
eUSBPD_EXTENDED_MSG_SECURITY_RESPONSE = 0b01001,
|
||||
eUSBPD_EXTENDED_MSG_FIRMWARE_UPDATE_REQUEST = 0b01010,
|
||||
eUSBPD_EXTENDED_MSG_FIRMWARE_UPDATE_RESPONSE = 0b01011,
|
||||
eUSBPD_EXTENDED_MSG_PPS_STATUS = 0b01100,
|
||||
eUSBPD_EXTENDED_MSG_COUNTRY_INFO = 0b01101,
|
||||
eUSBPD_EXTENDED_MSG_COUNTRY_CODES = 0b01110,
|
||||
eUSBPD_EXTENDED_MSG_SINK_CAP_EXTENDED = 0b01111,
|
||||
eUSBPD_EXTENDED_MSG_EXTENDED_CONTROL = 0b10000,
|
||||
eUSBPD_EXTENDED_MSG_EPR_SOURCE_CAP = 0b10001,
|
||||
eUSBPD_EXTENDED_MSG_EPR_SINK_CAP = 0b10010,
|
||||
eUSBPD_EXTENDED_MSG_VENDOR_DEFINED_EXTENDED = 0b11110
|
||||
} USBPD_ExtendedMessage_e;
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint16_t data;
|
||||
struct
|
||||
{
|
||||
uint16_t MessageType : 5u; // USBPD_ControlMessage_t | USBPD_DataMessage_t
|
||||
USBPD_PortDataRole_e PortDataRole : 1u;
|
||||
USBPD_SpecificationRevision_e SpecificationRevision : 2u;
|
||||
USBPD_PortPowerRole_e PortPowerRole : 1u;
|
||||
uint16_t MessageID : 3u;
|
||||
uint16_t NumberOfDataObjects : 3u; // 0: Control Message, >0: Data Message
|
||||
uint16_t Extended : 1u;
|
||||
};
|
||||
} USBPD_MessageHeader_t;
|
||||
|
||||
typedef USBPD_MessageHeader_t USBPD_ControlMessage_t;
|
||||
static_assert( sizeof( USBPD_MessageHeader_t ) == sizeof( uint16_t ), "USBPD_MessageHeader_t size mismatch" );
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint16_t data;
|
||||
struct
|
||||
{
|
||||
uint16_t DataSize : 9u;
|
||||
uint16_t Reserved : 1u;
|
||||
uint16_t RequestChunk : 1u;
|
||||
uint16_t ChunkNumber : 4u;
|
||||
uint16_t Chunked : 1u;
|
||||
};
|
||||
} USBPD_ExtendedHeader_t;
|
||||
|
||||
static_assert( sizeof( USBPD_ExtendedHeader_t ) == sizeof( uint16_t ), "USBPD_ExtendedHeader_t size mismatch" );
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_PDO_FIXED = 0,
|
||||
eUSBPD_PDO_BATTERY = 1,
|
||||
eUSBPD_PDO_VARIABLE = 2,
|
||||
eUSBPD_PDO_AUGMENTED = 3,
|
||||
} USBPD_PowerDataObject_e;
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_APDO_SPR_PPS = 0, // Standard Power Range Programmable Power Supply
|
||||
eUSBPD_APDO_EPR_AVS = 1, // Extended Power Range Adjustable Voltage Supply
|
||||
eUSBPD_APDO_SPR_AVS = 2, // Standard Power Range Adjustable Voltage Supply
|
||||
eUSBPD_APDO_RESERVED = 3,
|
||||
} USBPD_AugmentedPDO_e;
|
||||
|
||||
typedef enum PACKED
|
||||
{
|
||||
eUSBPD_PEAK_CURRENT_0 = 0, /* Peak Current equals IoC */
|
||||
|
||||
eUSBPD_PEAK_CURRENT_1 = 1, /* 150% IoC for 1ms @ 5% duty cycle
|
||||
125% IoC for 2ms @ 10% duty cycle
|
||||
110% IoC for 10ms @ 50% duty cycle */
|
||||
|
||||
eUSBPD_PEAK_CURRENT_2 = 2, /* 200% IoC for 1ms @ 5% duty cycle
|
||||
150% IoC for 2ms @ 10% duty cycle
|
||||
125% IoC for 10ms @ 50% duty cycle */
|
||||
|
||||
eUSBPD_PEAK_CURRENT_3 = 3, /* 200% IoC for 1ms @ 5% duty cycle
|
||||
175% IoC for 2ms @ 10% duty cycle
|
||||
150% IoC for 10ms @ 50% duty cycle */
|
||||
} USBPD_PeakCurrent_e;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t data : 28u; // PDO specific data based on PDO type
|
||||
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_SPR_PPS
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
|
||||
} USBPD_PDOHeader_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxCurrentIn10mA : 10u;
|
||||
uint32_t VoltageIn50mV : 10u;
|
||||
USBPD_PeakCurrent_e PeakCurrent : 2u;
|
||||
uint32_t Reserved_22bit : 1u;
|
||||
uint32_t EPRModeCapable : 1u;
|
||||
uint32_t UnchunkedExtendedMessage : 1u;
|
||||
uint32_t DualRoleData : 1u;
|
||||
uint32_t USBCommunicationsCapable : 1u;
|
||||
uint32_t UnconstrainedPower : 1u;
|
||||
uint32_t USBSuspendSupported : 1u;
|
||||
uint32_t DualRolePower : 1u;
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_FIXED
|
||||
} USBPD_SourceFixedSupplyPDO_t;
|
||||
|
||||
#define FIXED_SUPPLY_FMT \
|
||||
"\nFixed Supply:\n" \
|
||||
"\tMax Current: %d mA\n" \
|
||||
"\tVoltage: %d mV\n" \
|
||||
"\tPeak Current: %d\n" \
|
||||
"\tEPR Mode Capable: %s\n" \
|
||||
"\tUnchunked Extended Message: %s\n" \
|
||||
"\tDual Role Data: %s\n" \
|
||||
"\tUSB Communications Capable: %s\n" \
|
||||
"\tUnconstrained Power: %s\n" \
|
||||
"\tUSB Suspend Supported: %s\n" \
|
||||
"\tDual Role Power: %s\n"
|
||||
|
||||
#define FIXED_SUPPLY_FMT_ARGS( pdo ) \
|
||||
( ( pdo )->FixedSupply.MaxCurrentIn10mA * 10 ), ( ( pdo )->FixedSupply.VoltageIn50mV * 50 ), \
|
||||
( ( pdo )->FixedSupply.PeakCurrent ), ( ( pdo )->FixedSupply.EPRModeCapable ? "Yes" : "No" ), \
|
||||
( ( pdo )->FixedSupply.UnchunkedExtendedMessage ? "Yes" : "No" ), \
|
||||
( ( pdo )->FixedSupply.DualRoleData ? "Yes" : "No" ), \
|
||||
( ( pdo )->FixedSupply.USBCommunicationsCapable ? "Yes" : "No" ), \
|
||||
( ( pdo )->FixedSupply.UnconstrainedPower ? "Yes" : "No" ), \
|
||||
( ( pdo )->FixedSupply.USBSuspendSupported ? "Yes" : "No" ), \
|
||||
( ( pdo )->FixedSupply.DualRolePower ? "Yes" : "No" )
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxCurrentIn10mA : 10u;
|
||||
uint32_t MinVoltageIn50mV : 10u;
|
||||
uint32_t MaxVoltageIn50mV : 10u;
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_VARIABLE
|
||||
} USBPD_VariablePDO_t;
|
||||
|
||||
#define VARIABLE_SUPPLY_FMT \
|
||||
"\nVariable Supply:\n" \
|
||||
"\tMax Current: %d mA\n" \
|
||||
"\tMin Voltage: %d mV\n" \
|
||||
"\tMax Voltage: %d mV\n"
|
||||
|
||||
#define VARIABLE_SUPPLY_FMT_ARGS( pdo ) \
|
||||
( ( pdo )->VariableSupply.MaxCurrentIn10mA * 10 ), ( ( pdo )->VariableSupply.MinVoltageIn50mV * 50 ), \
|
||||
( ( pdo )->VariableSupply.MaxVoltageIn50mV * 50 )
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxPowerIn250mW : 10u;
|
||||
uint32_t MinVoltageIn50mV : 10u;
|
||||
uint32_t MaxVoltageIn50mV : 10u;
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_BATTERY
|
||||
} USBPD_BatteryPDO_t;
|
||||
|
||||
#define BATTERY_SUPPLY_FMT \
|
||||
"\nBattery Supply:\n" \
|
||||
"\tMax Power: %d mW\n" \
|
||||
"\tMin Voltage: %d mV\n" \
|
||||
"\tMax Voltage: %d mV\n"
|
||||
|
||||
#define BATTERY_SUPPLY_FMT_ARGS( pdo ) \
|
||||
( ( pdo )->BatterySupply.MaxPowerIn250mW * 250 ), ( ( pdo )->BatterySupply.MinVoltageIn50mV * 50 ), \
|
||||
( ( pdo )->BatterySupply.MaxVoltageIn50mV * 50 )
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxCurrentIn50mA : 7u;
|
||||
uint32_t Reserved_7bit : 1u; // shall be set to zero
|
||||
uint32_t MinVoltageIn100mV : 8u;
|
||||
uint32_t Reserved_16bit : 1u; // shall be set to zero
|
||||
uint32_t MaxVoltageIn100mV : 8u;
|
||||
uint32_t Reserved_25_26bit : 2u; // shall be set to zero
|
||||
uint32_t PPSpowerLimited : 1u;
|
||||
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_SPR_PPS
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
|
||||
} USBPD_SPR_PPS_APDO_t;
|
||||
|
||||
#define SPR_PPS_FMT \
|
||||
"\nPPS Supply:\n" \
|
||||
"\tMax Current: %d mA\n" \
|
||||
"\tMin Voltage: %d mV\n" \
|
||||
"\tMax Voltage: %d mV\n" \
|
||||
"\tPPS Power Limited: %s\n"
|
||||
|
||||
#define SPR_PPS_FMT_ARGS( pdo ) \
|
||||
( ( pdo )->SPR_PPS.MaxCurrentIn50mA * 50 ), ( ( pdo )->SPR_PPS.MinVoltageIn100mV * 100 ), \
|
||||
( ( pdo )->SPR_PPS.MaxVoltageIn100mV * 100 ), ( ( pdo )->SPR_PPS.PPSpowerLimited ? "Yes" : "No" )
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t PDPIn1W : 8u;
|
||||
uint32_t MinVoltageIn100mV : 8u;
|
||||
uint32_t Reserved_16bit : 1u; // shall be set to zero
|
||||
uint32_t MaxVoltageIn100mV : 9u;
|
||||
USBPD_PeakCurrent_e PeakCurrent : 2u;
|
||||
|
||||
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_EPR_AVS
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
|
||||
} USBPD_EPR_AVS_APDO_t;
|
||||
|
||||
#define EPR_AVS_FMT \
|
||||
"\nEPR AVS Supply:\n" \
|
||||
"\tPDP: %d W\n" \
|
||||
"\tMin Voltage: %d mV\n" \
|
||||
"\tMax Voltage: %d mV\n" \
|
||||
"\tPeak Current: %d\n"
|
||||
|
||||
#define EPR_AVS_FMT_ARGS( pdo ) \
|
||||
( ( pdo )->EPR_AVS.PDPIn1W ), ( ( pdo )->EPR_AVS.MinVoltageIn100mV * 100 ), \
|
||||
( ( pdo )->EPR_AVS.MaxVoltageIn100mV * 100 ), ( ( pdo )->EPR_AVS.PeakCurrent )
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxCurrent15To20VIn10mA : 10u;
|
||||
uint32_t MaxCurrent9to15VIn10mA : 10u;
|
||||
uint32_t Reserved_20_25bit : 6u; // shall be set to zero
|
||||
USBPD_PeakCurrent_e PeakCurrent : 2u;
|
||||
USBPD_AugmentedPDO_e AugmentedType : 2u; // shall be eUSBPD_APDO_SPR_AVS
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_AUGMENTED
|
||||
} USBPD_SPR_AVS_APDO_t;
|
||||
|
||||
#define SPR_AVS_FMT \
|
||||
"\nSPR AVS Supply:\n" \
|
||||
"\tMax Current 15-20V: %d mA\n" \
|
||||
"\tMax Current 9-15V: %d mA\n" \
|
||||
"\tPeak Current: %d\n"
|
||||
|
||||
#define SPR_AVS_FMT_ARGS( pdo ) \
|
||||
( ( pdo )->SPR_AVS.MaxCurrent15To20VIn10mA * 10 ), ( ( pdo )->SPR_AVS.MaxCurrent9to15VIn10mA * 10 ), \
|
||||
( ( pdo )->SPR_AVS.PeakCurrent )
|
||||
|
||||
typedef union
|
||||
{
|
||||
USBPD_PDOHeader_t Header;
|
||||
USBPD_SourceFixedSupplyPDO_t FixedSupply;
|
||||
USBPD_VariablePDO_t VariableSupply;
|
||||
USBPD_BatteryPDO_t BatterySupply;
|
||||
USBPD_SPR_PPS_APDO_t SPR_PPS;
|
||||
USBPD_EPR_AVS_APDO_t EPR_AVS;
|
||||
USBPD_SPR_AVS_APDO_t SPR_AVS;
|
||||
} USBPD_SourcePDO_t;
|
||||
|
||||
static_assert( sizeof( USBPD_SourcePDO_t ) == sizeof( uint32_t ), "USBPD_SourcePDO_t size mismatch" );
|
||||
|
||||
typedef enum // Do not PACK, messes up alignment
|
||||
{
|
||||
eUSBPD_FAST_ROLE_SWAP_NOT_SUPPORTED = 0,
|
||||
eUSBPD_FAST_ROLE_SWAP_DEFAULT = 1,
|
||||
eUSBPD_FAST_ROLE_SWAP_1A5 = 2, // 1.5A @ 5V
|
||||
eUSBPD_FAST_ROLE_SWAP_3A = 3, // 3A @ 5V
|
||||
} USBPD_FastRoleSwapRequiredCurrent_e;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t CurrentIn10mA : 10u;
|
||||
uint32_t VoltageIn50mV : 10u;
|
||||
uint32_t Reserved_20_22bit : 3u; // shall be set to zero
|
||||
USBPD_FastRoleSwapRequiredCurrent_e FastRoleSwap : 2u;
|
||||
uint32_t DualRoleData : 1u;
|
||||
uint32_t USBComsCapable : 1u;
|
||||
uint32_t UnconstrainedPower : 1u;
|
||||
uint32_t HigherCapability : 1u;
|
||||
uint32_t DualRolePower : 1u;
|
||||
USBPD_PowerDataObject_e PDOType : 2u; // shall be eUSBPD_PDO_FIXED
|
||||
} USBPD_SinkFixedSupplyPDO_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
USBPD_PDOHeader_t Header;
|
||||
USBPD_SinkFixedSupplyPDO_t FixedSupply;
|
||||
USBPD_VariablePDO_t VariableSupply;
|
||||
USBPD_BatteryPDO_t BatterySupply;
|
||||
USBPD_SPR_PPS_APDO_t SPR_PPS;
|
||||
USBPD_EPR_AVS_APDO_t EPR_AVS;
|
||||
USBPD_SPR_AVS_APDO_t SPR_AVS;
|
||||
} USBPD_SinkPDO_t;
|
||||
|
||||
static_assert( sizeof( USBPD_SourcePDO_t ) == sizeof( uint32_t ), "USBPD_SourcePDO_t size mismatch" );
|
||||
static_assert( sizeof( USBPD_SinkPDO_t ) == sizeof( uint32_t ), "USBPD_SinkPDO_t size mismatch" );
|
||||
|
||||
// TODO: as per 6.15.8 EPR Source Capabilities Message, when the extended bit is
|
||||
// set a extended header is present and the capabilities become from 7 to 11 PDOs
|
||||
typedef union
|
||||
{
|
||||
USBPD_SourcePDO_t Source[7];
|
||||
USBPD_SinkPDO_t Sink[7];
|
||||
} USBPD_SPR_CapabilitiesMessage_t;
|
||||
|
||||
static_assert( sizeof( USBPD_SPR_CapabilitiesMessage_t ) == ( 7 * sizeof( uint32_t ) ),
|
||||
"USBPD_SPR_CapabilitiesMessage_t size mismatch" );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxCurrentIn10mA : 10u;
|
||||
uint32_t OperatingCurrentIn10mA : 10u;
|
||||
uint32_t Reserved_20_21bit : 2u; // shall be set to zero
|
||||
uint32_t ERPCapable : 1u;
|
||||
uint32_t UnchunkedExtendedMessage : 1u;
|
||||
uint32_t NoUSBSuspended : 1u;
|
||||
uint32_t USBComsCapable : 1u;
|
||||
uint32_t CapabilityMissmatch : 1u;
|
||||
uint32_t Giveback : 1u; // Deprecated, shall be set to zero
|
||||
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
|
||||
} USBPD_FixedAndVariableRDO_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t MaxPowerIn250mW : 10u;
|
||||
uint32_t OperatingPowerIn250mW : 10u;
|
||||
uint32_t Reserved_20_21bit : 2u; // shall be set to zero
|
||||
uint32_t ERPCapable : 1u;
|
||||
uint32_t UnchunkedExtendedMessage : 1u;
|
||||
uint32_t NoUSBSuspended : 1u;
|
||||
uint32_t USBComsCapable : 1u;
|
||||
uint32_t CapabilityMissmatch : 1u;
|
||||
uint32_t Giveback : 1u; // Deprecated, shall be set to zero
|
||||
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
|
||||
} USBPD_BatteryRDO_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t OperatingCurrentIn50mA : 7u;
|
||||
uint32_t Reserved_7_8bit : 2u; // shall be set to zero
|
||||
uint32_t OutputVoltageIn20mV : 12u;
|
||||
uint32_t Reserved_21bit : 1u; // shall be set to zero
|
||||
uint32_t ERPCapable : 1u;
|
||||
uint32_t UnchunkedExtendedMessage : 1u;
|
||||
uint32_t NoUSBSuspended : 1u;
|
||||
uint32_t USBComsCapable : 1u;
|
||||
uint32_t CapabilityMissmatch : 1u;
|
||||
uint32_t Reserved_27bit : 1u; // Deprecated, shall be set to zero
|
||||
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
|
||||
} USBPD_PPS_RDO_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t OperatingCurrentIn50mA : 7u;
|
||||
uint32_t Reserved_7_8bit : 2u; // shall be set to zero
|
||||
uint32_t OutputVoltageIn100mV : 12u; // NOTE: Output voltage in 25mV units, the least two significant bits Shall
|
||||
// be set to zero making the effective voltage step size 100mV.
|
||||
uint32_t Reserved_21bit : 1u; // shall be set to zero
|
||||
uint32_t ERPCapable : 1u;
|
||||
uint32_t UnchunkedExtendedMessage : 1u;
|
||||
uint32_t NoUSBSuspended : 1u;
|
||||
uint32_t USBComsCapable : 1u;
|
||||
uint32_t CapabilityMissmatch : 1u;
|
||||
uint32_t Reserved_27bit : 1u; // Deprecated, shall be set to zero
|
||||
uint32_t ObjectPosition : 4u; // Reserved and shall not be used
|
||||
} USBPD_AVS_RDO_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
USBPD_FixedAndVariableRDO_t FixedAndVariable;
|
||||
USBPD_BatteryRDO_t Battery;
|
||||
USBPD_PPS_RDO_t PPS;
|
||||
} USBPD_RequestDataObject_t;
|
||||
|
||||
static_assert( sizeof( USBPD_RequestDataObject_t ) == sizeof( uint32_t ), "USBPD_RequestDataObject_t size mismatch" );
|
||||
|
||||
// TODO: Define the rest of the message types sections 6.4.3 -> 6.5.16
|
||||
|
||||
typedef enum
|
||||
{
|
||||
eUSBPD_MAX_EXTENDED_MSG_LEN = 260,
|
||||
eUSBPD_MAX_EXTENDED_MSG_CHUNK_LEN = 26,
|
||||
eUSBPD_MAX_EXTENDED_MSG_LEGACY_LEN = 26,
|
||||
} USBPD_ValueParameters_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
eUSBPD_OK = 0,
|
||||
eUSBPD_BUSY,
|
||||
eUSBPD_ERROR,
|
||||
eUSBPD_ERROR_ARGS,
|
||||
eUSBPD_ERROR_NOT_SUPPORTED,
|
||||
eUSBPD_ERROR_TIMEOUT,
|
||||
} USBPD_Result_e;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
eUSBPD_VCC_3V3 = 0,
|
||||
eUSBPD_VCC_5V0 = 1,
|
||||
} USBPD_VCC_e;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
eUSBPD_CCNONE = 0,
|
||||
eUSBPD_CC1 = 1,
|
||||
eUSBPD_CC2 = 2,
|
||||
} USBPD_CC_e;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
eSTATE_IDLE,
|
||||
eSTATE_CABLE_DETECT,
|
||||
eSTATE_SOURCE_CAP,
|
||||
eSTATE_WAIT_ACCEPT,
|
||||
eSTATE_WAIT_PS_RDY,
|
||||
eSTATE_PS_RDY,
|
||||
eSTATE_MAX,
|
||||
} USBPD_State_e;
|
||||
|
||||
/**
|
||||
* @brief Initialize the USB PD module
|
||||
* @param vcc: VCC voltage level (3.3V or 5V)
|
||||
* @return USBPD_Result_e
|
||||
*/
|
||||
USBPD_Result_e USBPD_Init( USBPD_VCC_e vcc );
|
||||
|
||||
/**
|
||||
* @brief Negotiate with the USB PD Source, must be called periodically
|
||||
* @param None
|
||||
* @return USBPD_BUSY if negotiation is in progress, eUSBPD_OK if successful, or an error code
|
||||
*/
|
||||
USBPD_Result_e USBPD_SinkNegotiate( void );
|
||||
|
||||
/**
|
||||
* @brief Reset the USB PD module
|
||||
* @param None
|
||||
* @return None
|
||||
*/
|
||||
void USBPD_Reset( void );
|
||||
|
||||
/**
|
||||
* @brief Get the current state of the USB PD module
|
||||
* @param None
|
||||
* @return USBPD_State_e representing the current state of the module
|
||||
*/
|
||||
USBPD_State_e USBPD_GetState( void );
|
||||
|
||||
/**
|
||||
* @brief Convert USB PD state to string
|
||||
* @param state: USBPD_State_e to convert
|
||||
* @return Pointer to a string representing the state
|
||||
*/
|
||||
const char *USBPD_StateToStr( USBPD_State_e state );
|
||||
|
||||
/**
|
||||
* @brief Convert USB PD result to string
|
||||
* @param result: USBPD_Result_e to convert
|
||||
* @return Pointer to a string representing the result
|
||||
*/
|
||||
const char *USBPD_ResultToStr( USBPD_Result_e result );
|
||||
|
||||
/**
|
||||
* @brief Select a new Power Data Object (PDO) to be used. No re-negotiation is needed.
|
||||
* @param index: Index of the PDO to select (0-based)
|
||||
* @param voltageIn100mV: Desired output voltage in 100mV units (e.g., 500 for 5V) (only applicable for PPS)
|
||||
* @return USBPD_Result_e
|
||||
*/
|
||||
USBPD_Result_e USBPD_SelectPDO( uint8_t index, uint32_t voltageIn100mV );
|
||||
|
||||
/**
|
||||
* @brief Get the capabilities of the USB PD Source
|
||||
* @param[out] capabilities: Pointer to a pointer where the capabilities message structure is stored
|
||||
* @return Number of Power Data Objects (PDOs) in the capabilities message
|
||||
*/
|
||||
size_t USBPD_GetCapabilities( USBPD_SPR_CapabilitiesMessage_t **capabilities );
|
||||
|
||||
/**
|
||||
* @brief Check if the Power Data Object is a Programmable Power Supply (PPS)
|
||||
* @param[in] pdo: Pointer to the Power Data Object to check
|
||||
* @return true if the PDO is a PPS, false otherwise
|
||||
*/
|
||||
bool USBPD_IsPPS( const USBPD_SourcePDO_t *pdo );
|
||||
|
||||
/**
|
||||
* @brief Get the USB PD Specification Revision
|
||||
* @param None
|
||||
* @return USBPD_SpecificationRevision_e representing the USB PD specification revision
|
||||
*/
|
||||
USBPD_SpecificationRevision_e USBPD_GetVersion( void );
|
||||
|
||||
#if defined( USBPD_IMPLEMENTATION )
|
||||
|
||||
#include <string.h>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t ccCount;
|
||||
volatile USBPD_State_e state;
|
||||
USBPD_SpecificationRevision_e pdVersion;
|
||||
USBPD_CC_e lastCCLine;
|
||||
USBPD_SPR_CapabilitiesMessage_t caps;
|
||||
uint8_t messageID;
|
||||
uint8_t pdoCount;
|
||||
bool gotSourceGoodCRC;
|
||||
} USBPD_Instance_t;
|
||||
|
||||
static __attribute__( ( aligned( 4 ) ) ) uint8_t s_buffer[34];
|
||||
static USBPD_Instance_t s_instance = {
|
||||
.pdVersion = eUSBPD_REV_30,
|
||||
};
|
||||
|
||||
static USBPD_CC_e GetActiveCCLine( void );
|
||||
static void SwitchRXMode( void );
|
||||
static void SendMessage( uint8_t size );
|
||||
static void ParsePacket( void );
|
||||
|
||||
USBPD_Result_e USBPD_Init( USBPD_VCC_e vcc )
|
||||
{
|
||||
RCC->APB2PCENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO;
|
||||
RCC->AHBPCENR |= RCC_USBPD;
|
||||
|
||||
GPIOC->CFGHR &= ~( 0xf << ( ( 14 & 7 ) << 2 ) );
|
||||
GPIOC->CFGHR |= ( GPIO_Speed_10MHz | GPIO_CNF_OUT_OD ) << ( ( 14 & 7 ) << 2 );
|
||||
GPIOC->CFGHR &= ~( 0xf << ( ( 15 & 7 ) << 2 ) );
|
||||
GPIOC->CFGHR |= ( GPIO_Speed_10MHz | GPIO_CNF_OUT_OD ) << ( ( 15 & 7 ) << 2 );
|
||||
|
||||
AFIO->CTLR |= USBPD_IN_HVT;
|
||||
if ( vcc == eUSBPD_VCC_3V3 )
|
||||
{
|
||||
AFIO->CTLR |= USBPD_PHY_V33;
|
||||
}
|
||||
|
||||
USBPD->DMA = (uint32_t)s_buffer;
|
||||
USBPD->CONFIG = IE_RX_ACT | IE_RX_RESET | IE_TX_END | PD_DMA_EN | PD_FILT_EN;
|
||||
USBPD->STATUS = BUF_ERR | IF_RX_BIT | IF_RX_BYTE | IF_RX_ACT | IF_RX_RESET | IF_TX_END;
|
||||
|
||||
// disable CC comparators
|
||||
USBPD->PORT_CC1 &= ~( CC_CMP_MASK | PA_CC_AI );
|
||||
USBPD->PORT_CC2 &= ~( CC_CMP_MASK | PA_CC_AI );
|
||||
// set CC comparator voltage
|
||||
USBPD->PORT_CC1 |= CC_CMP_66;
|
||||
USBPD->PORT_CC2 |= CC_CMP_66;
|
||||
|
||||
return eUSBPD_OK;
|
||||
}
|
||||
|
||||
USBPD_Result_e USBPD_SinkNegotiate( void )
|
||||
{
|
||||
switch ( s_instance.state )
|
||||
{
|
||||
case eSTATE_IDLE:;
|
||||
const uint8_t ccLine = GetActiveCCLine();
|
||||
if ( ccLine == eUSBPD_CCNONE )
|
||||
{
|
||||
s_instance.ccCount = 0;
|
||||
s_instance.lastCCLine = eUSBPD_CCNONE;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( s_instance.lastCCLine != ccLine )
|
||||
{
|
||||
s_instance.lastCCLine = ccLine;
|
||||
s_instance.ccCount = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
s_instance.ccCount++;
|
||||
}
|
||||
|
||||
if ( s_instance.ccCount > 10 )
|
||||
{
|
||||
if ( ccLine == eUSBPD_CC2 )
|
||||
{
|
||||
USBPD->CONFIG |= CC_SEL;
|
||||
}
|
||||
else
|
||||
{
|
||||
USBPD->CONFIG &= ~CC_SEL;
|
||||
}
|
||||
|
||||
s_instance.ccCount = 0;
|
||||
s_instance.state = eSTATE_CABLE_DETECT;
|
||||
|
||||
SwitchRXMode();
|
||||
// NVIC_SetPriority(USBPD_IRQn, 0x00); // TODO: Is this needed?
|
||||
NVIC_EnableIRQ( USBPD_IRQn );
|
||||
}
|
||||
break;
|
||||
|
||||
case eSTATE_SOURCE_CAP:
|
||||
USBPD_SelectPDO( 0, 0 ); // Select the first PDO by default
|
||||
s_instance.state = eSTATE_WAIT_ACCEPT;
|
||||
break;
|
||||
|
||||
case eSTATE_PS_RDY: return eUSBPD_OK;
|
||||
|
||||
default: break;
|
||||
}
|
||||
|
||||
return eUSBPD_BUSY;
|
||||
}
|
||||
|
||||
void USBPD_Reset( void )
|
||||
{
|
||||
NVIC_DisableIRQ( USBPD_IRQn );
|
||||
s_instance = ( USBPD_Instance_t ){
|
||||
.pdVersion = eUSBPD_REV_30,
|
||||
};
|
||||
}
|
||||
|
||||
USBPD_State_e USBPD_GetState( void )
|
||||
{
|
||||
return s_instance.state;
|
||||
}
|
||||
|
||||
#if FUNCONF_USBPD_NO_STR
|
||||
const char *USBPD_StateToStr( USBPD_State_e state )
|
||||
{
|
||||
(void)state;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *USBPD_ResultToStr( USBPD_Result_e result )
|
||||
{
|
||||
(void)result;
|
||||
return "";
|
||||
}
|
||||
#else
|
||||
const char *USBPD_StateToStr( USBPD_State_e state )
|
||||
{
|
||||
switch ( state )
|
||||
{
|
||||
case eSTATE_IDLE: return "Idle";
|
||||
case eSTATE_CABLE_DETECT: return "Cable Detected";
|
||||
case eSTATE_SOURCE_CAP: return "Got Source Capabilities";
|
||||
case eSTATE_WAIT_ACCEPT: return "Waiting for Accept";
|
||||
case eSTATE_WAIT_PS_RDY: return "Waiting for PS_Ready";
|
||||
case eSTATE_PS_RDY: return "Power Supply Ready";
|
||||
default: return "Unknown State";
|
||||
}
|
||||
};
|
||||
|
||||
const char *USBPD_ResultToStr( USBPD_Result_e result )
|
||||
{
|
||||
switch ( result )
|
||||
{
|
||||
case eUSBPD_OK: return "OK";
|
||||
case eUSBPD_BUSY: return "Busy";
|
||||
case eUSBPD_ERROR: return "Error";
|
||||
case eUSBPD_ERROR_ARGS: return "Error Args";
|
||||
case eUSBPD_ERROR_NOT_SUPPORTED: return "Error Not Supported";
|
||||
case eUSBPD_ERROR_TIMEOUT: return "Error Timeout";
|
||||
default: return "Unknown Result";
|
||||
}
|
||||
}
|
||||
#endif // FUNCONF_USBPD_NO_STR
|
||||
|
||||
USBPD_Result_e USBPD_SelectPDO( uint8_t index, uint32_t voltageIn100mV )
|
||||
{
|
||||
if ( index >= s_instance.pdoCount )
|
||||
{
|
||||
return eUSBPD_ERROR_ARGS;
|
||||
}
|
||||
|
||||
const USBPD_SourcePDO_t *const pdo = &s_instance.caps.Source[index];
|
||||
|
||||
*(USBPD_MessageHeader_t *)&s_buffer[0] = ( USBPD_MessageHeader_t ){
|
||||
.MessageID = s_instance.messageID,
|
||||
.MessageType = eUSBPD_DATA_MSG_REQUEST,
|
||||
.NumberOfDataObjects = 1u,
|
||||
.SpecificationRevision = s_instance.pdVersion,
|
||||
};
|
||||
USBPD_RequestDataObject_t *const rdo = (USBPD_RequestDataObject_t *)&s_buffer[sizeof( USBPD_MessageHeader_t )];
|
||||
|
||||
if ( USBPD_IsPPS( pdo ) )
|
||||
{
|
||||
// Clamp voltage to min/max NOTE: Maybe we should return an error if the voltage is out of range?
|
||||
const uint32_t minVoltage = pdo->SPR_PPS.MinVoltageIn100mV;
|
||||
const uint32_t maxVoltage = pdo->SPR_PPS.MaxVoltageIn100mV;
|
||||
voltageIn100mV = voltageIn100mV > maxVoltage ? maxVoltage : voltageIn100mV;
|
||||
voltageIn100mV = voltageIn100mV < minVoltage ? minVoltage : voltageIn100mV;
|
||||
|
||||
*rdo = ( USBPD_RequestDataObject_t ){
|
||||
.PPS =
|
||||
{
|
||||
.ObjectPosition = index + 1,
|
||||
.OutputVoltageIn20mV = voltageIn100mV * 5,
|
||||
.OperatingCurrentIn50mA = pdo->SPR_PPS.MaxCurrentIn50mA,
|
||||
.NoUSBSuspended = 1u,
|
||||
.USBComsCapable = 1u, // TODO: Should have these are arguments or define
|
||||
},
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
*rdo = ( USBPD_RequestDataObject_t ){
|
||||
.FixedAndVariable =
|
||||
{
|
||||
.ObjectPosition = index + 1,
|
||||
.MaxCurrentIn10mA = pdo->FixedSupply.MaxCurrentIn10mA,
|
||||
.OperatingCurrentIn10mA = pdo->FixedSupply.MaxCurrentIn10mA,
|
||||
.USBComsCapable = 1u,
|
||||
.NoUSBSuspended = 1u,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
SendMessage( 6 );
|
||||
|
||||
return eUSBPD_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the capabilities of the USB PD Source
|
||||
* @param[out] capabilities: pointer to the capabilities message structure
|
||||
* @return Number of Power Data Objects (PDOs) in the capabilities message
|
||||
*/
|
||||
size_t USBPD_GetCapabilities( USBPD_SPR_CapabilitiesMessage_t **capabilities )
|
||||
{
|
||||
if ( s_instance.pdoCount == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( capabilities )
|
||||
{
|
||||
*capabilities = &s_instance.caps;
|
||||
}
|
||||
|
||||
return s_instance.pdoCount;
|
||||
}
|
||||
|
||||
bool USBPD_IsPPS( const USBPD_SourcePDO_t *pdo )
|
||||
{
|
||||
return ( pdo->Header.PDOType == eUSBPD_PDO_AUGMENTED ) && ( pdo->Header.AugmentedType == eUSBPD_APDO_SPR_PPS );
|
||||
}
|
||||
|
||||
USBPD_SpecificationRevision_e USBPD_GetVersion( void )
|
||||
{
|
||||
return s_instance.pdVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check CC line status
|
||||
* @param None
|
||||
* @return USBPD_CC_t
|
||||
*/
|
||||
static USBPD_CC_e GetActiveCCLine( void )
|
||||
{
|
||||
// Switch to CC1
|
||||
USBPD->CONFIG &= ~CC_SEL;
|
||||
Delay_Us( 1 );
|
||||
// check if CC1 is connected
|
||||
if ( USBPD->PORT_CC1 & PA_CC_AI )
|
||||
{
|
||||
return eUSBPD_CC1;
|
||||
}
|
||||
|
||||
// Switch to CC2
|
||||
USBPD->CONFIG |= CC_SEL;
|
||||
Delay_Us( 1 );
|
||||
if ( USBPD->PORT_CC2 & PA_CC_AI )
|
||||
{
|
||||
return eUSBPD_CC2;
|
||||
}
|
||||
|
||||
return eUSBPD_CCNONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Switch to RX mode
|
||||
* @param None
|
||||
* @return None
|
||||
*/
|
||||
static void SwitchRXMode( void )
|
||||
{
|
||||
USBPD->BMC_CLK_CNT = UPD_TMR_RX;
|
||||
USBPD->CONTROL = ( USBPD->CONTROL & ~PD_TX_EN ) | BMC_START;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Begin transmission of PD message
|
||||
* @param size: size of the message in bytes
|
||||
* @return None
|
||||
*/
|
||||
static void SendMessage( uint8_t size )
|
||||
{
|
||||
USBPD->BMC_CLK_CNT = UPD_TMR_TX;
|
||||
USBPD->TX_SEL = UPD_SOP0;
|
||||
USBPD->BMC_TX_SZ = size;
|
||||
USBPD->STATUS = 0;
|
||||
USBPD->CONTROL |= BMC_START | PD_TX_EN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Parse the received packet
|
||||
* @param None
|
||||
* @return None
|
||||
*/
|
||||
static void ParsePacket( void )
|
||||
{
|
||||
bool sendGoodCRC = true;
|
||||
USBPD_MessageHeader_t message = *(USBPD_MessageHeader_t *)s_buffer;
|
||||
|
||||
USBPD_State_e nextState = s_instance.state;
|
||||
|
||||
if ( message.NumberOfDataObjects == 0u )
|
||||
{
|
||||
switch ( (USBPD_ControlMessage_e)message.MessageType )
|
||||
{
|
||||
case eUSBPD_CTRL_MSG_GOODCRC:
|
||||
sendGoodCRC = false;
|
||||
s_instance.messageID++;
|
||||
break;
|
||||
|
||||
case eUSBPD_CTRL_MSG_ACCEPT: nextState = eSTATE_WAIT_PS_RDY; break;
|
||||
|
||||
case eUSBPD_CTRL_MSG_REJECT: nextState = eSTATE_SOURCE_CAP; break;
|
||||
|
||||
case eUSBPD_CTRL_MSG_PS_RDY: nextState = eSTATE_PS_RDY; break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch ( (USBPD_DataMessage_e)message.MessageType )
|
||||
{
|
||||
|
||||
case eUSBPD_DATA_MSG_SOURCE_CAP:
|
||||
nextState = eSTATE_SOURCE_CAP;
|
||||
s_instance.pdoCount = message.NumberOfDataObjects;
|
||||
s_instance.pdVersion = message.SpecificationRevision;
|
||||
memcpy( &s_instance.caps, &s_buffer[2], sizeof( USBPD_SPR_CapabilitiesMessage_t ) );
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: this ignores the extended part of the protocol, so we never parse
|
||||
// the extended capabilities region
|
||||
if ( message.Extended || sendGoodCRC )
|
||||
{
|
||||
Delay_Us( 30 );
|
||||
USBPD_ControlMessage_t reply = ( USBPD_ControlMessage_t ){
|
||||
.MessageID = message.MessageID,
|
||||
.MessageType = eUSBPD_CTRL_MSG_GOODCRC,
|
||||
.SpecificationRevision = s_instance.pdVersion,
|
||||
};
|
||||
*(uint16_t *)&s_buffer[0] = reply.data;
|
||||
SendMessage( sizeof( reply ) );
|
||||
}
|
||||
|
||||
s_instance.state = nextState;
|
||||
}
|
||||
|
||||
void USBPD_IRQHandler( void ) __attribute__( ( interrupt ) );
|
||||
void USBPD_IRQHandler( void )
|
||||
{
|
||||
// Receive complete interrupt
|
||||
if ( USBPD->STATUS & IF_RX_ACT )
|
||||
{
|
||||
// Check if we received a SOP0 packet
|
||||
if ( ( ( USBPD->STATUS & BMC_AUX_MASK ) == BMC_AUX_SOP0 ) && ( USBPD->BMC_BYTE_CNT >= 6 ) )
|
||||
{
|
||||
ParsePacket();
|
||||
}
|
||||
USBPD->STATUS |= IF_RX_ACT;
|
||||
}
|
||||
|
||||
// Transmit complete interrupt (GoodCRC only)
|
||||
if ( USBPD->STATUS & IF_TX_END )
|
||||
{
|
||||
SwitchRXMode();
|
||||
USBPD->STATUS |= IF_TX_END;
|
||||
}
|
||||
|
||||
// Reset interrupt
|
||||
if ( USBPD->STATUS & IF_RX_RESET )
|
||||
{
|
||||
USBPD->STATUS |= IF_RX_RESET;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
4
hw/.gitignore
vendored
4
hw/.gitignore
vendored
@ -39,7 +39,3 @@ fp-info-cache
|
||||
|
||||
# Local project settings
|
||||
*.kicad_prl
|
||||
.history
|
||||
|
||||
# fabrication toolkit output
|
||||
production
|
||||
|
||||
@ -1,28 +1,25 @@
|
||||
Index,LCSC#,MPN,Manufacturer,Package,Customer #,Description,RoHS,Quantity,MOQ,Multiple,Unit Price(€),Extended Price(€),Product Link
|
||||
1,C473369,TLV333IDBVR,TI,SOT-23-5,,"2uV Rail-to-Rail Input, Rail-to-Rail Output 70pA 0.16V/us 102dB 17uA 350kHz 1 SOT-23-5 Amplifiers RoHS",yes,5,5,5,0.2121,1.06,https://www.lcsc.com/product-detail/C473369.html
|
||||
1,C473369,TLV333IDBVR,TI,SOT-23-5,,"2uV 70pA 0.16V/us 102dB 17uA 350kHz 1 Rail-to-Rail Input, Rail-to-Rail Output SOT-23-5 Amplifiers RoHS",yes,5,5,5,0.2053,1.03,https://www.lcsc.com/product-detail/C473369.html
|
||||
2,C2827931,SS24L,Guangdong Hottech,SOD-123FL,,Diode Independent 40V 2A Surface Mount SOD-123FL,yes,20,20,20,0.0204,0.41,https://www.lcsc.com/product-detail/C2827931.html
|
||||
3,C2931472,U263-163N-4OS1735,XKB Connection,SMD,,USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount,yes,5,5,5,0.2518,1.26,https://www.lcsc.com/product-detail/C2931472.html
|
||||
4,C2999960,MM5Z3V3,Slkor,SOD-523,,Zener Diode Independent 3.3V 200mW Surface Mount SOD-523,yes,20,20,20,0.0180,0.36,https://www.lcsc.com/product-detail/C2999960.html
|
||||
3,C2931472,U263-163N-4OS1735,XKB Connection,SMD,,USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount,yes,5,5,5,0.2495,1.25,https://www.lcsc.com/product-detail/C2931472.html
|
||||
4,C2999960,MM5Z3V3,Slkor,SOD-523,,Zener Diode Independent 3.3V 200mW Surface Mount SOD-523,yes,20,20,20,0.0179,0.36,https://www.lcsc.com/product-detail/C2999960.html
|
||||
5,C52754543,RB521S30T1G-HXY,HXY MOSFET,SOD-523,,1A 1 Independent 30V 350mV@10mA 200mA SOD-523 Single Diodes RoHS,yes,20,20,20,0.0202,0.40,https://www.lcsc.com/product-detail/C52754543.html
|
||||
6,C42442062,CH32X035F8U6,WCH,QFN-20-EP(3x3),,QFN-20-EP(3x3) Microcontrollers RoHS,yes,5,1,1,0.4460,2.23,https://www.lcsc.com/product-detail/C42442062.html
|
||||
7,C780769,AP63203WU-7,DIODES,TSOT-23-6,,1.1MHz Buck Fixed 2A 3.3V 3.8V~32V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,5,1,1,0.3766,1.88,https://www.lcsc.com/product-detail/C780769.html
|
||||
8,C7466527,AGM403AP,AGMSEMI,PDFN3.3x3.3-8,,N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3,yes,5,5,5,0.2447,1.22,https://www.lcsc.com/product-detail/C7466527.html
|
||||
9,C2906999,FRC0603F1803TS,FOJAN,0603,,180kΩ ±1% 100mW 0603 Thick Film Resistor,yes,100,100,100,0.0010,0.10,https://www.lcsc.com/product-detail/C2906999.html
|
||||
10,C4169844,RS73F1JTTD2703B,KOA,0603,,200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,5,5,5,0.0638,0.32,https://www.lcsc.com/product-detail/C4169844.html
|
||||
11,C2932326,MT3608L,XI'AN Aerosemi Tech,SOT-23-6,,1.2MHz Boost Adjustable 2.2V~16V 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,10,10,10,0.0373,0.37,https://www.lcsc.com/product-detail/C2932326.html
|
||||
12,C138714,TPD4E05U06DQAR,TI,USON-10(1x2.5),,14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5),yes,5,5,5,0.0679,0.34,https://www.lcsc.com/product-detail/C138714.html
|
||||
13,C19274408,SC7A20HTR,Hangzhou Silan Microelectronics,LGA-12(2x2),,LGA-12(2x2) Accelerometers RoHS,yes,5,1,1,0.2417,1.21,https://www.lcsc.com/product-detail/C19274408.html
|
||||
14,C52741377,CPN201610H6R8MT,Magnetsyc,0806,,820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS,yes,20,20,20,0.0277,0.55,https://www.lcsc.com/product-detail/C52741377.html
|
||||
15,C110776,RT0603BRD071KL,YAGEO,0603,,100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,20,20,20,0.0187,0.37,https://www.lcsc.com/product-detail/C110776.html
|
||||
6,C51933397,TPA191A1Q-SC6R-S,3PEAK,SOT-363,,SOT-363 Amplifiers RoHS,yes,5,1,1,0.3810,1.91,https://www.lcsc.com/product-detail/C51933397.html
|
||||
7,C42442062,CH32X035F8U6,WCH,QFN-20-EP(3x3),,QFN-20-EP(3x3) Microcontrollers RoHS,yes,5,1,1,0.4460,2.23,https://www.lcsc.com/product-detail/C42442062.html
|
||||
8,C780769,AP63203WU-7,DIODES,TSOT-23-6,,1.1MHz Buck Fixed 2A 3.3V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,5,1,1,0.4123,2.06,https://www.lcsc.com/product-detail/C780769.html
|
||||
9,C7466527,AGM403AP,AGMSEMI,PDFN3.3x3.3-8,,N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3,yes,5,5,5,0.2447,1.22,https://www.lcsc.com/product-detail/C7466527.html
|
||||
10,C2906999,FRC0603F1803TS,FOJAN,0603,,180kΩ ±1% 100mW 0603 Thick Film Resistor,yes,100,100,100,0.0011,0.11,https://www.lcsc.com/product-detail/C2906999.html
|
||||
11,C4169844,RS73F1JTTD2703B,KOA,0603,,200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,5,5,5,0.0891,0.45,https://www.lcsc.com/product-detail/C4169844.html
|
||||
12,C76799,MLZ1608M4R7WT000,TDK,0603,,350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS,yes,10,10,10,0.0346,0.35,https://www.lcsc.com/product-detail/C76799.html
|
||||
13,C2932326,MT3608L,XI'AN Aerosemi Tech,SOT-23-6,,1.2MHz Boost Adjustable 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,yes,10,10,10,0.0373,0.37,https://www.lcsc.com/product-detail/C2932326.html
|
||||
14,C41414522,NSG10752,WXNSIC,SOT-23-6,,High Side Gate Driver IC MOSFET IGBT SOT-23-6,yes,5,1,1,0.4600,2.30,https://www.lcsc.com/product-detail/C41414522.html
|
||||
15,C46818248,SIQ-02FVS3,LZG,-,,Encoders - Industrial RoHS,yes,5,1,1,0.9816,4.91,https://www.lcsc.com/product-detail/C46818248.html
|
||||
16,C162670,NCU18XH103F6SRB,muRata,0603,,NTC Thermistor 10kΩ Surface Mount 0603,yes,10,10,10,0.0533,0.53,https://www.lcsc.com/product-detail/C162670.html
|
||||
17,C46818248,SIQ-02FVS3,LZG,-,,Encoders - Industrial RoHS,yes,5,1,1,0.9816,4.91,https://www.lcsc.com/product-detail/C46818248.html
|
||||
18,C41414522,NSG10752,WXNSIC,SOT-23-6,,High Side Gate Driver IC MOSFET IGBT SOT-23-6,yes,5,1,1,0.4600,2.30,https://www.lcsc.com/product-detail/C41414522.html
|
||||
19,C76799,MLZ1608M4R7WT000,TDK,0603,,350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS,yes,10,10,10,0.0341,0.34,https://www.lcsc.com/product-detail/C76799.html
|
||||
20,C98192,CL21A475KBQNNNE,Samsung Electro-Mechanics,0805,,4.7uF ±10% 50V Ceramic Capacitor X5R 0805,yes,10,10,10,0.0179,0.18,https://www.lcsc.com/product-detail/C98192.html
|
||||
21,C29936,CL10B105KA8NNNC,Samsung Electro-Mechanics,0603,,1uF ±10% 25V Ceramic Capacitor X7R 0603,yes,50,50,50,0.0056,0.28,https://www.lcsc.com/product-detail/C29936.html
|
||||
22,C2997487,MPD220M1VD19040R,Ymin,"SMD,7.3x4.3mm",,"35V 22uF 3.2A@100kHz 40mΩ@100kHz ±20% SMD,7.3x4.3mm Aluminum - Polymer Capacitors RoHS",yes,5,1,1,0.7063,3.53,https://www.lcsc.com/product-detail/C2997487.html
|
||||
23,C5370906,FC-ALX 4030D-2R2MT,FANGCHENG,"SMD,4.2x4.2mm",,"8.1A 2.2uH 8.1A 10.7mΩ Molded Inductor ±20% SMD,4.2x4.2mm Fixed Inductors RoHS",yes,5,1,1,0.4781,2.39,https://www.lcsc.com/product-detail/C5370906.html
|
||||
24,C18723014,X069-9616TSWIG02-H14,Wisevision,-,,"0.69 96x16 SSD1312 chip I2C LCD, OLED, Graphic RoHS",yes,2,1,1,1.3337,2.67,https://www.lcsc.com/product-detail/C18723014.html
|
||||
25,C386166,UMK325AB7106KMHP,Taiyo Yuden,1210,,10uF ±10% 50V Ceramic Capacitor X7R 1210 AEC-Q200,yes,25,5,5,0.0854,2.14,https://www.lcsc.com/product-detail/C386166.html
|
||||
26,C38582720,TPA191A4-SC6R,3PEAK,SOT-363,,50uV -300mV~+36V 22uA 2.5V/us 120dB 30kHz 80uA 100V/V SOT-363 Amplifiers RoHS,yes,5,5,5,0.5300,2.65,https://www.lcsc.com/product-detail/C38582720.html
|
||||
27,C5185587,CUM1206-15FR004,FORT,1206,,1W 4mΩ SMD ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS,yes,5,1,1,0.0157,0.08,https://www.lcsc.com/product-detail/C5185587.html
|
||||
17,C49164935,JER1206F1R006,JIERR,1206,,1W 6mΩ ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS,yes,10,10,10,0.0371,0.37,https://www.lcsc.com/product-detail/C49164935.html
|
||||
18,C110776,RT0603BRD071KL,YAGEO,0603,,100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,yes,20,20,20,0.0187,0.37,https://www.lcsc.com/product-detail/C110776.html
|
||||
19,C18723015,X087-2832TSWIG02-H14,Wisevision,-,,"0.87 128x32 SSD1312 chip I2C LCD, OLED, Graphic RoHS",yes,5,1,1,1.5826,7.91,https://www.lcsc.com/product-detail/C18723015.html
|
||||
20,C52741377,CPN201610H6R8MT,Magnetsyc,0806,,820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS,yes,20,20,20,0.0277,0.55,https://www.lcsc.com/product-detail/C52741377.html
|
||||
21,C19274408,SC7A20HTR,Hangzhou Silan Microelectronics,LGA-12(2x2),,LGA-12(2x2) Accelerometers RoHS,yes,5,1,1,0.2417,1.21,https://www.lcsc.com/product-detail/C19274408.html
|
||||
22,C138714,TPD4E05U06DQAR,TI,USON-10(1x2.5),,14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5),yes,5,5,5,0.0629,0.31,https://www.lcsc.com/product-detail/C138714.html
|
||||
23,C36914039,1010350411R00,NJCON,"Through Hole,D4xL11mm",,"35V 100uF 75mΩ@100kHz 2.1A@100kHz ±20% Through Hole,D4xL11mm Aluminum - Polymer Capacitors RoHS",yes,10,5,5,0.0989,0.99,https://www.lcsc.com/product-detail/C36914039.html
|
||||
24,C98192,CL21A475KBQNNNE,Samsung Electro-Mechanics,0805,,4.7uF ±10% 50V Ceramic Capacitor X5R 0805,yes,10,10,10,0.0179,0.18,https://www.lcsc.com/product-detail/C98192.html
|
||||
|
||||
|
@ -1,28 +0,0 @@
|
||||
LCSC Part Number,Manufacture Part Number,Manufacturer,Customer NO.,Package,Description,RoHS,Quantity,Unit Price(€),Ext.Price(€),Estimated lead time (business days),Date Code / Lot No.
|
||||
C473369,TLV333IDBVR,TI,,SOT-23-5,"2uV Rail-to-Rail Input, Rail-to-Rail Output 70pA 0.16V/us 102dB 17uA 350kHz 1 SOT-23-5 Amplifiers RoHS",YES,5,0.2121,1.06,,
|
||||
C2827931,SS24L,Guangdong Hottech,,SOD-123FL,Diode Independent 40V 2A Surface Mount SOD-123FL,YES,20,0.0214,0.43,,
|
||||
C2931472,U263-163N-4OS1735,XKB Connection,,SMD,USB-C (USB TYPE-C) Receptacle Connector 16 Position Surface Mount,YES,5,0.2518,1.26,,
|
||||
C2999960,MM5Z3V3,Slkor,,SOD-523,Zener Diode Independent 3.3V 200mW Surface Mount SOD-523,YES,20,0.0181,0.36,,
|
||||
C52754543,RB521S30T1G-HXY,HXY MOSFET,,SOD-523,1A 1 Independent 30V 350mV@10mA 200mA SOD-523 Single Diodes RoHS,YES,20,0.0212,0.42,,
|
||||
C42442062,CH32X035F8U6,WCH,,QFN-20-EP(3x3),QFN-20-EP(3x3) Microcontrollers RoHS,YES,5,0.446,2.23,,
|
||||
C780769,AP63203WU-7,DIODES,,TSOT-23-6,1.1MHz Buck Fixed 2A 3.3V 3.8V~32V TSOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,YES,5,0.3766,1.88,,
|
||||
C7466527,AGM403AP,AGMSEMI,,PDFN3.3x3.3-8,N-Channel 40V 65A 69W Surface Mount PDFN3.3x3.3,YES,5,0.2575,1.29,,
|
||||
C2906999,FRC0603F1803TS,FOJAN,,0603,180kΩ ±1% 100mW 0603 Thick Film Resistor,YES,100,0.001,0.10,,
|
||||
C4169844,RS73F1JTTD2703B,KOA,,0603,200mW 270kΩ Thick Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,YES,5,0.0638,0.32,,
|
||||
C2932326,MT3608L,XI'AN Aerosemi Tech,,SOT-23-6,1.2MHz Boost Adjustable 2.2V~16V 2.5A SOT-23-6 Voltage Regulators - DC DC Switching Regulators RoHS,YES,10,0.0373,0.37,,
|
||||
C138714,TPD4E05U06DQAR,TI,,USON-10(1x2.5),14VC Clamp 2.5A@8/20us Ipp TVS DIODE USON-10(1x2.5),YES,5,0.0682,0.34,,
|
||||
C19274408,SC7A20HTR,Hangzhou Silan Microelectronics,,LGA-12(2x2),LGA-12(2x2) Accelerometers RoHS,YES,5,0.2417,1.21,,
|
||||
C52741377,CPN201610H6R8MT,Magnetsyc,,0806,820mA 6.8uH 1.1A 545mΩ ±20% 0806 Fixed Inductors RoHS,YES,20,0.0277,0.55,,
|
||||
C110776,RT0603BRD071KL,YAGEO,,0603,100mW 1kΩ 75V Thin Film Resistor ±25ppm/℃ ±0.1% 0603 Chip Resistor - Surface Mount RoHS,YES,20,0.0187,0.37,,
|
||||
C162670,NCU18XH103F6SRB,muRata,,0603,NTC Thermistor 10kΩ Surface Mount 0603,YES,10,0.0533,0.53,,
|
||||
C46818248,SIQ-02FVS3,LZG,,-,Encoders - Industrial RoHS,YES,5,0.9816,4.91,,
|
||||
C41414522,NSG10752,WXNSIC,,SOT-23-6,High Side Gate Driver IC MOSFET IGBT SOT-23-6,YES,5,0.4842,2.42,,
|
||||
C76799,MLZ1608M4R7WT000,TDK,,0603,350mA 4.7uH 120mA 500mΩ Multilayer inductor ±20% 0603 Fixed Inductors RoHS,YES,10,0.0351,0.35,,
|
||||
C98192,CL21A475KBQNNNE,Samsung Electro-Mechanics,,0805,4.7uF ±10% 50V Ceramic Capacitor X5R 0805,YES,10,0.0179,0.18,,
|
||||
C29936,CL10B105KA8NNNC,Samsung Electro-Mechanics,,0603,1uF ±10% 25V Ceramic Capacitor X7R 0603,YES,50,0.0056,0.28,,
|
||||
C2997487,MPD220M1VD19040R,Ymin,,"SMD,7.3x4.3mm","35V 22uF 3.2A@100kHz 40mΩ@100kHz ±20% SMD,7.3x4.3mm Aluminum - Polymer Capacitors RoHS",YES,5,0.7063,3.53,,
|
||||
C5370906,FC-ALX 4030D-2R2MT,FANGCHENG,,"SMD,4.2x4.2mm","8.1A 2.2uH 8.1A 10.7mΩ Molded Inductor ±20% SMD,4.2x4.2mm Fixed Inductors RoHS",YES,5,0.4781,2.39,,
|
||||
C18723014,X069-9616TSWIG02-H14,Wisevision,,-,"0.69 96x16 SSD1312 chip I2C LCD, OLED, Graphic RoHS",YES,2,1.3337,2.67,,
|
||||
C386166,UMK325AB7106KMHP,Taiyo Yuden,,1210,10uF ±10% 50V Ceramic Capacitor X7R 1210 AEC-Q200,YES,25,0.0854,2.14,,
|
||||
C38582720,TPA191A4-SC6R,3PEAK,,SOT-363,50uV -300mV~+36V 22uA 2.5V/us 120dB 30kHz 80uA 100V/V SOT-363 Amplifiers RoHS,YES,5,0.53,2.65,,
|
||||
C5185587,CUM1206-15FR004,FORT,,1206,1W 4mΩ SMD ±50ppm/℃ Current Sense Resistor ±1% 1206 Current Sense Resistors RoHS,YES,5,0.0522,0.26,,
|
||||
|
@ -1 +0,0 @@
|
||||
{"ARCHIVE_NAME": "", "EXTRA_LAYERS": "", "ALL_ACTIVE_LAYERS": false, "EXTEND_EDGE_CUT": false, "ALTERNATIVE_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": false, "OPEN BROWSER": true, "NO_BACKUP_OPT": false}
|
||||
@ -1,214 +0,0 @@
|
||||
(footprint "CP-SMD_L7.3-W4.3-FD"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "U?"
|
||||
(at 0 -3.1505 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b0420e10-f9de-44c2-b3bc-1c63b7732991")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CP-SMD_L7.3-W4.3-FD"
|
||||
(at 0 3.180433 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "3764bd39-7877-40b8-b19a-9f54076b2216")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "6fe3217a-c574-4696-9148-9ef68c89ae30")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "7d363a82-42d9-447f-9f24-a22f71c9c74c")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_line
|
||||
(start -3.729 -2.226)
|
||||
(end 3.7235 -2.226)
|
||||
(stroke
|
||||
(width 0.1525)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1d62bf89-eb8a-4e67-ac48-0acebc5568fa")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.729 2.226)
|
||||
(end 3.7235 2.226)
|
||||
(stroke
|
||||
(width 0.1525)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4a64e2b3-928d-4b41-a3e6-167ff4c61b8b")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.1995 -2.226)
|
||||
(end -2.1995 2.226)
|
||||
(stroke
|
||||
(width 0.1525)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2c29e4a6-ec51-4063-afb9-f032a5181c45")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.7235 -2.226)
|
||||
(end 3.7235 -1.499)
|
||||
(stroke
|
||||
(width 0.1525)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fd0829d4-9dd0-4f25-937d-7d882bf2e204")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.7235 2.226)
|
||||
(end 3.7235 1.499)
|
||||
(stroke
|
||||
(width 0.1525)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5a74592d-8d3b-43b4-b462-1e84904fe40c")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -3.6525 -2.3025) (xy -3.6525 -1.4485) (xy -4.1095 -1.4485) (xy -4.1095 -2.3025)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f647d094-8db7-4259-a567-f7bae2d2d2a6")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -3.6525 2.3025) (xy -3.6525 1.4485) (xy -4.1095 1.4485) (xy -4.1095 2.3025)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "af2ca681-83ef-4789-9ac9-eb1eee4ceed2")
|
||||
)
|
||||
(fp_rect
|
||||
(start -4.779 -2.4255)
|
||||
(end 4.779 2.455433)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "9a739e32-4328-4456-b22c-ca0679c69e76")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.6525 -2.15)
|
||||
(end 3.6475 -2.15)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "9fc06c76-9227-4434-aa26-f1f07167dc16")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.6525 2.15)
|
||||
(end -3.6525 -2.15)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "d137b34c-958c-4e5c-9e15-e6d58994fc30")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.6475 -2.15)
|
||||
(end 3.6475 2.15)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "328e8c4c-485b-4183-89ef-4c4d23b89dd9")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.6475 2.15)
|
||||
(end -3.6525 2.15)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "d729c60b-46ed-41a3-9e26-10de4be0b13d")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -3.597067 2.127039) (xy -3.629539 2.094567) (xy -3.675461 2.094567) (xy -3.707933 2.127039) (xy -3.707933 2.172961)
|
||||
(xy -3.675461 2.205433) (xy -3.629539 2.205433) (xy -3.597067 2.172961)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "54e7e42a-2223-458c-b87b-57682cd44a31")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "da04da3f-1fba-4420-ad19-c0aabe763e19")
|
||||
(effects
|
||||
(font
|
||||
(size 0.5 0.5)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" smd rect
|
||||
(at -3.4365 0 180)
|
||||
(size 2.185 2.592)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "7ce0cbeb-9212-4d55-a89a-c54d82414dee")
|
||||
)
|
||||
(pad "2" smd rect
|
||||
(at 3.4365 0 180)
|
||||
(size 2.185 2.592)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "f85898eb-74d6-41c0-bb2b-ff0e22f513e1")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
@ -1,492 +0,0 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
|
||||
FILE_NAME('Open CASCADE Shape Model','2026-02-28T19:53:20',(''),(''),
|
||||
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
|
||||
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
|
||||
'automotive_design',2000,#2);
|
||||
#2 = APPLICATION_CONTEXT(
|
||||
'core data for automotive mechanical design processes');
|
||||
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
|
||||
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
|
||||
#5 = PRODUCT_DEFINITION('design','',#6,#9);
|
||||
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
|
||||
#7 = PRODUCT('Body','Body','',(#8));
|
||||
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
|
||||
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
|
||||
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#454);
|
||||
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
|
||||
#12 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#13 = DIRECTION('',(0.,0.,1.));
|
||||
#14 = DIRECTION('',(1.,0.,-0.));
|
||||
#15 = MANIFOLD_SOLID_BREP('',#16);
|
||||
#16 = CLOSED_SHELL('',(#17,#50,#76,#102,#122,#153,#178,#203,#228,#248,
|
||||
#274,#300,#326,#351,#376,#401,#410,#419,#445));
|
||||
#17 = ADVANCED_FACE('',(#18),#45,.T.);
|
||||
#18 = FACE_BOUND('',#19,.F.);
|
||||
#19 = EDGE_LOOP('',(#20,#30,#37,#38));
|
||||
#20 = ORIENTED_EDGE('',*,*,#21,.F.);
|
||||
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
|
||||
#22 = VERTEX_POINT('',#23);
|
||||
#23 = CARTESIAN_POINT('',(2.5,0.,0.5));
|
||||
#24 = VERTEX_POINT('',#25);
|
||||
#25 = CARTESIAN_POINT('',(2.5,-6.123233995737E-16,0.9));
|
||||
#26 = LINE('',#27,#28);
|
||||
#27 = CARTESIAN_POINT('',(2.5,0.,0.));
|
||||
#28 = VECTOR('',#29,1.);
|
||||
#29 = DIRECTION('',(0.,0.,1.));
|
||||
#30 = ORIENTED_EDGE('',*,*,#31,.F.);
|
||||
#31 = EDGE_CURVE('',#22,#22,#32,.T.);
|
||||
#32 = CIRCLE('',#33,2.5);
|
||||
#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
|
||||
#34 = CARTESIAN_POINT('',(0.,0.,0.5));
|
||||
#35 = DIRECTION('',(0.,0.,1.));
|
||||
#36 = DIRECTION('',(1.,0.,0.));
|
||||
#37 = ORIENTED_EDGE('',*,*,#21,.T.);
|
||||
#38 = ORIENTED_EDGE('',*,*,#39,.F.);
|
||||
#39 = EDGE_CURVE('',#24,#24,#40,.T.);
|
||||
#40 = CIRCLE('',#41,2.5);
|
||||
#41 = AXIS2_PLACEMENT_3D('',#42,#43,#44);
|
||||
#42 = CARTESIAN_POINT('',(0.,0.,0.9));
|
||||
#43 = DIRECTION('',(0.,-0.,-1.));
|
||||
#44 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#45 = CYLINDRICAL_SURFACE('',#46,2.5);
|
||||
#46 = AXIS2_PLACEMENT_3D('',#47,#48,#49);
|
||||
#47 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#48 = DIRECTION('',(-0.,-0.,-1.));
|
||||
#49 = DIRECTION('',(1.,0.,0.));
|
||||
#50 = ADVANCED_FACE('',(#51),#71,.T.);
|
||||
#51 = FACE_BOUND('',#52,.F.);
|
||||
#52 = EDGE_LOOP('',(#53,#62,#63,#64));
|
||||
#53 = ORIENTED_EDGE('',*,*,#54,.F.);
|
||||
#54 = EDGE_CURVE('',#24,#55,#57,.T.);
|
||||
#55 = VERTEX_POINT('',#56);
|
||||
#56 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,1.));
|
||||
#57 = CIRCLE('',#58,0.1);
|
||||
#58 = AXIS2_PLACEMENT_3D('',#59,#60,#61);
|
||||
#59 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,0.9));
|
||||
#60 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
|
||||
#61 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#62 = ORIENTED_EDGE('',*,*,#39,.F.);
|
||||
#63 = ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#64 = ORIENTED_EDGE('',*,*,#65,.T.);
|
||||
#65 = EDGE_CURVE('',#55,#55,#66,.T.);
|
||||
#66 = CIRCLE('',#67,2.4);
|
||||
#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70);
|
||||
#68 = CARTESIAN_POINT('',(0.,0.,1.));
|
||||
#69 = DIRECTION('',(0.,-0.,-1.));
|
||||
#70 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#71 = TOROIDAL_SURFACE('',#72,2.4,0.1);
|
||||
#72 = AXIS2_PLACEMENT_3D('',#73,#74,#75);
|
||||
#73 = CARTESIAN_POINT('',(0.,0.,0.9));
|
||||
#74 = DIRECTION('',(0.,0.,1.));
|
||||
#75 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#76 = ADVANCED_FACE('',(#77),#97,.T.);
|
||||
#77 = FACE_BOUND('',#78,.F.);
|
||||
#78 = EDGE_LOOP('',(#79,#88,#89,#90));
|
||||
#79 = ORIENTED_EDGE('',*,*,#80,.F.);
|
||||
#80 = EDGE_CURVE('',#22,#81,#83,.T.);
|
||||
#81 = VERTEX_POINT('',#82);
|
||||
#82 = CARTESIAN_POINT('',(2.,0.,0.));
|
||||
#83 = CIRCLE('',#84,0.5);
|
||||
#84 = AXIS2_PLACEMENT_3D('',#85,#86,#87);
|
||||
#85 = CARTESIAN_POINT('',(2.,0.,0.5));
|
||||
#86 = DIRECTION('',(-0.,1.,0.));
|
||||
#87 = DIRECTION('',(1.,0.,0.));
|
||||
#88 = ORIENTED_EDGE('',*,*,#31,.F.);
|
||||
#89 = ORIENTED_EDGE('',*,*,#80,.T.);
|
||||
#90 = ORIENTED_EDGE('',*,*,#91,.T.);
|
||||
#91 = EDGE_CURVE('',#81,#81,#92,.T.);
|
||||
#92 = CIRCLE('',#93,2.);
|
||||
#93 = AXIS2_PLACEMENT_3D('',#94,#95,#96);
|
||||
#94 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#95 = DIRECTION('',(0.,0.,1.));
|
||||
#96 = DIRECTION('',(1.,0.,0.));
|
||||
#97 = TOROIDAL_SURFACE('',#98,2.,0.5);
|
||||
#98 = AXIS2_PLACEMENT_3D('',#99,#100,#101);
|
||||
#99 = CARTESIAN_POINT('',(0.,0.,0.5));
|
||||
#100 = DIRECTION('',(-0.,-0.,-1.));
|
||||
#101 = DIRECTION('',(1.,0.,0.));
|
||||
#102 = ADVANCED_FACE('',(#103,#106),#117,.T.);
|
||||
#103 = FACE_BOUND('',#104,.T.);
|
||||
#104 = EDGE_LOOP('',(#105));
|
||||
#105 = ORIENTED_EDGE('',*,*,#65,.F.);
|
||||
#106 = FACE_BOUND('',#107,.T.);
|
||||
#107 = EDGE_LOOP('',(#108));
|
||||
#108 = ORIENTED_EDGE('',*,*,#109,.T.);
|
||||
#109 = EDGE_CURVE('',#110,#110,#112,.T.);
|
||||
#110 = VERTEX_POINT('',#111);
|
||||
#111 = CARTESIAN_POINT('',(2.3,0.,1.));
|
||||
#112 = CIRCLE('',#113,2.3);
|
||||
#113 = AXIS2_PLACEMENT_3D('',#114,#115,#116);
|
||||
#114 = CARTESIAN_POINT('',(0.,0.,1.));
|
||||
#115 = DIRECTION('',(0.,0.,-1.));
|
||||
#116 = DIRECTION('',(1.,0.,0.));
|
||||
#117 = PLANE('',#118);
|
||||
#118 = AXIS2_PLACEMENT_3D('',#119,#120,#121);
|
||||
#119 = CARTESIAN_POINT('',(-1.780521005911E-16,-1.605094478296E-16,1.));
|
||||
#120 = DIRECTION('',(0.,0.,1.));
|
||||
#121 = DIRECTION('',(1.,0.,0.));
|
||||
#122 = ADVANCED_FACE('',(#123,#126,#137),#148,.F.);
|
||||
#123 = FACE_BOUND('',#124,.F.);
|
||||
#124 = EDGE_LOOP('',(#125));
|
||||
#125 = ORIENTED_EDGE('',*,*,#91,.T.);
|
||||
#126 = FACE_BOUND('',#127,.F.);
|
||||
#127 = EDGE_LOOP('',(#128));
|
||||
#128 = ORIENTED_EDGE('',*,*,#129,.T.);
|
||||
#129 = EDGE_CURVE('',#130,#130,#132,.T.);
|
||||
#130 = VERTEX_POINT('',#131);
|
||||
#131 = CARTESIAN_POINT('',(-0.75,6.123233995737E-17,-2.196404034271E-30)
|
||||
);
|
||||
#132 = CIRCLE('',#133,0.25);
|
||||
#133 = AXIS2_PLACEMENT_3D('',#134,#135,#136);
|
||||
#134 = CARTESIAN_POINT('',(-1.,0.,0.));
|
||||
#135 = DIRECTION('',(0.,0.,-1.));
|
||||
#136 = DIRECTION('',(1.,0.,0.));
|
||||
#137 = FACE_BOUND('',#138,.F.);
|
||||
#138 = EDGE_LOOP('',(#139));
|
||||
#139 = ORIENTED_EDGE('',*,*,#140,.T.);
|
||||
#140 = EDGE_CURVE('',#141,#141,#143,.T.);
|
||||
#141 = VERTEX_POINT('',#142);
|
||||
#142 = CARTESIAN_POINT('',(1.25,6.123233995737E-17,-2.196404034271E-30)
|
||||
);
|
||||
#143 = CIRCLE('',#144,0.25);
|
||||
#144 = AXIS2_PLACEMENT_3D('',#145,#146,#147);
|
||||
#145 = CARTESIAN_POINT('',(1.,0.,0.));
|
||||
#146 = DIRECTION('',(0.,0.,-1.));
|
||||
#147 = DIRECTION('',(1.,0.,0.));
|
||||
#148 = PLANE('',#149);
|
||||
#149 = AXIS2_PLACEMENT_3D('',#150,#151,#152);
|
||||
#150 = CARTESIAN_POINT('',(-1.367440132539E-16,1.714341265789E-16,0.));
|
||||
#151 = DIRECTION('',(0.,0.,1.));
|
||||
#152 = DIRECTION('',(1.,0.,0.));
|
||||
#153 = ADVANCED_FACE('',(#154),#173,.T.);
|
||||
#154 = FACE_BOUND('',#155,.T.);
|
||||
#155 = EDGE_LOOP('',(#156,#164,#171,#172));
|
||||
#156 = ORIENTED_EDGE('',*,*,#157,.T.);
|
||||
#157 = EDGE_CURVE('',#110,#158,#160,.T.);
|
||||
#158 = VERTEX_POINT('',#159);
|
||||
#159 = CARTESIAN_POINT('',(2.3,0.,1.5));
|
||||
#160 = LINE('',#161,#162);
|
||||
#161 = CARTESIAN_POINT('',(2.3,0.,1.));
|
||||
#162 = VECTOR('',#163,1.);
|
||||
#163 = DIRECTION('',(0.,0.,1.));
|
||||
#164 = ORIENTED_EDGE('',*,*,#165,.T.);
|
||||
#165 = EDGE_CURVE('',#158,#158,#166,.T.);
|
||||
#166 = CIRCLE('',#167,2.3);
|
||||
#167 = AXIS2_PLACEMENT_3D('',#168,#169,#170);
|
||||
#168 = CARTESIAN_POINT('',(0.,0.,1.5));
|
||||
#169 = DIRECTION('',(0.,0.,-1.));
|
||||
#170 = DIRECTION('',(1.,0.,0.));
|
||||
#171 = ORIENTED_EDGE('',*,*,#157,.F.);
|
||||
#172 = ORIENTED_EDGE('',*,*,#109,.F.);
|
||||
#173 = CYLINDRICAL_SURFACE('',#174,2.3);
|
||||
#174 = AXIS2_PLACEMENT_3D('',#175,#176,#177);
|
||||
#175 = CARTESIAN_POINT('',(0.,0.,1.));
|
||||
#176 = DIRECTION('',(0.,0.,-1.));
|
||||
#177 = DIRECTION('',(1.,0.,0.));
|
||||
#178 = ADVANCED_FACE('',(#179),#198,.T.);
|
||||
#179 = FACE_BOUND('',#180,.T.);
|
||||
#180 = EDGE_LOOP('',(#181,#189,#196,#197));
|
||||
#181 = ORIENTED_EDGE('',*,*,#182,.T.);
|
||||
#182 = EDGE_CURVE('',#130,#183,#185,.T.);
|
||||
#183 = VERTEX_POINT('',#184);
|
||||
#184 = CARTESIAN_POINT('',(-0.75,-4.535750870824E-14,-0.999999999999));
|
||||
#185 = LINE('',#186,#187);
|
||||
#186 = CARTESIAN_POINT('',(-0.75,0.,0.));
|
||||
#187 = VECTOR('',#188,1.);
|
||||
#188 = DIRECTION('',(0.,-3.587E-14,-1.));
|
||||
#189 = ORIENTED_EDGE('',*,*,#190,.F.);
|
||||
#190 = EDGE_CURVE('',#183,#183,#191,.T.);
|
||||
#191 = CIRCLE('',#192,0.25);
|
||||
#192 = AXIS2_PLACEMENT_3D('',#193,#194,#195);
|
||||
#193 = CARTESIAN_POINT('',(-1.,-3.587E-14,-1.));
|
||||
#194 = DIRECTION('',(0.,-3.587E-14,-1.));
|
||||
#195 = DIRECTION('',(1.,0.,0.));
|
||||
#196 = ORIENTED_EDGE('',*,*,#182,.F.);
|
||||
#197 = ORIENTED_EDGE('',*,*,#129,.T.);
|
||||
#198 = CYLINDRICAL_SURFACE('',#199,0.25);
|
||||
#199 = AXIS2_PLACEMENT_3D('',#200,#201,#202);
|
||||
#200 = CARTESIAN_POINT('',(-1.,0.,0.));
|
||||
#201 = DIRECTION('',(0.,-3.587E-14,-1.));
|
||||
#202 = DIRECTION('',(1.,0.,0.));
|
||||
#203 = ADVANCED_FACE('',(#204),#223,.T.);
|
||||
#204 = FACE_BOUND('',#205,.T.);
|
||||
#205 = EDGE_LOOP('',(#206,#214,#221,#222));
|
||||
#206 = ORIENTED_EDGE('',*,*,#207,.T.);
|
||||
#207 = EDGE_CURVE('',#141,#208,#210,.T.);
|
||||
#208 = VERTEX_POINT('',#209);
|
||||
#209 = CARTESIAN_POINT('',(1.25,-4.535750870824E-14,-0.999999999999));
|
||||
#210 = LINE('',#211,#212);
|
||||
#211 = CARTESIAN_POINT('',(1.25,0.,0.));
|
||||
#212 = VECTOR('',#213,1.);
|
||||
#213 = DIRECTION('',(0.,-3.587E-14,-1.));
|
||||
#214 = ORIENTED_EDGE('',*,*,#215,.F.);
|
||||
#215 = EDGE_CURVE('',#208,#208,#216,.T.);
|
||||
#216 = CIRCLE('',#217,0.25);
|
||||
#217 = AXIS2_PLACEMENT_3D('',#218,#219,#220);
|
||||
#218 = CARTESIAN_POINT('',(1.,-3.587E-14,-1.));
|
||||
#219 = DIRECTION('',(0.,-3.587E-14,-1.));
|
||||
#220 = DIRECTION('',(1.,0.,0.));
|
||||
#221 = ORIENTED_EDGE('',*,*,#207,.F.);
|
||||
#222 = ORIENTED_EDGE('',*,*,#140,.T.);
|
||||
#223 = CYLINDRICAL_SURFACE('',#224,0.25);
|
||||
#224 = AXIS2_PLACEMENT_3D('',#225,#226,#227);
|
||||
#225 = CARTESIAN_POINT('',(1.,0.,0.));
|
||||
#226 = DIRECTION('',(0.,-3.587E-14,-1.));
|
||||
#227 = DIRECTION('',(1.,0.,0.));
|
||||
#228 = ADVANCED_FACE('',(#229,#240),#243,.F.);
|
||||
#229 = FACE_BOUND('',#230,.F.);
|
||||
#230 = EDGE_LOOP('',(#231));
|
||||
#231 = ORIENTED_EDGE('',*,*,#232,.F.);
|
||||
#232 = EDGE_CURVE('',#233,#233,#235,.T.);
|
||||
#233 = VERTEX_POINT('',#234);
|
||||
#234 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,1.5));
|
||||
#235 = CIRCLE('',#236,2.4);
|
||||
#236 = AXIS2_PLACEMENT_3D('',#237,#238,#239);
|
||||
#237 = CARTESIAN_POINT('',(0.,0.,1.5));
|
||||
#238 = DIRECTION('',(0.,-0.,-1.));
|
||||
#239 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#240 = FACE_BOUND('',#241,.F.);
|
||||
#241 = EDGE_LOOP('',(#242));
|
||||
#242 = ORIENTED_EDGE('',*,*,#165,.T.);
|
||||
#243 = PLANE('',#244);
|
||||
#244 = AXIS2_PLACEMENT_3D('',#245,#246,#247);
|
||||
#245 = CARTESIAN_POINT('',(-1.780521005911E-16,-1.605094478296E-16,1.5)
|
||||
);
|
||||
#246 = DIRECTION('',(0.,0.,1.));
|
||||
#247 = DIRECTION('',(1.,0.,0.));
|
||||
#248 = ADVANCED_FACE('',(#249),#269,.T.);
|
||||
#249 = FACE_BOUND('',#250,.T.);
|
||||
#250 = EDGE_LOOP('',(#251,#260,#267,#268));
|
||||
#251 = ORIENTED_EDGE('',*,*,#252,.T.);
|
||||
#252 = EDGE_CURVE('',#183,#253,#255,.T.);
|
||||
#253 = VERTEX_POINT('',#254);
|
||||
#254 = CARTESIAN_POINT('',(-0.75,-1.,-2.));
|
||||
#255 = CIRCLE('',#256,1.);
|
||||
#256 = AXIS2_PLACEMENT_3D('',#257,#258,#259);
|
||||
#257 = CARTESIAN_POINT('',(-0.75,-1.,-1.));
|
||||
#258 = DIRECTION('',(-1.,0.,0.));
|
||||
#259 = DIRECTION('',(0.,1.,1.110223024625E-16));
|
||||
#260 = ORIENTED_EDGE('',*,*,#261,.T.);
|
||||
#261 = EDGE_CURVE('',#253,#253,#262,.T.);
|
||||
#262 = CIRCLE('',#263,0.25);
|
||||
#263 = AXIS2_PLACEMENT_3D('',#264,#265,#266);
|
||||
#264 = CARTESIAN_POINT('',(-1.,-1.,-2.));
|
||||
#265 = DIRECTION('',(0.,1.,3.037032091222E-14));
|
||||
#266 = DIRECTION('',(0.,3.037032091222E-14,-1.));
|
||||
#267 = ORIENTED_EDGE('',*,*,#252,.F.);
|
||||
#268 = ORIENTED_EDGE('',*,*,#190,.T.);
|
||||
#269 = TOROIDAL_SURFACE('',#270,1.,0.25);
|
||||
#270 = AXIS2_PLACEMENT_3D('',#271,#272,#273);
|
||||
#271 = CARTESIAN_POINT('',(-1.,-1.,-1.));
|
||||
#272 = DIRECTION('',(-1.,0.,0.));
|
||||
#273 = DIRECTION('',(0.,1.,1.110223024625E-16));
|
||||
#274 = ADVANCED_FACE('',(#275),#295,.T.);
|
||||
#275 = FACE_BOUND('',#276,.T.);
|
||||
#276 = EDGE_LOOP('',(#277,#286,#293,#294));
|
||||
#277 = ORIENTED_EDGE('',*,*,#278,.T.);
|
||||
#278 = EDGE_CURVE('',#208,#279,#281,.T.);
|
||||
#279 = VERTEX_POINT('',#280);
|
||||
#280 = CARTESIAN_POINT('',(1.25,-1.,-2.));
|
||||
#281 = CIRCLE('',#282,1.);
|
||||
#282 = AXIS2_PLACEMENT_3D('',#283,#284,#285);
|
||||
#283 = CARTESIAN_POINT('',(1.25,-1.,-1.));
|
||||
#284 = DIRECTION('',(-1.,0.,0.));
|
||||
#285 = DIRECTION('',(0.,1.,1.110223024625E-16));
|
||||
#286 = ORIENTED_EDGE('',*,*,#287,.T.);
|
||||
#287 = EDGE_CURVE('',#279,#279,#288,.T.);
|
||||
#288 = CIRCLE('',#289,0.25);
|
||||
#289 = AXIS2_PLACEMENT_3D('',#290,#291,#292);
|
||||
#290 = CARTESIAN_POINT('',(1.,-1.,-2.));
|
||||
#291 = DIRECTION('',(0.,1.,3.037032091222E-14));
|
||||
#292 = DIRECTION('',(0.,3.037032091222E-14,-1.));
|
||||
#293 = ORIENTED_EDGE('',*,*,#278,.F.);
|
||||
#294 = ORIENTED_EDGE('',*,*,#215,.T.);
|
||||
#295 = TOROIDAL_SURFACE('',#296,1.,0.25);
|
||||
#296 = AXIS2_PLACEMENT_3D('',#297,#298,#299);
|
||||
#297 = CARTESIAN_POINT('',(1.,-1.,-1.));
|
||||
#298 = DIRECTION('',(-1.,0.,0.));
|
||||
#299 = DIRECTION('',(0.,1.,1.110223024625E-16));
|
||||
#300 = ADVANCED_FACE('',(#301),#321,.T.);
|
||||
#301 = FACE_BOUND('',#302,.F.);
|
||||
#302 = EDGE_LOOP('',(#303,#312,#313,#314));
|
||||
#303 = ORIENTED_EDGE('',*,*,#304,.F.);
|
||||
#304 = EDGE_CURVE('',#233,#305,#307,.T.);
|
||||
#305 = VERTEX_POINT('',#306);
|
||||
#306 = CARTESIAN_POINT('',(2.5,-6.123233995737E-16,1.6));
|
||||
#307 = CIRCLE('',#308,0.1);
|
||||
#308 = AXIS2_PLACEMENT_3D('',#309,#310,#311);
|
||||
#309 = CARTESIAN_POINT('',(2.4,-5.878304635907E-16,1.6));
|
||||
#310 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
|
||||
#311 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#312 = ORIENTED_EDGE('',*,*,#232,.F.);
|
||||
#313 = ORIENTED_EDGE('',*,*,#304,.T.);
|
||||
#314 = ORIENTED_EDGE('',*,*,#315,.T.);
|
||||
#315 = EDGE_CURVE('',#305,#305,#316,.T.);
|
||||
#316 = CIRCLE('',#317,2.5);
|
||||
#317 = AXIS2_PLACEMENT_3D('',#318,#319,#320);
|
||||
#318 = CARTESIAN_POINT('',(0.,0.,1.6));
|
||||
#319 = DIRECTION('',(0.,-0.,-1.));
|
||||
#320 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#321 = TOROIDAL_SURFACE('',#322,2.4,0.1);
|
||||
#322 = AXIS2_PLACEMENT_3D('',#323,#324,#325);
|
||||
#323 = CARTESIAN_POINT('',(0.,0.,1.6));
|
||||
#324 = DIRECTION('',(0.,0.,1.));
|
||||
#325 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#326 = ADVANCED_FACE('',(#327),#346,.T.);
|
||||
#327 = FACE_BOUND('',#328,.T.);
|
||||
#328 = EDGE_LOOP('',(#329,#337,#344,#345));
|
||||
#329 = ORIENTED_EDGE('',*,*,#330,.T.);
|
||||
#330 = EDGE_CURVE('',#253,#331,#333,.T.);
|
||||
#331 = VERTEX_POINT('',#332);
|
||||
#332 = CARTESIAN_POINT('',(-0.75,-4.,-2.));
|
||||
#333 = LINE('',#334,#335);
|
||||
#334 = CARTESIAN_POINT('',(-0.75,-1.,-2.));
|
||||
#335 = VECTOR('',#336,1.);
|
||||
#336 = DIRECTION('',(0.,-1.,0.));
|
||||
#337 = ORIENTED_EDGE('',*,*,#338,.F.);
|
||||
#338 = EDGE_CURVE('',#331,#331,#339,.T.);
|
||||
#339 = CIRCLE('',#340,0.25);
|
||||
#340 = AXIS2_PLACEMENT_3D('',#341,#342,#343);
|
||||
#341 = CARTESIAN_POINT('',(-1.,-4.,-2.));
|
||||
#342 = DIRECTION('',(0.,-1.,2.270122808414E-12));
|
||||
#343 = DIRECTION('',(1.,0.,0.));
|
||||
#344 = ORIENTED_EDGE('',*,*,#330,.F.);
|
||||
#345 = ORIENTED_EDGE('',*,*,#261,.F.);
|
||||
#346 = CYLINDRICAL_SURFACE('',#347,0.25);
|
||||
#347 = AXIS2_PLACEMENT_3D('',#348,#349,#350);
|
||||
#348 = CARTESIAN_POINT('',(-1.,-1.,-2.));
|
||||
#349 = DIRECTION('',(0.,-1.,0.));
|
||||
#350 = DIRECTION('',(1.,0.,0.));
|
||||
#351 = ADVANCED_FACE('',(#352),#371,.T.);
|
||||
#352 = FACE_BOUND('',#353,.T.);
|
||||
#353 = EDGE_LOOP('',(#354,#362,#369,#370));
|
||||
#354 = ORIENTED_EDGE('',*,*,#355,.T.);
|
||||
#355 = EDGE_CURVE('',#279,#356,#358,.T.);
|
||||
#356 = VERTEX_POINT('',#357);
|
||||
#357 = CARTESIAN_POINT('',(1.25,-4.,-2.));
|
||||
#358 = LINE('',#359,#360);
|
||||
#359 = CARTESIAN_POINT('',(1.25,-1.,-2.));
|
||||
#360 = VECTOR('',#361,1.);
|
||||
#361 = DIRECTION('',(0.,-1.,0.));
|
||||
#362 = ORIENTED_EDGE('',*,*,#363,.F.);
|
||||
#363 = EDGE_CURVE('',#356,#356,#364,.T.);
|
||||
#364 = CIRCLE('',#365,0.25);
|
||||
#365 = AXIS2_PLACEMENT_3D('',#366,#367,#368);
|
||||
#366 = CARTESIAN_POINT('',(1.,-4.,-2.));
|
||||
#367 = DIRECTION('',(0.,-1.,2.270122808414E-12));
|
||||
#368 = DIRECTION('',(1.,0.,0.));
|
||||
#369 = ORIENTED_EDGE('',*,*,#355,.F.);
|
||||
#370 = ORIENTED_EDGE('',*,*,#287,.F.);
|
||||
#371 = CYLINDRICAL_SURFACE('',#372,0.25);
|
||||
#372 = AXIS2_PLACEMENT_3D('',#373,#374,#375);
|
||||
#373 = CARTESIAN_POINT('',(1.,-1.,-2.));
|
||||
#374 = DIRECTION('',(0.,-1.,0.));
|
||||
#375 = DIRECTION('',(1.,0.,0.));
|
||||
#376 = ADVANCED_FACE('',(#377),#396,.T.);
|
||||
#377 = FACE_BOUND('',#378,.F.);
|
||||
#378 = EDGE_LOOP('',(#379,#387,#388,#389));
|
||||
#379 = ORIENTED_EDGE('',*,*,#380,.F.);
|
||||
#380 = EDGE_CURVE('',#305,#381,#383,.T.);
|
||||
#381 = VERTEX_POINT('',#382);
|
||||
#382 = CARTESIAN_POINT('',(2.5,0.,5.5));
|
||||
#383 = LINE('',#384,#385);
|
||||
#384 = CARTESIAN_POINT('',(2.5,0.,0.));
|
||||
#385 = VECTOR('',#386,1.);
|
||||
#386 = DIRECTION('',(0.,0.,1.));
|
||||
#387 = ORIENTED_EDGE('',*,*,#315,.T.);
|
||||
#388 = ORIENTED_EDGE('',*,*,#380,.T.);
|
||||
#389 = ORIENTED_EDGE('',*,*,#390,.T.);
|
||||
#390 = EDGE_CURVE('',#381,#381,#391,.T.);
|
||||
#391 = CIRCLE('',#392,2.5);
|
||||
#392 = AXIS2_PLACEMENT_3D('',#393,#394,#395);
|
||||
#393 = CARTESIAN_POINT('',(0.,0.,5.5));
|
||||
#394 = DIRECTION('',(0.,0.,1.));
|
||||
#395 = DIRECTION('',(1.,0.,0.));
|
||||
#396 = CYLINDRICAL_SURFACE('',#397,2.5);
|
||||
#397 = AXIS2_PLACEMENT_3D('',#398,#399,#400);
|
||||
#398 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#399 = DIRECTION('',(-0.,-0.,-1.));
|
||||
#400 = DIRECTION('',(1.,0.,0.));
|
||||
#401 = ADVANCED_FACE('',(#402),#405,.T.);
|
||||
#402 = FACE_BOUND('',#403,.T.);
|
||||
#403 = EDGE_LOOP('',(#404));
|
||||
#404 = ORIENTED_EDGE('',*,*,#338,.T.);
|
||||
#405 = PLANE('',#406);
|
||||
#406 = AXIS2_PLACEMENT_3D('',#407,#408,#409);
|
||||
#407 = CARTESIAN_POINT('',(-1.,-4.,-2.));
|
||||
#408 = DIRECTION('',(-5.921189464668E-16,-1.,2.269608759982E-12));
|
||||
#409 = DIRECTION('',(0.,-2.269608759982E-12,-1.));
|
||||
#410 = ADVANCED_FACE('',(#411),#414,.T.);
|
||||
#411 = FACE_BOUND('',#412,.T.);
|
||||
#412 = EDGE_LOOP('',(#413));
|
||||
#413 = ORIENTED_EDGE('',*,*,#363,.T.);
|
||||
#414 = PLANE('',#415);
|
||||
#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418);
|
||||
#416 = CARTESIAN_POINT('',(1.,-4.,-2.));
|
||||
#417 = DIRECTION('',(-5.921189464667E-16,-1.,2.269608759982E-12));
|
||||
#418 = DIRECTION('',(0.,-2.269608759982E-12,-1.));
|
||||
#419 = ADVANCED_FACE('',(#420),#440,.T.);
|
||||
#420 = FACE_BOUND('',#421,.T.);
|
||||
#421 = EDGE_LOOP('',(#422,#431,#432,#433));
|
||||
#422 = ORIENTED_EDGE('',*,*,#423,.F.);
|
||||
#423 = EDGE_CURVE('',#381,#424,#426,.T.);
|
||||
#424 = VERTEX_POINT('',#425);
|
||||
#425 = CARTESIAN_POINT('',(2.,0.,6.));
|
||||
#426 = CIRCLE('',#427,0.5);
|
||||
#427 = AXIS2_PLACEMENT_3D('',#428,#429,#430);
|
||||
#428 = CARTESIAN_POINT('',(2.,0.,5.5));
|
||||
#429 = DIRECTION('',(0.,-1.,0.));
|
||||
#430 = DIRECTION('',(1.,0.,0.));
|
||||
#431 = ORIENTED_EDGE('',*,*,#390,.T.);
|
||||
#432 = ORIENTED_EDGE('',*,*,#423,.T.);
|
||||
#433 = ORIENTED_EDGE('',*,*,#434,.F.);
|
||||
#434 = EDGE_CURVE('',#424,#424,#435,.T.);
|
||||
#435 = CIRCLE('',#436,2.);
|
||||
#436 = AXIS2_PLACEMENT_3D('',#437,#438,#439);
|
||||
#437 = CARTESIAN_POINT('',(0.,0.,6.));
|
||||
#438 = DIRECTION('',(0.,0.,1.));
|
||||
#439 = DIRECTION('',(1.,0.,0.));
|
||||
#440 = TOROIDAL_SURFACE('',#441,2.,0.5);
|
||||
#441 = AXIS2_PLACEMENT_3D('',#442,#443,#444);
|
||||
#442 = CARTESIAN_POINT('',(0.,0.,5.5));
|
||||
#443 = DIRECTION('',(0.,0.,1.));
|
||||
#444 = DIRECTION('',(1.,0.,0.));
|
||||
#445 = ADVANCED_FACE('',(#446),#449,.T.);
|
||||
#446 = FACE_BOUND('',#447,.T.);
|
||||
#447 = EDGE_LOOP('',(#448));
|
||||
#448 = ORIENTED_EDGE('',*,*,#434,.T.);
|
||||
#449 = PLANE('',#450);
|
||||
#450 = AXIS2_PLACEMENT_3D('',#451,#452,#453);
|
||||
#451 = CARTESIAN_POINT('',(-1.367440132539E-16,1.714341265789E-16,6.));
|
||||
#452 = DIRECTION('',(0.,0.,1.));
|
||||
#453 = DIRECTION('',(1.,0.,0.));
|
||||
#454 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
|
||||
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#458)) GLOBAL_UNIT_ASSIGNED_CONTEXT
|
||||
((#455,#456,#457)) REPRESENTATION_CONTEXT('Context #1',
|
||||
'3D Context with UNIT and UNCERTAINTY') );
|
||||
#455 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
|
||||
#456 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
|
||||
#457 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
|
||||
#458 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#455,
|
||||
'distance_accuracy_value','confusion accuracy');
|
||||
#459 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
|
||||
#460 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#461)
|
||||
,#454);
|
||||
#461 = STYLED_ITEM('color',(#462),#15);
|
||||
#462 = PRESENTATION_STYLE_ASSIGNMENT((#463,#469));
|
||||
#463 = SURFACE_STYLE_USAGE(.BOTH.,#464);
|
||||
#464 = SURFACE_SIDE_STYLE('',(#465));
|
||||
#465 = SURFACE_STYLE_FILL_AREA(#466);
|
||||
#466 = FILL_AREA_STYLE('',(#467));
|
||||
#467 = FILL_AREA_STYLE_COLOUR('',#468);
|
||||
#468 = COLOUR_RGB('',0.447058818107,0.474509808674,0.501960817233);
|
||||
#469 = CURVE_STYLE('',#470,POSITIVE_LENGTH_MEASURE(0.1),#471);
|
||||
#470 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
|
||||
#471 = COLOUR_RGB('',0.678431390124,0.709803936702,0.741176476869);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
@ -1,489 +0,0 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
|
||||
FILE_NAME('Open CASCADE Shape Model','2026-02-28T22:11:38',(''),(''),
|
||||
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
|
||||
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
|
||||
'automotive_design',2000,#2);
|
||||
#2 = APPLICATION_CONTEXT(
|
||||
'core data for automotive mechanical design processes');
|
||||
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
|
||||
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
|
||||
#5 = PRODUCT_DEFINITION('design','',#6,#9);
|
||||
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
|
||||
#7 = PRODUCT('Body','Body','',(#8));
|
||||
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
|
||||
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
|
||||
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#454);
|
||||
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
|
||||
#12 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#13 = DIRECTION('',(0.,0.,1.));
|
||||
#14 = DIRECTION('',(1.,0.,-0.));
|
||||
#15 = MANIFOLD_SOLID_BREP('',#16);
|
||||
#16 = CLOSED_SHELL('',(#17,#50,#76,#102,#122,#153,#178,#203,#228,#248,
|
||||
#274,#300,#326,#351,#376,#401,#410,#419,#445));
|
||||
#17 = ADVANCED_FACE('',(#18),#45,.T.);
|
||||
#18 = FACE_BOUND('',#19,.F.);
|
||||
#19 = EDGE_LOOP('',(#20,#30,#37,#38));
|
||||
#20 = ORIENTED_EDGE('',*,*,#21,.F.);
|
||||
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
|
||||
#22 = VERTEX_POINT('',#23);
|
||||
#23 = CARTESIAN_POINT('',(3.15,0.,0.5));
|
||||
#24 = VERTEX_POINT('',#25);
|
||||
#25 = CARTESIAN_POINT('',(3.15,-7.715274834628E-16,0.8));
|
||||
#26 = LINE('',#27,#28);
|
||||
#27 = CARTESIAN_POINT('',(3.15,0.,0.));
|
||||
#28 = VECTOR('',#29,1.);
|
||||
#29 = DIRECTION('',(0.,0.,1.));
|
||||
#30 = ORIENTED_EDGE('',*,*,#31,.F.);
|
||||
#31 = EDGE_CURVE('',#22,#22,#32,.T.);
|
||||
#32 = CIRCLE('',#33,3.15);
|
||||
#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
|
||||
#34 = CARTESIAN_POINT('',(0.,0.,0.5));
|
||||
#35 = DIRECTION('',(0.,0.,1.));
|
||||
#36 = DIRECTION('',(1.,0.,0.));
|
||||
#37 = ORIENTED_EDGE('',*,*,#21,.T.);
|
||||
#38 = ORIENTED_EDGE('',*,*,#39,.F.);
|
||||
#39 = EDGE_CURVE('',#24,#24,#40,.T.);
|
||||
#40 = CIRCLE('',#41,3.15);
|
||||
#41 = AXIS2_PLACEMENT_3D('',#42,#43,#44);
|
||||
#42 = CARTESIAN_POINT('',(0.,0.,0.8));
|
||||
#43 = DIRECTION('',(0.,-0.,-1.));
|
||||
#44 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#45 = CYLINDRICAL_SURFACE('',#46,3.15);
|
||||
#46 = AXIS2_PLACEMENT_3D('',#47,#48,#49);
|
||||
#47 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#48 = DIRECTION('',(-0.,-0.,-1.));
|
||||
#49 = DIRECTION('',(1.,0.,0.));
|
||||
#50 = ADVANCED_FACE('',(#51),#71,.T.);
|
||||
#51 = FACE_BOUND('',#52,.F.);
|
||||
#52 = EDGE_LOOP('',(#53,#62,#63,#64));
|
||||
#53 = ORIENTED_EDGE('',*,*,#54,.F.);
|
||||
#54 = EDGE_CURVE('',#24,#55,#57,.T.);
|
||||
#55 = VERTEX_POINT('',#56);
|
||||
#56 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,1.));
|
||||
#57 = CIRCLE('',#58,0.2);
|
||||
#58 = AXIS2_PLACEMENT_3D('',#59,#60,#61);
|
||||
#59 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,0.8));
|
||||
#60 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
|
||||
#61 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#62 = ORIENTED_EDGE('',*,*,#39,.F.);
|
||||
#63 = ORIENTED_EDGE('',*,*,#54,.T.);
|
||||
#64 = ORIENTED_EDGE('',*,*,#65,.T.);
|
||||
#65 = EDGE_CURVE('',#55,#55,#66,.T.);
|
||||
#66 = CIRCLE('',#67,2.95);
|
||||
#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70);
|
||||
#68 = CARTESIAN_POINT('',(0.,0.,1.));
|
||||
#69 = DIRECTION('',(0.,-0.,-1.));
|
||||
#70 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#71 = TOROIDAL_SURFACE('',#72,2.95,0.2);
|
||||
#72 = AXIS2_PLACEMENT_3D('',#73,#74,#75);
|
||||
#73 = CARTESIAN_POINT('',(0.,0.,0.8));
|
||||
#74 = DIRECTION('',(0.,0.,1.));
|
||||
#75 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#76 = ADVANCED_FACE('',(#77),#97,.T.);
|
||||
#77 = FACE_BOUND('',#78,.F.);
|
||||
#78 = EDGE_LOOP('',(#79,#88,#89,#90));
|
||||
#79 = ORIENTED_EDGE('',*,*,#80,.F.);
|
||||
#80 = EDGE_CURVE('',#22,#81,#83,.T.);
|
||||
#81 = VERTEX_POINT('',#82);
|
||||
#82 = CARTESIAN_POINT('',(2.65,0.,0.));
|
||||
#83 = CIRCLE('',#84,0.5);
|
||||
#84 = AXIS2_PLACEMENT_3D('',#85,#86,#87);
|
||||
#85 = CARTESIAN_POINT('',(2.65,0.,0.5));
|
||||
#86 = DIRECTION('',(-0.,1.,0.));
|
||||
#87 = DIRECTION('',(1.,0.,0.));
|
||||
#88 = ORIENTED_EDGE('',*,*,#31,.F.);
|
||||
#89 = ORIENTED_EDGE('',*,*,#80,.T.);
|
||||
#90 = ORIENTED_EDGE('',*,*,#91,.T.);
|
||||
#91 = EDGE_CURVE('',#81,#81,#92,.T.);
|
||||
#92 = CIRCLE('',#93,2.65);
|
||||
#93 = AXIS2_PLACEMENT_3D('',#94,#95,#96);
|
||||
#94 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#95 = DIRECTION('',(0.,0.,1.));
|
||||
#96 = DIRECTION('',(1.,0.,0.));
|
||||
#97 = TOROIDAL_SURFACE('',#98,2.65,0.5);
|
||||
#98 = AXIS2_PLACEMENT_3D('',#99,#100,#101);
|
||||
#99 = CARTESIAN_POINT('',(0.,0.,0.5));
|
||||
#100 = DIRECTION('',(-0.,-0.,-1.));
|
||||
#101 = DIRECTION('',(1.,0.,0.));
|
||||
#102 = ADVANCED_FACE('',(#103,#106),#117,.T.);
|
||||
#103 = FACE_BOUND('',#104,.T.);
|
||||
#104 = EDGE_LOOP('',(#105));
|
||||
#105 = ORIENTED_EDGE('',*,*,#65,.F.);
|
||||
#106 = FACE_BOUND('',#107,.T.);
|
||||
#107 = EDGE_LOOP('',(#108));
|
||||
#108 = ORIENTED_EDGE('',*,*,#109,.T.);
|
||||
#109 = EDGE_CURVE('',#110,#110,#112,.T.);
|
||||
#110 = VERTEX_POINT('',#111);
|
||||
#111 = CARTESIAN_POINT('',(2.75,0.,1.));
|
||||
#112 = CIRCLE('',#113,2.75);
|
||||
#113 = AXIS2_PLACEMENT_3D('',#114,#115,#116);
|
||||
#114 = CARTESIAN_POINT('',(0.,0.,1.));
|
||||
#115 = DIRECTION('',(0.,0.,-1.));
|
||||
#116 = DIRECTION('',(1.,0.,0.));
|
||||
#117 = PLANE('',#118);
|
||||
#118 = AXIS2_PLACEMENT_3D('',#119,#120,#121);
|
||||
#119 = CARTESIAN_POINT('',(-1.738271354923E-16,1.071049079375E-17,1.));
|
||||
#120 = DIRECTION('',(0.,0.,1.));
|
||||
#121 = DIRECTION('',(1.,0.,0.));
|
||||
#122 = ADVANCED_FACE('',(#123,#126,#137),#148,.F.);
|
||||
#123 = FACE_BOUND('',#124,.F.);
|
||||
#124 = EDGE_LOOP('',(#125));
|
||||
#125 = ORIENTED_EDGE('',*,*,#91,.T.);
|
||||
#126 = FACE_BOUND('',#127,.F.);
|
||||
#127 = EDGE_LOOP('',(#128));
|
||||
#128 = ORIENTED_EDGE('',*,*,#129,.T.);
|
||||
#129 = EDGE_CURVE('',#130,#130,#132,.T.);
|
||||
#130 = VERTEX_POINT('',#131);
|
||||
#131 = CARTESIAN_POINT('',(-1.,0.,0.));
|
||||
#132 = CIRCLE('',#133,0.25);
|
||||
#133 = AXIS2_PLACEMENT_3D('',#134,#135,#136);
|
||||
#134 = CARTESIAN_POINT('',(-1.25,0.,0.));
|
||||
#135 = DIRECTION('',(0.,0.,-1.));
|
||||
#136 = DIRECTION('',(1.,0.,0.));
|
||||
#137 = FACE_BOUND('',#138,.F.);
|
||||
#138 = EDGE_LOOP('',(#139));
|
||||
#139 = ORIENTED_EDGE('',*,*,#140,.T.);
|
||||
#140 = EDGE_CURVE('',#141,#141,#143,.T.);
|
||||
#141 = VERTEX_POINT('',#142);
|
||||
#142 = CARTESIAN_POINT('',(1.5,0.,0.));
|
||||
#143 = CIRCLE('',#144,0.25);
|
||||
#144 = AXIS2_PLACEMENT_3D('',#145,#146,#147);
|
||||
#145 = CARTESIAN_POINT('',(1.25,0.,0.));
|
||||
#146 = DIRECTION('',(0.,0.,-1.));
|
||||
#147 = DIRECTION('',(1.,0.,0.));
|
||||
#148 = PLANE('',#149);
|
||||
#149 = AXIS2_PLACEMENT_3D('',#150,#151,#152);
|
||||
#150 = CARTESIAN_POINT('',(-1.08526994646E-16,8.84660753815E-17,0.));
|
||||
#151 = DIRECTION('',(0.,0.,1.));
|
||||
#152 = DIRECTION('',(1.,0.,0.));
|
||||
#153 = ADVANCED_FACE('',(#154),#173,.T.);
|
||||
#154 = FACE_BOUND('',#155,.T.);
|
||||
#155 = EDGE_LOOP('',(#156,#164,#171,#172));
|
||||
#156 = ORIENTED_EDGE('',*,*,#157,.T.);
|
||||
#157 = EDGE_CURVE('',#110,#158,#160,.T.);
|
||||
#158 = VERTEX_POINT('',#159);
|
||||
#159 = CARTESIAN_POINT('',(2.75,0.,1.5));
|
||||
#160 = LINE('',#161,#162);
|
||||
#161 = CARTESIAN_POINT('',(2.75,0.,1.));
|
||||
#162 = VECTOR('',#163,1.);
|
||||
#163 = DIRECTION('',(0.,0.,1.));
|
||||
#164 = ORIENTED_EDGE('',*,*,#165,.T.);
|
||||
#165 = EDGE_CURVE('',#158,#158,#166,.T.);
|
||||
#166 = CIRCLE('',#167,2.75);
|
||||
#167 = AXIS2_PLACEMENT_3D('',#168,#169,#170);
|
||||
#168 = CARTESIAN_POINT('',(0.,0.,1.5));
|
||||
#169 = DIRECTION('',(0.,0.,-1.));
|
||||
#170 = DIRECTION('',(1.,0.,0.));
|
||||
#171 = ORIENTED_EDGE('',*,*,#157,.F.);
|
||||
#172 = ORIENTED_EDGE('',*,*,#109,.F.);
|
||||
#173 = CYLINDRICAL_SURFACE('',#174,2.75);
|
||||
#174 = AXIS2_PLACEMENT_3D('',#175,#176,#177);
|
||||
#175 = CARTESIAN_POINT('',(0.,0.,1.));
|
||||
#176 = DIRECTION('',(0.,0.,-1.));
|
||||
#177 = DIRECTION('',(1.,0.,0.));
|
||||
#178 = ADVANCED_FACE('',(#179),#198,.T.);
|
||||
#179 = FACE_BOUND('',#180,.T.);
|
||||
#180 = EDGE_LOOP('',(#181,#189,#196,#197));
|
||||
#181 = ORIENTED_EDGE('',*,*,#182,.T.);
|
||||
#182 = EDGE_CURVE('',#130,#183,#185,.T.);
|
||||
#183 = VERTEX_POINT('',#184);
|
||||
#184 = CARTESIAN_POINT('',(-1.,0.,-1.));
|
||||
#185 = LINE('',#186,#187);
|
||||
#186 = CARTESIAN_POINT('',(-1.,0.,0.));
|
||||
#187 = VECTOR('',#188,1.);
|
||||
#188 = DIRECTION('',(0.,0.,-1.));
|
||||
#189 = ORIENTED_EDGE('',*,*,#190,.F.);
|
||||
#190 = EDGE_CURVE('',#183,#183,#191,.T.);
|
||||
#191 = CIRCLE('',#192,0.25);
|
||||
#192 = AXIS2_PLACEMENT_3D('',#193,#194,#195);
|
||||
#193 = CARTESIAN_POINT('',(-1.25,0.,-1.));
|
||||
#194 = DIRECTION('',(0.,0.,-1.));
|
||||
#195 = DIRECTION('',(1.,0.,0.));
|
||||
#196 = ORIENTED_EDGE('',*,*,#182,.F.);
|
||||
#197 = ORIENTED_EDGE('',*,*,#129,.T.);
|
||||
#198 = CYLINDRICAL_SURFACE('',#199,0.25);
|
||||
#199 = AXIS2_PLACEMENT_3D('',#200,#201,#202);
|
||||
#200 = CARTESIAN_POINT('',(-1.25,0.,0.));
|
||||
#201 = DIRECTION('',(0.,0.,-1.));
|
||||
#202 = DIRECTION('',(1.,0.,0.));
|
||||
#203 = ADVANCED_FACE('',(#204),#223,.T.);
|
||||
#204 = FACE_BOUND('',#205,.T.);
|
||||
#205 = EDGE_LOOP('',(#206,#214,#221,#222));
|
||||
#206 = ORIENTED_EDGE('',*,*,#207,.T.);
|
||||
#207 = EDGE_CURVE('',#141,#208,#210,.T.);
|
||||
#208 = VERTEX_POINT('',#209);
|
||||
#209 = CARTESIAN_POINT('',(1.5,0.,-1.));
|
||||
#210 = LINE('',#211,#212);
|
||||
#211 = CARTESIAN_POINT('',(1.5,0.,0.));
|
||||
#212 = VECTOR('',#213,1.);
|
||||
#213 = DIRECTION('',(0.,0.,-1.));
|
||||
#214 = ORIENTED_EDGE('',*,*,#215,.F.);
|
||||
#215 = EDGE_CURVE('',#208,#208,#216,.T.);
|
||||
#216 = CIRCLE('',#217,0.25);
|
||||
#217 = AXIS2_PLACEMENT_3D('',#218,#219,#220);
|
||||
#218 = CARTESIAN_POINT('',(1.25,0.,-1.));
|
||||
#219 = DIRECTION('',(0.,0.,-1.));
|
||||
#220 = DIRECTION('',(1.,0.,0.));
|
||||
#221 = ORIENTED_EDGE('',*,*,#207,.F.);
|
||||
#222 = ORIENTED_EDGE('',*,*,#140,.T.);
|
||||
#223 = CYLINDRICAL_SURFACE('',#224,0.25);
|
||||
#224 = AXIS2_PLACEMENT_3D('',#225,#226,#227);
|
||||
#225 = CARTESIAN_POINT('',(1.25,0.,0.));
|
||||
#226 = DIRECTION('',(0.,0.,-1.));
|
||||
#227 = DIRECTION('',(1.,0.,0.));
|
||||
#228 = ADVANCED_FACE('',(#229,#240),#243,.F.);
|
||||
#229 = FACE_BOUND('',#230,.F.);
|
||||
#230 = EDGE_LOOP('',(#231));
|
||||
#231 = ORIENTED_EDGE('',*,*,#232,.F.);
|
||||
#232 = EDGE_CURVE('',#233,#233,#235,.T.);
|
||||
#233 = VERTEX_POINT('',#234);
|
||||
#234 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,1.5));
|
||||
#235 = CIRCLE('',#236,2.95);
|
||||
#236 = AXIS2_PLACEMENT_3D('',#237,#238,#239);
|
||||
#237 = CARTESIAN_POINT('',(0.,0.,1.5));
|
||||
#238 = DIRECTION('',(0.,-0.,-1.));
|
||||
#239 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#240 = FACE_BOUND('',#241,.F.);
|
||||
#241 = EDGE_LOOP('',(#242));
|
||||
#242 = ORIENTED_EDGE('',*,*,#165,.T.);
|
||||
#243 = PLANE('',#244);
|
||||
#244 = AXIS2_PLACEMENT_3D('',#245,#246,#247);
|
||||
#245 = CARTESIAN_POINT('',(-1.738271354923E-16,1.071049079375E-17,1.5));
|
||||
#246 = DIRECTION('',(0.,0.,1.));
|
||||
#247 = DIRECTION('',(1.,0.,0.));
|
||||
#248 = ADVANCED_FACE('',(#249),#269,.T.);
|
||||
#249 = FACE_BOUND('',#250,.T.);
|
||||
#250 = EDGE_LOOP('',(#251,#260,#267,#268));
|
||||
#251 = ORIENTED_EDGE('',*,*,#252,.T.);
|
||||
#252 = EDGE_CURVE('',#183,#253,#255,.T.);
|
||||
#253 = VERTEX_POINT('',#254);
|
||||
#254 = CARTESIAN_POINT('',(-1.,-1.,-2.));
|
||||
#255 = CIRCLE('',#256,1.);
|
||||
#256 = AXIS2_PLACEMENT_3D('',#257,#258,#259);
|
||||
#257 = CARTESIAN_POINT('',(-1.,-1.,-1.));
|
||||
#258 = DIRECTION('',(-1.,0.,0.));
|
||||
#259 = DIRECTION('',(0.,1.,0.));
|
||||
#260 = ORIENTED_EDGE('',*,*,#261,.T.);
|
||||
#261 = EDGE_CURVE('',#253,#253,#262,.T.);
|
||||
#262 = CIRCLE('',#263,0.25);
|
||||
#263 = AXIS2_PLACEMENT_3D('',#264,#265,#266);
|
||||
#264 = CARTESIAN_POINT('',(-1.25,-1.,-2.));
|
||||
#265 = DIRECTION('',(0.,1.,6.123233995737E-17));
|
||||
#266 = DIRECTION('',(0.,6.123233995737E-17,-1.));
|
||||
#267 = ORIENTED_EDGE('',*,*,#252,.F.);
|
||||
#268 = ORIENTED_EDGE('',*,*,#190,.T.);
|
||||
#269 = TOROIDAL_SURFACE('',#270,1.,0.25);
|
||||
#270 = AXIS2_PLACEMENT_3D('',#271,#272,#273);
|
||||
#271 = CARTESIAN_POINT('',(-1.25,-1.,-1.));
|
||||
#272 = DIRECTION('',(-1.,0.,0.));
|
||||
#273 = DIRECTION('',(0.,1.,0.));
|
||||
#274 = ADVANCED_FACE('',(#275),#295,.T.);
|
||||
#275 = FACE_BOUND('',#276,.T.);
|
||||
#276 = EDGE_LOOP('',(#277,#286,#293,#294));
|
||||
#277 = ORIENTED_EDGE('',*,*,#278,.T.);
|
||||
#278 = EDGE_CURVE('',#208,#279,#281,.T.);
|
||||
#279 = VERTEX_POINT('',#280);
|
||||
#280 = CARTESIAN_POINT('',(1.5,-1.,-2.));
|
||||
#281 = CIRCLE('',#282,1.);
|
||||
#282 = AXIS2_PLACEMENT_3D('',#283,#284,#285);
|
||||
#283 = CARTESIAN_POINT('',(1.5,-1.,-1.));
|
||||
#284 = DIRECTION('',(-1.,0.,0.));
|
||||
#285 = DIRECTION('',(0.,1.,0.));
|
||||
#286 = ORIENTED_EDGE('',*,*,#287,.T.);
|
||||
#287 = EDGE_CURVE('',#279,#279,#288,.T.);
|
||||
#288 = CIRCLE('',#289,0.25);
|
||||
#289 = AXIS2_PLACEMENT_3D('',#290,#291,#292);
|
||||
#290 = CARTESIAN_POINT('',(1.25,-1.,-2.));
|
||||
#291 = DIRECTION('',(0.,1.,6.123233995737E-17));
|
||||
#292 = DIRECTION('',(0.,6.123233995737E-17,-1.));
|
||||
#293 = ORIENTED_EDGE('',*,*,#278,.F.);
|
||||
#294 = ORIENTED_EDGE('',*,*,#215,.T.);
|
||||
#295 = TOROIDAL_SURFACE('',#296,1.,0.25);
|
||||
#296 = AXIS2_PLACEMENT_3D('',#297,#298,#299);
|
||||
#297 = CARTESIAN_POINT('',(1.25,-1.,-1.));
|
||||
#298 = DIRECTION('',(-1.,0.,0.));
|
||||
#299 = DIRECTION('',(0.,1.,0.));
|
||||
#300 = ADVANCED_FACE('',(#301),#321,.T.);
|
||||
#301 = FACE_BOUND('',#302,.F.);
|
||||
#302 = EDGE_LOOP('',(#303,#312,#313,#314));
|
||||
#303 = ORIENTED_EDGE('',*,*,#304,.F.);
|
||||
#304 = EDGE_CURVE('',#233,#305,#307,.T.);
|
||||
#305 = VERTEX_POINT('',#306);
|
||||
#306 = CARTESIAN_POINT('',(3.15,-7.715274834628E-16,1.7));
|
||||
#307 = CIRCLE('',#308,0.2);
|
||||
#308 = AXIS2_PLACEMENT_3D('',#309,#310,#311);
|
||||
#309 = CARTESIAN_POINT('',(2.95,-7.225416114969E-16,1.7));
|
||||
#310 = DIRECTION('',(-2.449293598295E-16,-1.,0.));
|
||||
#311 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#312 = ORIENTED_EDGE('',*,*,#232,.F.);
|
||||
#313 = ORIENTED_EDGE('',*,*,#304,.T.);
|
||||
#314 = ORIENTED_EDGE('',*,*,#315,.T.);
|
||||
#315 = EDGE_CURVE('',#305,#305,#316,.T.);
|
||||
#316 = CIRCLE('',#317,3.15);
|
||||
#317 = AXIS2_PLACEMENT_3D('',#318,#319,#320);
|
||||
#318 = CARTESIAN_POINT('',(0.,0.,1.7));
|
||||
#319 = DIRECTION('',(0.,-0.,-1.));
|
||||
#320 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#321 = TOROIDAL_SURFACE('',#322,2.95,0.2);
|
||||
#322 = AXIS2_PLACEMENT_3D('',#323,#324,#325);
|
||||
#323 = CARTESIAN_POINT('',(0.,0.,1.7));
|
||||
#324 = DIRECTION('',(0.,0.,1.));
|
||||
#325 = DIRECTION('',(1.,-2.449293598295E-16,0.));
|
||||
#326 = ADVANCED_FACE('',(#327),#346,.T.);
|
||||
#327 = FACE_BOUND('',#328,.T.);
|
||||
#328 = EDGE_LOOP('',(#329,#337,#344,#345));
|
||||
#329 = ORIENTED_EDGE('',*,*,#330,.T.);
|
||||
#330 = EDGE_CURVE('',#253,#331,#333,.T.);
|
||||
#331 = VERTEX_POINT('',#332);
|
||||
#332 = CARTESIAN_POINT('',(-1.,-4.95,-2.));
|
||||
#333 = LINE('',#334,#335);
|
||||
#334 = CARTESIAN_POINT('',(-1.,-1.,-2.));
|
||||
#335 = VECTOR('',#336,1.);
|
||||
#336 = DIRECTION('',(0.,-1.,0.));
|
||||
#337 = ORIENTED_EDGE('',*,*,#338,.F.);
|
||||
#338 = EDGE_CURVE('',#331,#331,#339,.T.);
|
||||
#339 = CIRCLE('',#340,0.25);
|
||||
#340 = AXIS2_PLACEMENT_3D('',#341,#342,#343);
|
||||
#341 = CARTESIAN_POINT('',(-1.25,-4.95,-2.));
|
||||
#342 = DIRECTION('',(0.,-1.,-6.123233995737E-17));
|
||||
#343 = DIRECTION('',(1.,0.,0.));
|
||||
#344 = ORIENTED_EDGE('',*,*,#330,.F.);
|
||||
#345 = ORIENTED_EDGE('',*,*,#261,.F.);
|
||||
#346 = CYLINDRICAL_SURFACE('',#347,0.25);
|
||||
#347 = AXIS2_PLACEMENT_3D('',#348,#349,#350);
|
||||
#348 = CARTESIAN_POINT('',(-1.25,-1.,-2.));
|
||||
#349 = DIRECTION('',(0.,-1.,0.));
|
||||
#350 = DIRECTION('',(1.,0.,0.));
|
||||
#351 = ADVANCED_FACE('',(#352),#371,.T.);
|
||||
#352 = FACE_BOUND('',#353,.T.);
|
||||
#353 = EDGE_LOOP('',(#354,#362,#369,#370));
|
||||
#354 = ORIENTED_EDGE('',*,*,#355,.T.);
|
||||
#355 = EDGE_CURVE('',#279,#356,#358,.T.);
|
||||
#356 = VERTEX_POINT('',#357);
|
||||
#357 = CARTESIAN_POINT('',(1.5,-4.95,-2.));
|
||||
#358 = LINE('',#359,#360);
|
||||
#359 = CARTESIAN_POINT('',(1.5,-1.,-2.));
|
||||
#360 = VECTOR('',#361,1.);
|
||||
#361 = DIRECTION('',(0.,-1.,0.));
|
||||
#362 = ORIENTED_EDGE('',*,*,#363,.F.);
|
||||
#363 = EDGE_CURVE('',#356,#356,#364,.T.);
|
||||
#364 = CIRCLE('',#365,0.25);
|
||||
#365 = AXIS2_PLACEMENT_3D('',#366,#367,#368);
|
||||
#366 = CARTESIAN_POINT('',(1.25,-4.95,-2.));
|
||||
#367 = DIRECTION('',(0.,-1.,-6.123233995737E-17));
|
||||
#368 = DIRECTION('',(1.,0.,0.));
|
||||
#369 = ORIENTED_EDGE('',*,*,#355,.F.);
|
||||
#370 = ORIENTED_EDGE('',*,*,#287,.F.);
|
||||
#371 = CYLINDRICAL_SURFACE('',#372,0.25);
|
||||
#372 = AXIS2_PLACEMENT_3D('',#373,#374,#375);
|
||||
#373 = CARTESIAN_POINT('',(1.25,-1.,-2.));
|
||||
#374 = DIRECTION('',(0.,-1.,0.));
|
||||
#375 = DIRECTION('',(1.,0.,0.));
|
||||
#376 = ADVANCED_FACE('',(#377),#396,.T.);
|
||||
#377 = FACE_BOUND('',#378,.F.);
|
||||
#378 = EDGE_LOOP('',(#379,#387,#388,#389));
|
||||
#379 = ORIENTED_EDGE('',*,*,#380,.F.);
|
||||
#380 = EDGE_CURVE('',#305,#381,#383,.T.);
|
||||
#381 = VERTEX_POINT('',#382);
|
||||
#382 = CARTESIAN_POINT('',(3.15,0.,7.5));
|
||||
#383 = LINE('',#384,#385);
|
||||
#384 = CARTESIAN_POINT('',(3.15,0.,0.));
|
||||
#385 = VECTOR('',#386,1.);
|
||||
#386 = DIRECTION('',(0.,0.,1.));
|
||||
#387 = ORIENTED_EDGE('',*,*,#315,.T.);
|
||||
#388 = ORIENTED_EDGE('',*,*,#380,.T.);
|
||||
#389 = ORIENTED_EDGE('',*,*,#390,.T.);
|
||||
#390 = EDGE_CURVE('',#381,#381,#391,.T.);
|
||||
#391 = CIRCLE('',#392,3.15);
|
||||
#392 = AXIS2_PLACEMENT_3D('',#393,#394,#395);
|
||||
#393 = CARTESIAN_POINT('',(0.,0.,7.5));
|
||||
#394 = DIRECTION('',(0.,0.,1.));
|
||||
#395 = DIRECTION('',(1.,0.,0.));
|
||||
#396 = CYLINDRICAL_SURFACE('',#397,3.15);
|
||||
#397 = AXIS2_PLACEMENT_3D('',#398,#399,#400);
|
||||
#398 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#399 = DIRECTION('',(-0.,-0.,-1.));
|
||||
#400 = DIRECTION('',(1.,0.,0.));
|
||||
#401 = ADVANCED_FACE('',(#402),#405,.T.);
|
||||
#402 = FACE_BOUND('',#403,.T.);
|
||||
#403 = EDGE_LOOP('',(#404));
|
||||
#404 = ORIENTED_EDGE('',*,*,#338,.T.);
|
||||
#405 = PLANE('',#406);
|
||||
#406 = AXIS2_PLACEMENT_3D('',#407,#408,#409);
|
||||
#407 = CARTESIAN_POINT('',(-1.25,-4.95,-2.));
|
||||
#408 = DIRECTION('',(-0.,-1.,-0.));
|
||||
#409 = DIRECTION('',(0.,0.,-1.));
|
||||
#410 = ADVANCED_FACE('',(#411),#414,.T.);
|
||||
#411 = FACE_BOUND('',#412,.T.);
|
||||
#412 = EDGE_LOOP('',(#413));
|
||||
#413 = ORIENTED_EDGE('',*,*,#363,.T.);
|
||||
#414 = PLANE('',#415);
|
||||
#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418);
|
||||
#416 = CARTESIAN_POINT('',(1.25,-4.95,-2.));
|
||||
#417 = DIRECTION('',(-0.,-1.,-0.));
|
||||
#418 = DIRECTION('',(0.,0.,-1.));
|
||||
#419 = ADVANCED_FACE('',(#420),#440,.T.);
|
||||
#420 = FACE_BOUND('',#421,.T.);
|
||||
#421 = EDGE_LOOP('',(#422,#431,#432,#433));
|
||||
#422 = ORIENTED_EDGE('',*,*,#423,.F.);
|
||||
#423 = EDGE_CURVE('',#381,#424,#426,.T.);
|
||||
#424 = VERTEX_POINT('',#425);
|
||||
#425 = CARTESIAN_POINT('',(2.65,0.,8.));
|
||||
#426 = CIRCLE('',#427,0.5);
|
||||
#427 = AXIS2_PLACEMENT_3D('',#428,#429,#430);
|
||||
#428 = CARTESIAN_POINT('',(2.65,0.,7.5));
|
||||
#429 = DIRECTION('',(0.,-1.,0.));
|
||||
#430 = DIRECTION('',(1.,0.,0.));
|
||||
#431 = ORIENTED_EDGE('',*,*,#390,.T.);
|
||||
#432 = ORIENTED_EDGE('',*,*,#423,.T.);
|
||||
#433 = ORIENTED_EDGE('',*,*,#434,.F.);
|
||||
#434 = EDGE_CURVE('',#424,#424,#435,.T.);
|
||||
#435 = CIRCLE('',#436,2.65);
|
||||
#436 = AXIS2_PLACEMENT_3D('',#437,#438,#439);
|
||||
#437 = CARTESIAN_POINT('',(0.,0.,8.));
|
||||
#438 = DIRECTION('',(0.,0.,1.));
|
||||
#439 = DIRECTION('',(1.,0.,0.));
|
||||
#440 = TOROIDAL_SURFACE('',#441,2.65,0.5);
|
||||
#441 = AXIS2_PLACEMENT_3D('',#442,#443,#444);
|
||||
#442 = CARTESIAN_POINT('',(0.,0.,7.5));
|
||||
#443 = DIRECTION('',(0.,0.,1.));
|
||||
#444 = DIRECTION('',(1.,0.,0.));
|
||||
#445 = ADVANCED_FACE('',(#446),#449,.T.);
|
||||
#446 = FACE_BOUND('',#447,.T.);
|
||||
#447 = EDGE_LOOP('',(#448));
|
||||
#448 = ORIENTED_EDGE('',*,*,#434,.T.);
|
||||
#449 = PLANE('',#450);
|
||||
#450 = AXIS2_PLACEMENT_3D('',#451,#452,#453);
|
||||
#451 = CARTESIAN_POINT('',(-1.08526994646E-16,8.84660753815E-17,8.));
|
||||
#452 = DIRECTION('',(0.,0.,1.));
|
||||
#453 = DIRECTION('',(1.,0.,0.));
|
||||
#454 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
|
||||
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#458)) GLOBAL_UNIT_ASSIGNED_CONTEXT
|
||||
((#455,#456,#457)) REPRESENTATION_CONTEXT('Context #1',
|
||||
'3D Context with UNIT and UNCERTAINTY') );
|
||||
#455 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
|
||||
#456 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
|
||||
#457 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
|
||||
#458 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#455,
|
||||
'distance_accuracy_value','confusion accuracy');
|
||||
#459 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
|
||||
#460 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#461)
|
||||
,#454);
|
||||
#461 = STYLED_ITEM('color',(#462),#15);
|
||||
#462 = PRESENTATION_STYLE_ASSIGNMENT((#463,#469));
|
||||
#463 = SURFACE_STYLE_USAGE(.BOTH.,#464);
|
||||
#464 = SURFACE_SIDE_STYLE('',(#465));
|
||||
#465 = SURFACE_STYLE_FILL_AREA(#466);
|
||||
#466 = FILL_AREA_STYLE('',(#467));
|
||||
#467 = FILL_AREA_STYLE_COLOUR('',#468);
|
||||
#468 = COLOUR_RGB('',0.447058818107,0.474509808674,0.501960817233);
|
||||
#469 = CURVE_STYLE('',#470,POSITIVE_LENGTH_MEASURE(0.1),#471);
|
||||
#470 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
|
||||
#471 = COLOUR_RGB('',0.678431390124,0.709803936702,0.741176476869);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
@ -1,209 +0,0 @@
|
||||
(footprint "CPol_Circular_Bent_D5mm_L6mm"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0.3 -13.7 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "61d9ea73-1eca-4743-b94f-fe1d6f0ac448")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CPol_Circular_Bent_D5mm_L6mm"
|
||||
(at 0 1.6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "f639ed63-caa2-4d6e-a672-eb4b4bb715d0")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "9ff958e2-499a-4634-b90e-e4fd91783946")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8276a5d9-1ace-4208-9857-8607e618121e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_line
|
||||
(start -2.1 -1.3)
|
||||
(end -1.5 -1.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a9eae43f-6757-48ab-9121-2969c55af96b")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.8 -1.6)
|
||||
(end -1.8 -1)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "037a640e-a63c-4554-9666-bc1090bb3284")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.2 -2)
|
||||
(end -1.2 -0.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fa3902de-7717-4a18-899c-7ed1b399016c")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.2 -0.7)
|
||||
(end -0.9 -0.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2e59aae0-930e-4c54-97d8-b8905ec9187f")
|
||||
)
|
||||
(fp_line
|
||||
(start -0.9 -0.7)
|
||||
(end -0.9 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7cd2ae4c-6f2e-47c5-947e-dbbd5ca51986")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.85 -2)
|
||||
(end 0.85 -0.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b98e59c4-1b83-4115-bdd0-b91f16423371")
|
||||
)
|
||||
(fp_line
|
||||
(start 0.85 -0.7)
|
||||
(end 1.15 -0.7)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "255ab2f8-bcc2-41a5-a356-6d0e02b01824")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.15 -0.7)
|
||||
(end 1.15 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "588a56e9-28cd-4253-9b4e-2b002f997277")
|
||||
)
|
||||
(fp_rect
|
||||
(start -2.5 -8)
|
||||
(end 2.5 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "254c2c3e-d9b2-4176-a284-46edbfec451d")
|
||||
)
|
||||
(fp_rect
|
||||
(start 0 -8)
|
||||
(end 2.5 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9b1323f7-3dad-4e2f-bc68-a01c1cf0a388")
|
||||
)
|
||||
(fp_rect
|
||||
(start -2.6 -8)
|
||||
(end 2.6 0.7)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "b767af94-df24-42e7-94ca-127951dc296a")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 3.1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "fc7f2afb-b89e-4d7f-9d9b-9d7a03495a4a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole circle
|
||||
(at -1 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.6)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "429c3e5b-4965-4523-82ec-16fb27137d99")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 1 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.6)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2bd18f0c-9a8b-4002-8f11-ed340f6243ea")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KIPRJMOD}/footprints/Custom.pretty/CP_5x6mm-Body.step"
|
||||
(offset
|
||||
(xyz 0 2 2.5)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -90 -0 -180)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -1,210 +0,0 @@
|
||||
(footprint "CPol_Circular_Bent_D6.3mm_L8mm_L"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0.1 -10.8 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "61d9ea73-1eca-4743-b94f-fe1d6f0ac448")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CPol_Circular_Bent_D6.3mm_L8mm_L"
|
||||
(at 0 1.6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "f639ed63-caa2-4d6e-a672-eb4b4bb715d0")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "9ff958e2-499a-4634-b90e-e4fd91783946")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8276a5d9-1ace-4208-9857-8607e618121e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_line
|
||||
(start -2.3 -1.3)
|
||||
(end -1.7 -1.3)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a9eae43f-6757-48ab-9121-2969c55af96b")
|
||||
)
|
||||
(fp_line
|
||||
(start -2 -1.6)
|
||||
(end -2 -1)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "037a640e-a63c-4554-9666-bc1090bb3284")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.4 -2)
|
||||
(end -1.4 -0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fa3902de-7717-4a18-899c-7ed1b399016c")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.4 -0.95)
|
||||
(end -1.1 -0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2e59aae0-930e-4c54-97d8-b8905ec9187f")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.1 -0.95)
|
||||
(end -1.1 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7cd2ae4c-6f2e-47c5-947e-dbbd5ca51986")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.1 -2)
|
||||
(end 1.1 -0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b98e59c4-1b83-4115-bdd0-b91f16423371")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.1 -0.95)
|
||||
(end 1.4 -0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "255ab2f8-bcc2-41a5-a356-6d0e02b01824")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.4 -0.95)
|
||||
(end 1.4 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "588a56e9-28cd-4253-9b4e-2b002f997277")
|
||||
)
|
||||
(fp_rect
|
||||
(start -3.15 -10)
|
||||
(end 3.15 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "254c2c3e-d9b2-4176-a284-46edbfec451d")
|
||||
)
|
||||
(fp_rect
|
||||
(start 0 -10)
|
||||
(end 3.15 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9b1323f7-3dad-4e2f-bc68-a01c1cf0a388")
|
||||
)
|
||||
(fp_rect
|
||||
(start -3.2 -10.1)
|
||||
(end 3.2 0.9)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "b767af94-df24-42e7-94ca-127951dc296a")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 3.1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "fc7f2afb-b89e-4d7f-9d9b-9d7a03495a4a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole roundrect
|
||||
(at -1.25 0)
|
||||
(size 1.6 1.6)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(roundrect_rratio 0.15625)
|
||||
(uuid "b22a7a09-d9d5-4c86-a9b7-580c98817065")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 1.25 0)
|
||||
(size 1.6 1.6)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2e3d7766-62e7-47b5-929a-b198f36ccea7")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KIPRJMOD}/footprints/Custom.pretty/CP_6.3x8mm.step"
|
||||
(offset
|
||||
(xyz 0 2 3.2)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -90 -0 -180)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -1,210 +0,0 @@
|
||||
(footprint "CPol_Circular_Bent_D6.3mm_L8mm_R"
|
||||
(version 20241229)
|
||||
(generator "pcbnew")
|
||||
(generator_version "9.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0.3 11.1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "61d9ea73-1eca-4743-b94f-fe1d6f0ac448")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CPol_Circular_Bent_D6.3mm_L8mm_R"
|
||||
(at 0 1.6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "f639ed63-caa2-4d6e-a672-eb4b4bb715d0")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "9ff958e2-499a-4634-b90e-e4fd91783946")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "8276a5d9-1ace-4208-9857-8607e618121e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(fp_line
|
||||
(start -2.1 1.7)
|
||||
(end -2.1 1.1)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "037a640e-a63c-4554-9666-bc1090bb3284")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.8 1.4)
|
||||
(end -2.4 1.4)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a9eae43f-6757-48ab-9121-2969c55af96b")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.4 0.95)
|
||||
(end -1.4 2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "588a56e9-28cd-4253-9b4e-2b002f997277")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.1 0.95)
|
||||
(end -1.4 0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "255ab2f8-bcc2-41a5-a356-6d0e02b01824")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.1 2)
|
||||
(end -1.1 0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b98e59c4-1b83-4115-bdd0-b91f16423371")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.1 0.95)
|
||||
(end 1.1 2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7cd2ae4c-6f2e-47c5-947e-dbbd5ca51986")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.4 0.95)
|
||||
(end 1.1 0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "2e59aae0-930e-4c54-97d8-b8905ec9187f")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.4 2)
|
||||
(end 1.4 0.95)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fa3902de-7717-4a18-899c-7ed1b399016c")
|
||||
)
|
||||
(fp_rect
|
||||
(start -3.15 2)
|
||||
(end 3.15 10)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.SilkS")
|
||||
(uuid "254c2c3e-d9b2-4176-a284-46edbfec451d")
|
||||
)
|
||||
(fp_rect
|
||||
(start 0.025 2)
|
||||
(end 3.175 10)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "9b1323f7-3dad-4e2f-bc68-a01c1cf0a388")
|
||||
)
|
||||
(fp_rect
|
||||
(start -3.2 -0.9)
|
||||
(end 3.2 10.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "b767af94-df24-42e7-94ca-127951dc296a")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 3.1 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "fc7f2afb-b89e-4d7f-9d9b-9d7a03495a4a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole roundrect
|
||||
(at -1.25 0)
|
||||
(size 1.6 1.6)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(roundrect_rratio 0.15625)
|
||||
(uuid "b22a7a09-d9d5-4c86-a9b7-580c98817065")
|
||||
)
|
||||
(pad "2" thru_hole circle
|
||||
(at 1.25 0)
|
||||
(size 1.6 1.6)
|
||||
(drill 0.8)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "2e3d7766-62e7-47b5-929a-b198f36ccea7")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KIPRJMOD}/footprints/Custom.pretty/CP_6.3x8mm.step"
|
||||
(offset
|
||||
(xyz 0 -2 3.2)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -90 -0 -0)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -1,254 +0,0 @@
|
||||
(footprint "L_Changjiang_FNR4030S_Handsolder"
|
||||
(version 20260206)
|
||||
(generator "pcbnew")
|
||||
(generator_version "10.0")
|
||||
(layer "F.Cu")
|
||||
(descr "Inductor, Changjiang, FNR4030S, 4.0x4.0x3.0mm, (https://datasheet.lcsc.com/lcsc/1806131217_cjiang-Changjiang-Microelectronics-Tech-FNR5040S3R3NT_C167960.pdf)")
|
||||
(tags "wirewound power shielded")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 -2.95 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "86478e3e-c195-4c30-97dc-32e9ea499ba3")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "L_Changjiang_FNR4030S_Handsolder"
|
||||
(at 0 2.95 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "739a9154-d64f-4370-ae80-df162404456d")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "89d087f6-877a-4f0b-8a64-75cfd32efa21")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "78b2ee5e-69a3-4227-9040-aed489784c62")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "KiLib_Generator" "inductor/SMD"
|
||||
(at 0 0 0)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "8d1b65ed-ccaa-43f2-961c-09db0e730338")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr smd)
|
||||
(duplicate_pad_numbers_are_jumpers no)
|
||||
(fp_line
|
||||
(start -2.11 -2.11)
|
||||
(end 2.11 -2.11)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "c113f39b-2faf-43a6-ab00-6d873c7e0915")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.11 2.11)
|
||||
(end -2.11 2.11)
|
||||
(stroke
|
||||
(width 0.12)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a2dbc9a6-49eb-42d2-b2aa-6e4920f32f43")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.7 -2.1)
|
||||
(end -2.25 -2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "52cfea3b-b428-4474-a082-e073ee86cc57")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.7 2.1)
|
||||
(end -2.7 -2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "482f5640-299b-4ad6-9452-862d11987e7f")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.25 -2.25)
|
||||
(end 2.25 -2.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "8a08b1b8-6145-4ba7-980f-ccce5b1cb077")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.25 -2.1)
|
||||
(end -2.25 -2.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "2ee9150c-7983-4bfd-b57c-681d856392ae")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.25 2.1)
|
||||
(end -2.7 2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "4f8c9b7b-bb1f-4231-802c-be6f383708f9")
|
||||
)
|
||||
(fp_line
|
||||
(start -2.25 2.25)
|
||||
(end -2.25 2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "7e03ed2c-8aa6-4b98-8250-132916bddc79")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.25 -2.25)
|
||||
(end 2.25 -2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "192b14c7-18ce-4cfb-b11a-6519c415b2b1")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.25 -2.1)
|
||||
(end 2.7 -2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "4d111342-26ea-401e-86a8-5d52a2ba6fa0")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.25 2.1)
|
||||
(end 2.25 2.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "b6b3f260-7619-49ac-accd-1feae9b7570e")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.25 2.25)
|
||||
(end -2.25 2.25)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "d9f3ef03-9abd-470f-8a95-67be9799e2e5")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.7 -2.1)
|
||||
(end 2.7 2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "f22b67f4-def0-40a1-90d7-d24428c52071")
|
||||
)
|
||||
(fp_line
|
||||
(start 2.7 2.1)
|
||||
(end 2.25 2.1)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type solid)
|
||||
)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "d930db6d-d017-4c18-af74-81710daa211d")
|
||||
)
|
||||
(fp_rect
|
||||
(start -2 -2)
|
||||
(end 2 2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.Fab")
|
||||
(uuid "9f0bdb19-1e04-4bde-a22b-5d31b1a96141")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "df5884d5-cd0e-4a74-b716-b58b38c956d3")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" smd roundrect
|
||||
(at -1.775 0)
|
||||
(size 1.65 3.699999)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(roundrect_rratio 0.227273)
|
||||
(uuid "89b840a4-1454-4286-88fe-8a340710ec0b")
|
||||
)
|
||||
(pad "2" smd roundrect
|
||||
(at 1.775 -0.000001)
|
||||
(size 1.65 3.699998)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(roundrect_rratio 0.227273)
|
||||
(uuid "84c0f6d1-720a-4662-afa7-afa310a1fe71")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KICAD10_3DMODEL_DIR}/Inductor_SMD.3dshapes/L_Changjiang_FNR4030S.step"
|
||||
(offset
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz 0 0 0)
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -434,12 +434,6 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "A1" smd rect
|
||||
(at -3.2 -2.4775)
|
||||
(size 0.5 1.15)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "ea8dadf2-8afa-4fe2-9e30-22206c244069")
|
||||
)
|
||||
(pad "A4" smd rect
|
||||
(at -2.4 -2.4775)
|
||||
(size 0.5 1.15)
|
||||
@ -470,12 +464,6 @@
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "a621d7b8-8475-4012-bb80-22970594526c")
|
||||
)
|
||||
(pad "B1" smd rect
|
||||
(at 3.2185 -2.4775)
|
||||
(size 0.5 1.15)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "b6f3c56c-8cda-4c18-83e9-de8afa037a13")
|
||||
)
|
||||
(pad "B4" smd rect
|
||||
(at 2.4 -2.4775)
|
||||
(size 0.5 1.15)
|
||||
@ -506,6 +494,18 @@
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "b669d7b8-13ce-4926-b0fa-a776cf6d1e07")
|
||||
)
|
||||
(pad "GND" smd rect
|
||||
(at -3.2 -2.4775)
|
||||
(size 0.5 1.15)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "ea8dadf2-8afa-4fe2-9e30-22206c244069")
|
||||
)
|
||||
(pad "GND" smd rect
|
||||
(at 3.2185 -2.4775)
|
||||
(size 0.5 1.15)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "b6f3c56c-8cda-4c18-83e9-de8afa037a13")
|
||||
)
|
||||
(pad "S1" thru_hole oval
|
||||
(at -4.32 -1.8025)
|
||||
(size 1.2 2.2)
|
||||
|
||||
@ -1,726 +0,0 @@
|
||||
(footprint "USB-SMD_HC-TYPE-C-24P-CP1.0-5A-L10.45-01"
|
||||
(version 20260206)
|
||||
(generator "pcbnew")
|
||||
(generator_version "10.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "U?"
|
||||
(at 0 -1.975 0)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d46389c4-19b0-4144-8a01-98d427f77194")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "USB-SMD_HC-TYPE-C-24P-CP1.0-5A-L10.45-01"
|
||||
(at 0 12.35 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "5ef7914a-a59f-4b19-91f4-b1e5c88e8b83")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "6c333caa-e693-49d3-a43d-2bf2461e1666")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "89a656a4-4ac6-4288-93fc-60e581dfaba3")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(duplicate_pad_numbers_are_jumpers no)
|
||||
(fp_line
|
||||
(start -3.3 0.85)
|
||||
(end -4.47 0.85)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type default)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "b78c1eb0-5a2b-44cc-a911-9a4b478ee854")
|
||||
)
|
||||
(fp_line
|
||||
(start -3.3 1.3)
|
||||
(end -3.3 0.85)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type default)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "71a64aa6-7379-4797-989b-973ff90292f3")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.3 0.85)
|
||||
(end 3.3 1.3)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type default)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "2311affe-23c6-4792-8dff-f6b0d806a464")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.3 1.3)
|
||||
(end -3.3 1.3)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type default)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "42e8ad6d-9c4b-4538-b70a-88320ce059a7")
|
||||
)
|
||||
(fp_line
|
||||
(start 4.47 0.85)
|
||||
(end 3.3 0.85)
|
||||
(stroke
|
||||
(width 0.15)
|
||||
(type default)
|
||||
)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "c501c163-c86e-423f-af51-31effeef93b6")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(arc
|
||||
(start 4.545 0.879)
|
||||
(mid 4.47 0.804993)
|
||||
(end 4.395 0.879)
|
||||
)
|
||||
(xy 4.395 11.225) (xy -4.395 11.225)
|
||||
(arc
|
||||
(start -4.395 0.879)
|
||||
(mid -4.47 0.804993)
|
||||
(end -4.545 0.879)
|
||||
)
|
||||
(arc
|
||||
(start -4.545 11.3)
|
||||
(mid -4.523033 11.353033)
|
||||
(end -4.47 11.375)
|
||||
)
|
||||
(arc
|
||||
(start 4.47 11.375)
|
||||
(mid 4.523033 11.353033)
|
||||
(end 4.545 11.3)
|
||||
)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "Dwgs.User")
|
||||
(uuid "f7ec02d0-0c5a-44ea-b835-bc2f8cd016b5")
|
||||
)
|
||||
(fp_rect
|
||||
(start -4.92 -1.25)
|
||||
(end 4.92 11.625)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(fill no)
|
||||
(layer "F.CrtYd")
|
||||
(uuid "902a44ac-eb84-4490-9ed1-4b3059ef2a8f")
|
||||
)
|
||||
(fp_line
|
||||
(start -4.47 0.85)
|
||||
(end -4.47 1.5)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "520d848c-010f-4089-b328-089fab11a62e")
|
||||
)
|
||||
(fp_line
|
||||
(start -4.47 1.5)
|
||||
(end 4.47 1.5)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "ff5cb7d4-c806-4c1f-833c-a70e71308f6f")
|
||||
)
|
||||
(fp_line
|
||||
(start 4.47 0.85)
|
||||
(end -4.47 0.85)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "012a1b2e-380c-4399-91b1-8373ac5605c3")
|
||||
)
|
||||
(fp_line
|
||||
(start 4.47 1.5)
|
||||
(end 4.47 0.85)
|
||||
(stroke
|
||||
(width 0.051)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.Fab")
|
||||
(uuid "d7a99edd-0b0c-49c9-a2e0-f1109d56d85b")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -4.414567 1.477039) (xy -4.447039 1.444567) (xy -4.492961 1.444567) (xy -4.525433 1.477039) (xy -4.525433 1.522961)
|
||||
(xy -4.492961 1.555433) (xy -4.447039 1.555433) (xy -4.414567 1.522961)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "eefc9d6f-b5c6-437d-b583-6becb1f90425")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -4.42 0.95) (xy -4.22 0.95) (xy -4.22 -0.85) (xy -4.42 -0.85)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "87404bd5-9f57-438d-b15a-14d27bcddb65")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -4.42 0.95) (xy -4.22 0.95) (xy -4.22 -0.85) (xy -4.42 -0.85)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "bf3067cb-7f09-486b-af4b-8df0a4f3a3b6")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -2.85 1.1) (xy -2.65 1.1) (xy -2.65 -0.4) (xy -2.85 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "231c3c40-2194-4475-b8b0-54f94a752a1a")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -2.85 1.1) (xy -2.65 1.1) (xy -2.65 -0.4) (xy -2.85 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "522ef806-706c-43e1-b450-2b49025c589b")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -2.35 1.1) (xy -2.15 1.1) (xy -2.15 -0.4) (xy -2.35 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "19714b67-c42a-494f-9f8d-2a79c20cd1b2")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -2.35 1.1) (xy -2.15 1.1) (xy -2.15 -0.4) (xy -2.35 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "297d6c0f-56a0-4935-96f9-dae81e364ba6")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -1.85 1.1) (xy -1.65 1.1) (xy -1.65 -0.4) (xy -1.85 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "61b4904a-7d84-453f-989f-84da204c76db")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -1.85 1.1) (xy -1.65 1.1) (xy -1.65 -0.4) (xy -1.85 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "fad24114-6033-4c16-8936-5a42abb73e5f")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -1.35 1.1) (xy -1.15 1.1) (xy -1.15 -0.4) (xy -1.35 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "2f93059b-2f69-472e-9c82-9b438bcefcf8")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -1.35 1.1) (xy -1.15 1.1) (xy -1.15 -0.4) (xy -1.35 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "e5e6c05f-77e6-4b15-ad9f-c0b9f9ad02e3")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.85 1.1) (xy -0.65 1.1) (xy -0.65 -0.4) (xy -0.85 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "c8307f05-9e84-40d4-b5ec-2c214734593e")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.85 1.1) (xy -0.65 1.1) (xy -0.65 -0.4) (xy -0.85 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "e4e2810d-7cbb-45c3-a615-00b20b97f329")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.35 1.1) (xy -0.15 1.1) (xy -0.15 -0.4) (xy -0.35 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "22725a1b-c223-4394-9c90-3e2d34d7b0f3")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.35 1.1) (xy -0.15 1.1) (xy -0.15 -0.4) (xy -0.35 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "f7a968ab-90f3-4b5f-8a7c-2ef16c4eda1e")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 0.15 1.1) (xy 0.35 1.1) (xy 0.35 -0.4) (xy 0.15 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "1a2ba018-600e-45b8-9725-8b8760438c47")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 0.15 1.1) (xy 0.35 1.1) (xy 0.35 -0.4) (xy 0.15 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "e4522d21-a658-4452-8c41-cca69f02b1a3")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 0.65 1.1) (xy 0.85 1.1) (xy 0.85 -0.4) (xy 0.65 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "3afdf0a2-7a67-413a-abcb-ef4413670a35")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 0.65 1.1) (xy 0.85 1.1) (xy 0.85 -0.4) (xy 0.65 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "64c36dfd-90f3-4577-98cf-9b0f969327db")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 1.15 1.1) (xy 1.35 1.1) (xy 1.35 -0.4) (xy 1.15 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "3c94b625-b5b6-45c9-9e9d-c2428e45bddb")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 1.15 1.1) (xy 1.35 1.1) (xy 1.35 -0.4) (xy 1.15 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "63cb1c80-926f-4533-8f1d-ebd1d0cc90f4")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 1.65 1.1) (xy 1.85 1.1) (xy 1.85 -0.4) (xy 1.65 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "4b8dc80e-17d3-40b0-ba94-ee3f6e1f3a45")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 1.65 1.1) (xy 1.85 1.1) (xy 1.85 -0.4) (xy 1.65 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "9d48f22f-73aa-48f0-95fb-ac52bd466f63")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 2.15 1.1) (xy 2.35 1.1) (xy 2.35 -0.4) (xy 2.15 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "5d19b394-8287-4d7a-ae8f-4d9d2c6c739d")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 2.15 1.1) (xy 2.35 1.1) (xy 2.35 -0.4) (xy 2.15 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "9e8dcdcf-b3c2-4f6b-b89b-47c8390ffab5")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 2.65 1.1) (xy 2.85 1.1) (xy 2.85 -0.4) (xy 2.65 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "2a7d5cf2-3815-4247-b476-ec05f7ceb480")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 2.65 1.1) (xy 2.85 1.1) (xy 2.85 -0.4) (xy 2.65 -0.4)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "40606058-f410-4c81-abf0-b33d714b78ae")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 4.22 0.95) (xy 4.42 0.95) (xy 4.42 -0.85) (xy 4.22 -0.85)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "460d4c09-171c-4110-9c6e-5698566f1e01")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 4.22 0.95) (xy 4.42 0.95) (xy 4.42 -0.85) (xy 4.22 -0.85)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill yes)
|
||||
(layer "User.1")
|
||||
(uuid "55ee73b0-6a83-4391-99cb-c9f9a24d1d59")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 0 0)
|
||||
(layer "F.Fab")
|
||||
(uuid "87b70653-6761-436e-bffd-56b6cef66a0a")
|
||||
(effects
|
||||
(font
|
||||
(size 0.5 0.5)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "13" smd rect
|
||||
(at -4.32 -0.15)
|
||||
(size 0.7 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "0d3b07ae-c890-4bc1-9d15-f1fc8d8fbf45")
|
||||
)
|
||||
(pad "13" smd rect
|
||||
(at -4.32 -0.15)
|
||||
(size 0.7 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "74603852-5fc2-427c-93ad-937a7a83f4df")
|
||||
)
|
||||
(pad "14" smd rect
|
||||
(at 4.32 -0.15)
|
||||
(size 0.7 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "043c4322-29ee-4384-a773-bf21defcc577")
|
||||
)
|
||||
(pad "14" smd rect
|
||||
(at 4.32 -0.15)
|
||||
(size 0.7 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "e9de0b93-e9e6-45de-bc6d-807470578d3a")
|
||||
)
|
||||
(pad "A1" smd rect
|
||||
(at -2.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "44af04e8-adb4-4550-ab06-e97dd8adbefb")
|
||||
)
|
||||
(pad "A2" smd rect
|
||||
(at -2.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "e14ac156-95dd-4865-b937-d7b6148fb42a")
|
||||
)
|
||||
(pad "A3" smd rect
|
||||
(at -1.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "329e2764-bb9e-44e1-8d32-9cc1238b8c0d")
|
||||
)
|
||||
(pad "A4" smd rect
|
||||
(at -1.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "205751e5-7713-4d09-9acb-267fbb2742ac")
|
||||
)
|
||||
(pad "A5" smd rect
|
||||
(at -0.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "683a9ba2-a0c0-4318-8f52-330a28600d7b")
|
||||
)
|
||||
(pad "A6" smd rect
|
||||
(at -0.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "1b9df19e-44f6-4d03-903a-d63828c4c06b")
|
||||
)
|
||||
(pad "A7" smd rect
|
||||
(at 0.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "ceaf2e68-0033-40b8-8780-78121d1bfdf7")
|
||||
)
|
||||
(pad "A8" smd rect
|
||||
(at 0.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "410d6ec7-87de-4bf7-b00b-ce114f4709b8")
|
||||
)
|
||||
(pad "A9" smd rect
|
||||
(at 1.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "af42c210-b152-4f11-a798-593526a294ad")
|
||||
)
|
||||
(pad "A10" smd rect
|
||||
(at 1.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "a2e14bb2-cdc8-4679-b2ef-5de94bd5c8fd")
|
||||
)
|
||||
(pad "A11" smd rect
|
||||
(at 2.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "f9b61ba3-ec3a-4ab9-9996-c3dceab3aaab")
|
||||
)
|
||||
(pad "A12" smd rect
|
||||
(at 2.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "F.Cu" "F.Mask" "F.Paste")
|
||||
(uuid "72997436-0af1-4068-9461-b18c1c713d7d")
|
||||
)
|
||||
(pad "B1" smd rect
|
||||
(at 2.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "8d244a4c-ae6a-4285-b08b-587d464299a3")
|
||||
)
|
||||
(pad "B2" smd rect
|
||||
(at 2.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "72a7f583-8819-499c-bdae-4edb994c68c1")
|
||||
)
|
||||
(pad "B3" smd rect
|
||||
(at 1.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "67a3511e-c071-4ee6-870e-3c5e262587cc")
|
||||
)
|
||||
(pad "B4" smd rect
|
||||
(at 1.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "a34143e1-5b9b-45b7-ad6f-5db4ce1e7b74")
|
||||
)
|
||||
(pad "B5" smd rect
|
||||
(at 0.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "f5f31443-3501-4213-a352-9ba48b743176")
|
||||
)
|
||||
(pad "B6" smd rect
|
||||
(at 0.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "37799c6e-92da-4261-98e1-a0fbc864f4e8")
|
||||
)
|
||||
(pad "B7" smd rect
|
||||
(at -0.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "688fe2b2-d774-41f7-8923-8ae2efc08e12")
|
||||
)
|
||||
(pad "B8" smd rect
|
||||
(at -0.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "0cc618f8-8098-4108-9b82-26d6d4a266d4")
|
||||
)
|
||||
(pad "B9" smd rect
|
||||
(at -1.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "eff836eb-359b-4b36-946f-f303294af344")
|
||||
)
|
||||
(pad "B10" smd rect
|
||||
(at -1.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "de2b15ea-3fc9-47ac-a2bb-f5afb3e11ca2")
|
||||
)
|
||||
(pad "B11" smd rect
|
||||
(at -2.25 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "31f73382-0a3f-46e3-887b-76ff6b1d00e1")
|
||||
)
|
||||
(pad "B12" smd rect
|
||||
(at -2.75 0.15)
|
||||
(size 0.3 1.7)
|
||||
(layers "B.Cu" "B.Mask" "B.Paste")
|
||||
(uuid "8c1dcfd1-c0f9-4d5a-b743-433a2e8b0a65")
|
||||
)
|
||||
(embedded_fonts no)
|
||||
(model "${KIPRJMOD}/footprints/Custom.pretty/USB-SMD_HC-TYPE-C-24P-CP1.0-5A-L10.45-01.step"
|
||||
(offset
|
||||
(xyz 0 -11.5 -0.55)
|
||||
)
|
||||
(scale
|
||||
(xyz 1 1 1)
|
||||
)
|
||||
(rotate
|
||||
(xyz -0 -0 -0)
|
||||
)
|
||||
)
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -3,8 +3,6 @@
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_barcodes": false,
|
||||
"apply_defaults_to_fp_dimensions": false,
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
@ -50,23 +48,7 @@
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"border_display_style": 2,
|
||||
"border_hatch_pitch": 0.5,
|
||||
"corner_radius": 0.0,
|
||||
"corner_smoothing": 0,
|
||||
"fill_mode": 0,
|
||||
"hatch_gap": 1.5,
|
||||
"hatch_orientation": 0.0,
|
||||
"hatch_smoothing_level": 0,
|
||||
"hatch_smoothing_value": 0.1,
|
||||
"hatch_thickness": 1.0,
|
||||
"min_clearance": 0.2,
|
||||
"min_island_area": 10.0,
|
||||
"min_thickness": 0.25,
|
||||
"pad_connection": 1,
|
||||
"remove_islands": 0,
|
||||
"thermal_relief_gap": 0.5,
|
||||
"thermal_relief_spoke_width": 0.5
|
||||
"min_clearance": 0.25
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [
|
||||
@ -95,7 +77,6 @@
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_field_mismatch": "warning",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
@ -113,7 +94,6 @@
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"missing_tuning_profile": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
@ -133,12 +113,9 @@
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_not_centered_on_via": "ignore",
|
||||
"track_on_post_machined_layer": "error",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"tuning_profile_track_geometries": "ignore",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
@ -146,7 +123,7 @@
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.15,
|
||||
"min_clearance": 0.16,
|
||||
"min_connection": 0.16,
|
||||
"min_copper_edge_clearance": 0.2,
|
||||
"min_groove_width": 0.0,
|
||||
@ -154,15 +131,15 @@
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.2,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.16,
|
||||
"min_via_annular_width": 0.15,
|
||||
"min_via_diameter": 0.25,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
@ -252,28 +229,17 @@
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"bom_rev": "",
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": "",
|
||||
"sch_revision": ""
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"component_class_settings": {
|
||||
"assignments": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"sheet_component_classes": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
@ -463,14 +429,11 @@
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"field_name_whitespace": "warning",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"ground_pin_not_ground": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"isolated_pin_label": "warning",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
@ -493,7 +456,6 @@
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"stacked_pin_name": "warning",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"undefined_netclass": "error",
|
||||
@ -514,7 +476,7 @@
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.15,
|
||||
"clearance": 0.16,
|
||||
"diff_pair_gap": 0.16,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
@ -526,14 +488,13 @@
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"tuning_profile": "",
|
||||
"via_diameter": 0.5,
|
||||
"via_drill": 0.2,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 5
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -555,10 +516,6 @@
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"annotation": {
|
||||
"method": 0,
|
||||
"sort_order": 0
|
||||
},
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
@ -630,7 +587,6 @@
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"bus_aliases": {},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
@ -638,7 +594,6 @@
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"hop_over_size_choice": 0,
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
@ -662,7 +617,6 @@
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"reuse_designators": true,
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
@ -671,33 +625,13 @@
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0,
|
||||
"top_level_sheets": [
|
||||
{
|
||||
"filename": "usbc_soldering_iron.kicad_sch",
|
||||
"name": "usbc_soldering_iron",
|
||||
"uuid": "7095b018-eac3-4b01-b374-28e3216c4fd8"
|
||||
}
|
||||
],
|
||||
"used_designators": "J2,J6-17",
|
||||
"variants": [
|
||||
{
|
||||
"description": "Pen-style design",
|
||||
"name": "Pen"
|
||||
}
|
||||
]
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"7095b018-eac3-4b01-b374-28e3216c4fd8",
|
||||
"usbc_soldering_iron"
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {},
|
||||
"tuning_profiles": {
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"tuning_profiles_impedance_geometric": []
|
||||
}
|
||||
"text_variables": {}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
16
sim/CGA5L1X7R1H106K160AC.asy
Normal file
16
sim/CGA5L1X7R1H106K160AC.asy
Normal file
@ -0,0 +1,16 @@
|
||||
Version 4
|
||||
SymbolType BLOCK
|
||||
LINE Normal 0 -4 0 -32
|
||||
LINE Normal 16 -4 0 -4
|
||||
LINE Normal -16 -4 0 -4
|
||||
LINE Normal 16 4 -16 4
|
||||
LINE Normal 0 32 0 4
|
||||
WINDOW 0 80 -16 Bottom 2
|
||||
WINDOW 3 80 16 Top 2
|
||||
SYMATTR Prefix X
|
||||
SYMATTR Value CGA5L1X7R1H106K160AC_p
|
||||
SYMATTR ModelFile CGA5L1X7R1H106K160AC_p.mod
|
||||
PIN 0 -32 LEFT 8
|
||||
PINATTR SpiceOrder 1
|
||||
PIN 0 32 RIGHT 8
|
||||
PINATTR SpiceOrder 2
|
||||
62
sim/CGA5L1X7R1H106K160AC_p.mod
Normal file
62
sim/CGA5L1X7R1H106K160AC_p.mod
Normal file
@ -0,0 +1,62 @@
|
||||
*----------------------------------------------------------------------
|
||||
* SPICE Netlist Generated by TDK Corporation
|
||||
* Copyright(C) 2022 TDK Corporation.
|
||||
* All Rights Reserved.
|
||||
*----------------------------------------------------------------------
|
||||
* TDK P/N: CGA5L1X7R1H106K160AC (Multilayer Ceramic Chip Capacitor)
|
||||
* Property: C=10uF
|
||||
* Size(LxWxT): 3.2x1.6x1.6mm
|
||||
* Model Type: Precise Model
|
||||
* Model Generated on June 16, 2022
|
||||
*----------------------------------------------------------------------
|
||||
* Terms and conditions regarding TDK Simulation Models:
|
||||
* 1)This simulation model is being provided solely for informational
|
||||
* purposes. Please refer to the specifications of the products in
|
||||
* terms of detailed characteristics of such products.
|
||||
* 2)In no event shall TDK Corporation of any of its subsidiaries be
|
||||
* liable for any loss or damage arising, directly or indirectly,
|
||||
* from any information contained in this simulation model, including,
|
||||
* but not limited to loss or damages arising from any inaccuracies,
|
||||
* omissions or errors in connection with such information.
|
||||
* 3)Any and all copyrights on this simulation model are owned by
|
||||
* TDK Corporation. Duplication or redistribution of this simulation
|
||||
* model without prior written permission from TDK Corporation
|
||||
* is prohibited.
|
||||
* 4)This simulation model is subject to any modification or change
|
||||
* without any prior notice.
|
||||
* 5)Neither TDK Corporation nor any of its subsidiaries shall make any
|
||||
* warranty, express or implied, including but not limited to the
|
||||
* correctness, implied warranties of merchantability and fitness for
|
||||
* a particular purpose with respect to this simulation models.
|
||||
* 6)The use of this simulation model shall be deemed to have consented
|
||||
* to the terms and conditions hereof.
|
||||
*----------------------------------------------------------------------
|
||||
* External Node Assignments:
|
||||
*
|
||||
* n1 ---| |--- n2
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
* Applicable Conditions:
|
||||
* Temperature = 25 degC
|
||||
* DC Bias Voltage = 0 V
|
||||
* Small Signal Operation
|
||||
*----------------------------------------------------------------------
|
||||
.SUBCKT CGA5L1X7R1H106K160AC_p n1 n2
|
||||
C1 n1 11 9.52429487E-06
|
||||
C2 n1 12 1.15159657E-07
|
||||
C3 n1 13 1.15159657E-07
|
||||
C4 n1 14 1.15159657E-07
|
||||
C5 n1 15 1.15159657E-07
|
||||
C6 n1 16 1.15159657E-07
|
||||
C7 n1 17 1.15159657E-07
|
||||
L1 n2 21 7.50000000E-10
|
||||
R1 11 21 2.20400000E-03
|
||||
R2 11 12 1.30531029E+01
|
||||
R3 11 13 8.43347070E+01
|
||||
R4 11 14 5.44726342E+02
|
||||
R5 11 15 3.51748832E+03
|
||||
R6 11 16 2.27076345E+04
|
||||
R7 11 17 1.46554336E+05
|
||||
R8 n1 11 5.00000000E+07
|
||||
.ENDS CGA5L1X7R1H106K160AC_p
|
||||
*----------------------------------------------------------------------
|
||||
20
sim/CL31B106KBHNNN_Precise_Interactive_LT.asy
Normal file
20
sim/CL31B106KBHNNN_Precise_Interactive_LT.asy
Normal file
@ -0,0 +1,20 @@
|
||||
Version 4
|
||||
SymbolType BLOCK
|
||||
LINE Normal -5 0 -48 0
|
||||
LINE Normal 5 0 48 0
|
||||
LINE Normal 17 -13 -18 13
|
||||
LINE Normal 13 -12 17 -13
|
||||
LINE Normal 15 -10 17 -13
|
||||
RECTANGLE Normal 20 16 -21 -16
|
||||
RECTANGLE Normal 3 13 5 -13
|
||||
RECTANGLE Normal -5 13 -3 -13
|
||||
WINDOW 38 0 28 Center 2
|
||||
SYMATTR SpiceModel CL31B106KBHNNN_Precise_Interactive
|
||||
SYMATTR Prefix X
|
||||
SYMATTR ModelFile CL31B106KBHNNN_Precise_Interactive_LT.mod
|
||||
PIN 48 0 NONE 0
|
||||
PINATTR PinName A
|
||||
PINATTR SpiceOrder 1
|
||||
PIN -48 0 NONE 0
|
||||
PINATTR PinName B
|
||||
PINATTR SpiceOrder 2
|
||||
5059
sim/CL31B106KBHNNN_Precise_Interactive_LT.mod
Normal file
5059
sim/CL31B106KBHNNN_Precise_Interactive_LT.mod
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,18 +0,0 @@
|
||||
Version 4
|
||||
SymbolType BLOCK
|
||||
LINE Normal 64 0 8 0
|
||||
LINE Normal -8 16 -8 -16
|
||||
LINE Normal 8 16 8 -16
|
||||
LINE Normal -8 0 -64 0
|
||||
WINDOW 3 0 33 Center 2
|
||||
WINDOW 38 0 -33 Center 2
|
||||
SYMATTR Value Temperature=25
|
||||
SYMATTR SpiceModel MCASU32MAB7106_PNA01
|
||||
SYMATTR Prefix X
|
||||
SYMATTR ModelFile MCASU32MAB7106_PNA01_LT.cir
|
||||
PIN -64 0 NONE 8
|
||||
PINATTR PinName Port1
|
||||
PINATTR SpiceOrder 1
|
||||
PIN 64 0 NONE 8
|
||||
PINATTR PinName Port2
|
||||
PINATTR SpiceOrder 2
|
||||
@ -1,701 +0,0 @@
|
||||
* LTspice Encrypted File
|
||||
*
|
||||
* This encrypted file has been supplied by a 3rd
|
||||
* party vendor that does not wish to publicize
|
||||
* the technology used to implement this library.
|
||||
*
|
||||
* Permission is granted to use this file for
|
||||
* simulations but not to reverse engineer its
|
||||
* contents.
|
||||
*
|
||||
* MCASU32MAB7106_PNA01 LTspice Model ( Temperature / DC Bias Model )
|
||||
*--------------------------------------------------------------------------------------------------------
|
||||
* Model Generated by TAIYO YUDEN Corporation (https://www.yuden.co.jp/en/)
|
||||
* Version 3.0
|
||||
* TAIYO YUDEN Control No. 250905
|
||||
* Copyright(c) 2021 TAIYO YUDEN CO.,LTD. All Rights Reserved.
|
||||
*--------------------------------------------------------------------------------------------------------
|
||||
* Product Description (link to TY-COMPAS)
|
||||
* https://ds.yuden.co.jp/TYCOMPAS/or/detail?pn=MCASU32MAB7106KPNA01&u=M
|
||||
*--------------------------------------------------------------------------------------------------------
|
||||
*
|
||||
* Begin:
|
||||
A2 FC 2B C7 10 2D 69 7F 68 E6 80 19 46 5C D9 F6
|
||||
0D 45 BF C5 A0 5A 3A F2 D9 51 EC C3 35 EC 0C 64
|
||||
48 C1 75 AA F6 EB 1A AD 2E A1 36 AD 64 24 A4 F9
|
||||
C0 0A 91 66 85 E4 BE 43 A0 25 9C 72 63 EB C1 31
|
||||
8F B8 57 D8 9C 6E 97 3B C8 51 26 0B 14 2E BE 49
|
||||
10 A6 BA 70 C3 36 1D A9 F3 D5 4B C0 DB 9A 03 E0
|
||||
D8 57 75 0B 1C E1 29 1B 3C E7 11 C8 AC C1 A6 CA
|
||||
45 0D D4 96 8C 69 27 CC 58 34 E7 DD CA 0F 04 0C
|
||||
66 85 29 9B D5 23 A6 8A 0E CE 7B C9 74 8D 2B EC
|
||||
C7 12 9A CE 9E E3 34 03 11 34 3B 75 D6 37 5C 9F
|
||||
49 42 F4 2C 06 D1 41 DC 2A 67 06 CC D0 17 8A 38
|
||||
B9 6F FC 08 1C 98 D1 91 E5 E9 34 DE 25 6D C4 3E
|
||||
B2 79 39 72 B8 5F F4 DF F3 D4 AB 9B 34 48 3F 19
|
||||
19 8E 94 22 54 5C 78 40 3D F5 F8 11 16 14 22 D6
|
||||
4C 2B 24 CB FB 90 7A 3E DE DB 6C BC 45 20 E8 3C
|
||||
E7 2B C3 CC F6 B8 39 08 40 8A 23 BA 0C 43 E9 0D
|
||||
97 BF 3D D6 EF 8E E7 B3 01 51 0B 47 D7 32 53 CC
|
||||
44 28 FD EB 95 3E 5C 2B C2 CD 40 55 F0 40 46 2D
|
||||
5F A6 34 F8 9F F8 8F 56 C8 68 E5 74 CC A9 B5 C4
|
||||
E8 08 C7 6A 04 D7 FC FC 13 D8 60 4A 3C A7 43 BB
|
||||
49 AA 79 4B 87 4C 56 4F 57 96 3A 63 E2 71 2B 54
|
||||
AC A8 95 C8 99 C5 49 53 14 01 71 92 9D 18 E9 D8
|
||||
E1 DB 27 39 C0 C8 FB FC BC 41 36 5F C5 58 48 05
|
||||
61 2B 8A 16 7A 18 0B 84 2B 8C 82 E9 F7 31 14 B5
|
||||
80 8F 44 F0 B3 8D 48 97 06 3D 43 7F 42 69 25 30
|
||||
99 9D 86 90 C4 D8 1E 47 BE 47 63 08 9E 9E 23 00
|
||||
6A 03 14 DE 75 86 98 4F C2 07 10 F3 F1 0C 72 CA
|
||||
80 3D 78 E6 56 3F 92 08 38 27 19 89 D5 36 80 F1
|
||||
ED 52 58 4C 71 18 C3 C7 22 57 C5 7E 52 1B 23 0E
|
||||
27 87 72 E0 F9 94 DC 83 2B 36 82 56 1C 4B 24 96
|
||||
BF 15 29 FB C6 FC D1 D7 E3 22 6C E0 EE D6 24 BF
|
||||
FD D1 A7 4B E5 5B A2 59 7C 34 6E BB 86 DC 5B E9
|
||||
E3 1E 6B DE CA 85 77 F5 97 52 88 CC 17 D0 85 E0
|
||||
E4 22 FE 40 10 86 8E 66 92 31 A0 DA 0C 51 0B E7
|
||||
B3 82 76 B4 3E 29 2C EF 97 2B E1 B0 D6 DB 20 DD
|
||||
EA C3 EE DA 62 19 55 CD 68 C4 5E 81 5A 8C 44 4A
|
||||
1E 3F 9E 57 F3 BF 34 ED C7 91 A0 F2 47 2C 68 15
|
||||
E8 19 96 EC 52 8A F5 58 24 86 D2 91 E5 BB 0F 37
|
||||
A0 F5 6F FA 0F 23 11 BF 7A E7 F4 72 80 4A 71 D3
|
||||
DA 7A 05 90 28 0E 72 DA C7 37 26 72 4C 98 35 C4
|
||||
33 16 CF BB 24 4D E6 DB 64 08 5E C5 5B 66 3D 83
|
||||
4A 07 9A 9E C3 1D 6A 29 B9 52 8B 84 87 A3 0B F5
|
||||
BC B0 B3 C0 48 13 DF 16 5A 23 D8 2D 99 8C 88 80
|
||||
D7 31 A8 B2 48 4A 36 4B AA E7 03 0E 9D 48 7B D0
|
||||
1A 90 BB 0F 65 56 EE CA 46 35 51 F8 71 46 98 0B
|
||||
82 8B 07 EB 54 A0 2F 99 1F 2D 38 1E B5 87 1A AE
|
||||
52 47 8B 20 83 8F BD 37 5E 43 BE 64 D6 9B 87 06
|
||||
4A 50 A9 0C 38 F6 FF E3 3F 5D FD 38 02 4C 24 5A
|
||||
B9 5D 4A CE 0F FF 47 2A 52 4E 44 C6 21 63 3A DF
|
||||
83 BF 46 E9 63 E6 70 35 35 DD EE C7 D3 0B DF DA
|
||||
28 02 39 84 22 3E A6 EF 22 05 C7 B7 9C AF 01 9F
|
||||
2C 0E BC 3B 1B 91 17 46 D4 45 9F 58 AF 35 7D 3D
|
||||
67 F9 58 81 F4 4E 9C 7F 75 F8 67 BC 42 BA 3E F2
|
||||
D2 38 C0 1C FE 19 F0 80 EF C6 CD 5B 93 04 1D 5B
|
||||
4D 8D E1 17 29 9E B2 50 3C 89 E9 E2 2E 47 79 E3
|
||||
17 1F 45 00 D4 FA 0C 21 8E 70 36 95 CE E1 AF 91
|
||||
BB 06 AF 87 59 9A 93 1D C0 19 31 98 2B 5F 5C 67
|
||||
B8 5A 71 60 12 3B 5D 50 73 CD 10 A8 4E F6 3E 18
|
||||
2D C8 E1 C5 00 3E E5 D5 D3 05 DD AC B0 F4 BC 1E
|
||||
A7 26 FE 16 AE 98 58 AF 12 5B 3E 16 A5 35 6E 9A
|
||||
7E 43 3B 8B C7 A5 6D 4A 37 3F D7 55 1D 30 47 A4
|
||||
D5 2F 47 90 5D 36 0E 79 AC DA 50 D4 84 82 4C 98
|
||||
FF 88 1A 56 13 28 F5 65 E1 17 11 56 62 FB 71 79
|
||||
7F 6C 42 F7 F9 18 2F D1 A7 BB 82 10 37 89 F7 E2
|
||||
2B 84 37 F4 8B 98 B6 4A 58 F8 EF 54 55 94 05 B2
|
||||
B8 0A 54 DD D5 11 1C 69 1A AC AE 12 60 92 A3 C3
|
||||
F8 F8 4D 0F 1E EF 52 07 86 90 63 5C D9 CE 78 06
|
||||
11 0A B1 21 E4 9D 8F 71 FA A7 2D 71 98 C5 32 D3
|
||||
7D 32 87 9C 66 09 B8 99 D3 65 91 4F BB 5D F2 45
|
||||
96 BC BC 0D 7E 70 9A 09 DA 9C 0E A8 0E 62 47 19
|
||||
52 E1 80 69 70 DF B8 2A E2 4A 38 8D D8 CC 27 A2
|
||||
36 19 AC E4 38 88 23 A5 E1 C3 79 78 0F F2 B2 B3
|
||||
9D D1 C1 28 DB A8 08 B3 A7 0C 13 03 D1 AC 48 9A
|
||||
FD 21 A0 4D EF E0 A3 BA 9D 9A E4 AF C4 01 4B 71
|
||||
2B C7 96 3F B4 A0 A1 9A 81 CC 61 C0 BA E3 14 94
|
||||
AA 2B B4 6F F1 AC E4 58 CF 78 BA 3C F0 C2 7D FB
|
||||
30 BD 39 54 08 95 B4 3E 80 DD 3F D8 8D 98 C6 C4
|
||||
39 A6 B1 87 26 AB D6 37 4F A9 26 DC 65 4C 6A 1D
|
||||
1C C2 C8 3E 52 50 ED 20 8D 52 9D 91 ED 11 53 B4
|
||||
A3 34 87 82 12 F9 AC 94 B9 1A D0 DF 94 4B 6F F5
|
||||
20 63 89 0C F4 2B 45 06 2D 6F A5 D7 C4 44 5B 79
|
||||
9B 5B 4B 1C 0F A5 0E 15 B1 52 66 C0 24 A7 69 C3
|
||||
7E 67 70 B7 D9 D6 DD DA 1B 68 36 70 41 20 59 D2
|
||||
F3 C5 67 7C 4D 62 85 E8 7F FE 17 B4 64 3F 5B 12
|
||||
7E B7 03 34 40 7B 41 6F 23 63 E3 D1 F5 48 85 EA
|
||||
CB BA 5C 5A F2 F1 76 69 0A DA 79 B4 0F 04 DD 0D
|
||||
35 84 80 A9 F6 D7 4A 3D 14 57 26 97 97 FA 81 BF
|
||||
06 3E 3E 0F EA E2 A7 D0 6B 41 10 98 20 9E 65 65
|
||||
00 EB 1E AC AB D8 63 D6 52 D8 AA 49 B0 64 38 E7
|
||||
78 EF 47 FE B8 4B 3E 88 A6 59 46 42 6F B9 29 5F
|
||||
C4 53 32 13 BC C7 06 60 96 47 A8 6D 32 D3 9C 9B
|
||||
79 A6 5C 8E 49 5B E4 14 B8 F3 9A FD 92 E5 15 3C
|
||||
30 ED 9B 96 57 EC C2 F0 3B 43 4A 5D 26 67 5D 06
|
||||
04 3E 31 A0 CD 99 CB AF 10 D4 12 4E 4B 13 A1 1C
|
||||
2A 6E 4D 86 DD AF E9 A6 97 BF 80 CD E5 50 B4 A5
|
||||
91 29 89 BC E3 A6 3E D7 D4 F3 0E E3 23 C7 7A D6
|
||||
7A F1 07 F7 CC 47 09 0A 0E B8 4A 0A 5B 8D 8A FA
|
||||
AF F8 AA 04 09 3D D7 5C B7 80 7F 95 37 4B E4 83
|
||||
0E 41 FD 97 E4 00 89 60 23 08 24 A4 B1 69 B4 7D
|
||||
6A B5 11 47 19 96 8B E3 50 02 A9 8C F1 F4 4D 9E
|
||||
DD 6F 2A 69 33 E0 5C 4E 98 42 6F D3 14 B6 E4 6C
|
||||
52 B2 07 AE D1 00 3A DF 2B 08 73 42 84 33 8A E9
|
||||
A8 A7 CC D3 95 4C E0 11 88 71 93 69 9D 0A 1A CC
|
||||
46 8E 95 09 A3 D2 EE BA 22 98 13 81 37 B0 A3 B7
|
||||
88 A8 2E C7 4E E2 B1 CC AF 43 CF 4E 9E 21 53 F9
|
||||
13 A4 9C FA A0 F0 BF DB 79 26 B8 68 55 C8 34 13
|
||||
43 0A 45 94 7F 1A EF 01 C5 A8 6E 04 5D 29 2C DE
|
||||
07 21 9E 4B 60 CB 9F 85 32 60 90 41 D7 62 FE 54
|
||||
CA A7 1C AD 37 2D 64 83 1D E9 ED 94 D4 4A 30 5D
|
||||
58 67 C5 DB 94 A7 3E 2E DE B7 9C F2 FC 7F D6 22
|
||||
CF 13 4B 7E 1C A2 DB D9 FE 04 55 8A 73 2A E2 6A
|
||||
D7 54 72 23 D9 A1 50 C5 00 67 71 E2 E9 16 B0 AF
|
||||
FC 85 BB 1C 79 23 F8 79 0F D3 FF 55 B8 C3 FC C3
|
||||
D6 72 72 AD C8 EB 15 72 9B 00 6F 15 5B 14 47 05
|
||||
52 FD E1 3A 95 BC D4 5C 8D 23 36 82 85 A4 9A 32
|
||||
6D 96 6A 32 35 EA CC E0 EA E6 00 7F 09 7C 52 27
|
||||
31 B8 2B 1C 3F 2E 6B E3 37 CC 08 2E D1 F9 3C 6D
|
||||
0E 7E C0 10 9E 12 DE 22 CD F0 33 D3 B6 5A 4A B1
|
||||
02 51 C3 E9 D7 53 3C 5F 16 C4 B5 FC 4F F9 30 C1
|
||||
DC 21 80 40 9D AF 54 3C C9 51 73 47 E3 1C DC 34
|
||||
5C E8 4C E4 04 20 20 42 3E 96 DD 15 F4 23 6A 3A
|
||||
89 67 6B 05 C4 B2 6B 0D 48 30 1F 6B 6F 89 1C EF
|
||||
26 D2 E0 10 58 17 41 8D A7 FB 70 19 27 F6 F7 AA
|
||||
E3 9A 24 73 A4 2D 85 E4 7D A2 49 23 57 73 A0 4F
|
||||
BF DE 9A E7 36 0D 50 D3 E4 CA 06 78 A2 30 34 4C
|
||||
99 B6 98 24 11 87 F9 49 CC 80 06 8E E9 7C 6A 3D
|
||||
43 2F 92 FF 94 37 95 3C 40 18 09 3F D9 10 01 D9
|
||||
A4 74 AB 85 2E F1 CA 63 96 8D 42 B5 3A 99 4B 38
|
||||
FA 12 0A CA E1 D6 CE 1C 6F C5 11 E4 D4 AC F2 B0
|
||||
F9 61 66 50 79 E9 17 F6 CB 4E 9E 28 61 26 22 5F
|
||||
13 C4 76 DA 35 2B F2 EE A0 1B 10 C5 AC E0 6D 00
|
||||
67 29 D4 49 D2 64 23 45 3E 31 77 AC 68 C0 4B E4
|
||||
12 FC 26 40 6C BD A3 99 9F 6F 3F 80 FB 94 2D 7A
|
||||
95 C4 A6 61 32 6C D9 4A 45 45 70 E4 5F E4 93 65
|
||||
BA FB BD FD 53 2B 10 5B 80 C6 43 CF 30 58 40 5D
|
||||
6A CE 2B 5E B2 22 2E 18 EA 85 FA 9D 41 44 53 B3
|
||||
6C 3F 5C F2 50 AF AB C3 9D 74 52 F3 A7 35 A0 FE
|
||||
BA FE 26 67 65 F9 23 2B CA 00 F1 9F 6E 11 4E DB
|
||||
28 64 DB 13 54 6E 84 2D 62 3A 0F 70 9D BE 9B 08
|
||||
50 D5 7B D2 FE FA E2 D7 65 74 60 91 E7 DF 10 0C
|
||||
C2 A1 62 D3 E3 5C 52 65 A3 BE 8D CE 1E 04 2D 3E
|
||||
5D CC 08 FA D8 AA 68 56 34 E1 92 4D 0D 4B C7 FB
|
||||
5B 51 FC A7 86 4F F3 B6 EF 62 5F 77 7B C5 21 00
|
||||
5C AA 10 25 D0 29 50 2F A6 43 F5 F1 F6 6A 99 F8
|
||||
63 4D BA AC B9 68 78 29 3A B9 48 12 2F 63 41 C8
|
||||
D4 E8 44 0D DB 70 9E 58 B9 B0 C1 14 77 EB 97 A9
|
||||
BB 31 42 39 7D 97 EE 51 FB 6F 59 71 D9 3A 9E A8
|
||||
1C 9A 6D 46 DC 65 62 96 C9 0C 7D C1 75 57 B5 9D
|
||||
08 71 04 0F 60 DE 3C 21 53 E4 33 44 8B 44 1A 91
|
||||
F9 AD A6 BC 7C 5A 76 34 E0 7D 22 CB 1A 4A CD 1C
|
||||
9C E1 9C C7 82 C0 DE 88 05 46 9B 71 7F 1D 2D D3
|
||||
27 FE 56 73 0F 8D 2E 18 C9 1D AB F7 EB 85 D9 16
|
||||
C6 09 F1 39 73 70 1D EF 73 78 1D CC 9C 70 5C 4F
|
||||
9C 8C A2 82 E5 32 33 D6 BE 48 46 18 E3 F1 81 E8
|
||||
83 2C 83 09 55 CE 46 ED 5E A2 AA 4A 80 6D 92 31
|
||||
19 FC C0 2A 8B FA 0F 06 56 DC FD 70 30 AE DB 11
|
||||
41 90 2B B1 5E BB 01 A9 EB 39 0F F6 83 BD C0 95
|
||||
D3 39 10 DC 95 FC 43 75 FD 30 32 A3 9B 49 26 D8
|
||||
CD 6F C3 90 91 CC A7 7E 88 B0 5A 35 54 29 C1 62
|
||||
5A 1F 93 8B 60 F7 3D 47 E3 09 88 2D FC 19 95 47
|
||||
6C B9 30 B9 95 64 53 6E 0F 50 20 3F 3C 76 E9 BF
|
||||
37 F6 A3 C8 21 2B 8C 35 88 41 4D 3F 47 7E A1 A4
|
||||
62 15 D6 3D 47 79 FA D8 84 97 DB 4B 7E 0F 03 5F
|
||||
7E B5 61 8B AB 0F 26 0E CB 6E ED 0C 9C 93 A6 AC
|
||||
F9 09 1D D4 A1 57 60 7E 98 A5 AF EA 21 0F EE 5B
|
||||
06 FB FA CE D4 37 E8 A3 22 88 5A D5 34 8A 3F D8
|
||||
C6 D1 EE 36 5C AF BC AE 9E E2 27 F1 AE 98 2E 1B
|
||||
D3 F5 95 6D C7 8A 2D B2 55 70 C8 CC F3 2A AD 01
|
||||
8A EC 13 D1 F7 62 53 C1 67 08 EF D4 4D 59 95 FD
|
||||
4E BA 6A A2 47 31 1B 3C FE 7F 0B E4 60 DF 77 D8
|
||||
74 C2 0F 98 D0 57 95 04 89 06 7E 33 39 B4 0F 2B
|
||||
48 40 0C 97 8A E3 1B DE 3F E8 4F D2 90 48 92 77
|
||||
FA 29 8B 30 4B C7 8E E6 6F 7C 3B 33 9E A7 93 28
|
||||
38 64 DE 03 D6 4F 50 23 DD C2 93 4F 3D 56 D3 0F
|
||||
EE 65 8C 23 C9 E9 13 1A 91 20 3F 94 BF 71 88 C4
|
||||
0C 20 48 B1 0D 68 B7 CF A1 1A 4C EC 6F 72 C8 D3
|
||||
9D 7D C8 27 23 7D 34 7A 53 72 D4 0C BC F9 DE D4
|
||||
16 9F 2A D0 AB 52 5B C7 80 15 66 4B EA DF 46 84
|
||||
6A 35 56 53 7B 13 12 1C 65 65 39 15 DE B9 ED BE
|
||||
9A 4A 53 EC F6 B3 33 F6 97 D5 57 59 E0 C0 47 AE
|
||||
33 C0 48 29 29 9A 76 C4 37 34 AF 84 BD 63 EE A0
|
||||
07 28 47 5B 3B 18 E9 DF A6 00 0B B2 59 57 53 BE
|
||||
91 59 66 A1 BF FC BA 98 D8 CD A8 8A AC 28 DF 4E
|
||||
76 61 40 15 EB 65 2D 87 E5 36 C2 A3 98 DA 19 46
|
||||
07 0C 4D 89 CB 5E 44 11 1D DA EE FF DF 8C DA FE
|
||||
B2 DB 99 04 E7 63 BA 95 FB 9A F5 14 83 14 BC 86
|
||||
3F A5 0C AF DE E9 86 22 8B 9B 9A 64 2A 9D EA 05
|
||||
7C A1 A6 7C E9 6A EC 23 7F 35 0B 25 80 23 30 54
|
||||
0D 5D 7B 40 D8 F7 34 79 43 67 E2 12 53 85 E7 CF
|
||||
BD EC 47 B3 E9 26 B6 05 19 BA 92 84 8B 14 B0 93
|
||||
81 FE B1 D0 EC 72 D0 B8 57 F0 DD BA E5 70 C0 2A
|
||||
0E 84 B3 76 0C 36 CC 7A 4A 01 6F 1E A2 94 5B C7
|
||||
EF 18 C7 49 C4 E8 38 FD 2C 21 3A 67 B6 C9 99 72
|
||||
90 91 02 AD 6F B9 ED 6B 8F 30 12 60 E5 47 21 41
|
||||
89 2F 47 39 74 06 FA 51 02 B4 26 62 C2 83 06 FE
|
||||
53 F3 98 D2 CE 0A DA 87 5D 9F FF 55 50 F6 E1 FA
|
||||
20 95 17 CA 82 59 A3 04 16 78 5D 47 9E 6E 46 43
|
||||
52 AB 41 0A 74 C5 E9 02 48 46 CF BD E8 51 7E D3
|
||||
11 6F 4A 05 4C 50 24 78 FF D7 CA 4A 43 65 CD 6B
|
||||
57 AC 16 6D 92 4E 19 67 D2 0F 4A 94 6C 22 60 D8
|
||||
03 9F 96 80 47 27 1E D1 BD 18 E9 07 88 E3 C6 EC
|
||||
FA D3 0B 82 C8 C6 96 51 B0 A3 CD D8 3C AD 71 5C
|
||||
A8 00 C3 34 CC 3D C1 B9 9E AA BD 71 FF 9A 07 FC
|
||||
EF D4 66 C5 65 C2 6B 05 1C BC 96 86 B7 27 94 1F
|
||||
10 35 6C 95 16 C3 42 FD BD 06 9B F3 29 71 4D DF
|
||||
78 F3 49 0E A0 BF 3C 4A 6E DC D1 E6 D6 BB FA 28
|
||||
C1 57 1E BB C7 51 CB 0C BB 11 DD 3E B2 5B 25 24
|
||||
E4 64 85 B0 99 26 99 C9 CB 4B 69 4C 8A E2 20 92
|
||||
0E 87 C9 B5 52 BC FB DD 2B D6 1A C7 C1 87 A0 C3
|
||||
BC 3F 3C FA B1 25 54 D3 A5 83 63 07 7F F9 EE 30
|
||||
EE F1 07 EF 23 73 02 86 E4 B7 41 4A 8C 24 55 68
|
||||
C8 8C FF F2 BD 36 57 5F AC 84 41 A7 10 20 BC 54
|
||||
B8 0B 8F AA 68 41 17 39 72 B7 60 1D 86 68 6D 36
|
||||
6B 29 12 AE D7 C1 E2 C8 71 0C E6 93 E4 9D 95 C9
|
||||
AA B5 29 29 46 90 7C D3 BB C1 D9 95 BC 16 B6 9E
|
||||
A1 7A 67 41 9C 8A CC 91 8B 56 45 4F 01 8C 88 39
|
||||
38 7A 1B 81 7B F2 B4 29 A2 AB 44 C7 F1 D5 BF 62
|
||||
2D A6 6C 9C C6 B3 61 FA 8A 6F D2 78 C7 20 3F FF
|
||||
42 7A 7F D6 74 38 51 99 00 CB 2E 24 54 5C 07 6A
|
||||
FC 6A A7 5C DC D0 D8 95 EE B3 D2 2C 25 DA 94 FB
|
||||
23 0C 1A 0C F6 97 B5 19 82 FA C2 37 FD 64 13 C3
|
||||
F4 6F BF D3 0F 01 CA 6A 06 FC CE FC 74 C5 CE E6
|
||||
F1 96 8A 08 99 CE C7 8F 00 38 C3 6C B6 9C B3 E6
|
||||
9D 55 CC BD AE 3C 75 34 EF 92 E4 58 28 08 31 22
|
||||
7F 29 4C 1B C4 5B F0 37 6F 78 0C CD DB CB AD B9
|
||||
CA FB A0 9F 3A FD 8D 33 0A 2B 71 02 E7 EF 70 3B
|
||||
03 7A 64 36 1C BF 62 E0 F0 79 B5 C1 81 3A 6A 9E
|
||||
6A 2F 08 23 B6 D9 57 77 8F 73 8B 8A 51 20 49 B8
|
||||
6A B5 AF 6F 1B 11 FA E4 29 0B 7E 95 BF AD 03 BC
|
||||
16 15 90 EB 13 93 A6 4D C3 FC 12 73 50 89 30 0D
|
||||
D6 5D 11 8C AB 7C 5F 9A 85 7D C5 20 C5 61 02 12
|
||||
F2 23 AB EE 47 55 DE 6F AA D7 83 28 D5 A8 32 00
|
||||
1A 66 94 92 7B 26 C8 41 A1 94 9C A4 D2 06 60 6E
|
||||
54 09 2A D7 C6 8C 34 4F FC 49 73 49 14 FE 66 0D
|
||||
86 DB C7 F9 3C B2 F6 67 72 7C 15 67 3C 16 6C C3
|
||||
8B 83 F6 3E 33 06 80 18 77 EB 1D 79 B6 33 71 EE
|
||||
BE 9C 9D 1E 8F AB 97 EE 4A 25 45 65 56 9F 35 4D
|
||||
FB 31 5E 70 20 4F 13 73 16 58 EA A9 B0 8E 14 31
|
||||
76 B2 6E 35 69 81 77 1A C7 A8 F6 6B 0D 2B 4E E6
|
||||
24 E6 8A 63 72 0F 3A 7C A0 A3 C2 96 54 54 2D 71
|
||||
74 15 FB 7B 6F 81 FE 2A 62 8F AD 0B A6 52 C8 EE
|
||||
C1 BB 16 BB 63 BB DE 4A F4 A9 63 B6 ED 08 3B FE
|
||||
98 37 AE B4 C2 44 CC FD A6 8E 3E 6F 02 03 A8 0F
|
||||
30 7C 36 CB D9 71 D5 F9 ED 8D 03 C9 6D B2 C1 DA
|
||||
31 A8 63 D0 58 FA 96 97 32 3B 8E 47 E6 DC 47 D6
|
||||
D8 50 20 F5 DA A2 78 69 59 4A 60 39 39 CB A9 7E
|
||||
ED D1 8E 1B 43 05 4A C9 DB B4 01 40 60 57 C8 7B
|
||||
38 98 06 7D 1B 3E 7E 60 0F 9C 98 8D DE 5E FF 12
|
||||
8D AF EE 09 78 34 FD 4A 63 D2 C3 F6 AE 23 95 E8
|
||||
04 8B F9 FB C6 DA F1 BF E9 9D 4D 99 05 93 55 00
|
||||
83 D1 70 78 B6 4F 11 1F F0 A0 BD B2 00 14 E0 52
|
||||
47 22 2D A7 3F 37 FA EB A4 81 59 9F E1 22 08 AA
|
||||
CC A8 CF D6 0B 6A 5D 62 EE 8F B1 34 1E 3B CD 1D
|
||||
E0 BE B7 E6 15 59 62 CE E0 45 03 3D 36 4A 0C 50
|
||||
2F D1 16 CD BA ED B9 38 FE C3 1C 4D F3 7C 89 49
|
||||
DF 64 45 02 28 72 96 84 AE 29 ED 24 AF 31 71 A1
|
||||
C8 25 20 C9 A6 C6 E8 7B F5 A3 B6 C2 76 FF 42 38
|
||||
F5 14 4B F4 0D 1C A3 08 AA 4C 9E 4B 4B 29 9B 91
|
||||
DA 22 27 B7 8B 84 29 47 41 5F 77 7A C3 E6 32 30
|
||||
B5 9F 0F 6F A0 CA 97 B4 23 EE 9C 6A ED 0F B7 C7
|
||||
C4 7F 70 8B 0D 63 50 FC 18 1B 79 73 C6 95 77 54
|
||||
7C CE D8 91 AB E3 4D 82 51 46 9E 85 83 28 7B 9E
|
||||
BD 49 25 CF 48 6E 72 F0 A2 C0 B0 65 2F ED 9E 54
|
||||
FD 41 EA 8B BC 80 8B 0A 0A A4 51 CF 06 40 4B 60
|
||||
C8 FB 0B B6 BA 7A 83 88 C5 FC ED 4A DE 77 A2 CB
|
||||
57 3D 4D 48 43 D1 E3 DF 66 27 94 A7 77 3E D1 9E
|
||||
DC F0 D5 0F 68 16 3D 89 FF A9 D7 C1 7E 3F EC C0
|
||||
99 EA 58 D9 D4 A1 76 81 65 DF 66 82 C5 42 85 5A
|
||||
A7 D4 F7 F5 00 9A 2B 01 A8 61 08 D8 28 FF 97 C4
|
||||
8F E8 48 04 E2 16 86 0B 02 53 8F 37 1B B8 AC 34
|
||||
E2 C9 6A BA 0A D5 C8 0A D3 35 22 CD 6E FC D1 AF
|
||||
AF 6B C7 5A 75 45 EF 1A EA 77 C0 A2 8B D0 D2 A5
|
||||
B0 E4 62 C1 42 E7 93 7B 9F 8E A8 3F D4 DA 1D 67
|
||||
17 F7 98 CC ED 65 C9 FF E9 01 11 B1 E3 EC 7C 6A
|
||||
CB 43 14 CC 89 5E 68 3C 73 ED BA A1 80 2C 8C BE
|
||||
4B 16 CA 8C 00 9D A0 C7 93 32 B3 40 67 EB DA 28
|
||||
33 30 CF 39 BE BD DB 2C D4 4B EB BC AA DD 2B D8
|
||||
26 51 FE 6C 41 60 C9 4A A0 C2 F8 A0 56 8B 6F 7F
|
||||
A8 2A 31 81 74 18 02 56 C0 6F B0 6E 60 14 79 49
|
||||
84 F4 91 50 A2 2F FB E9 A9 F6 79 0A DC 43 1A 6F
|
||||
9F F8 CB 62 4C 31 F8 D6 4D 59 ED 28 F8 1C BE 43
|
||||
3C 8E 7F E4 2F 10 8E 17 B6 82 1B 4F 90 F5 7F 50
|
||||
F4 5A 93 B2 8E D0 15 71 43 91 27 A9 57 A1 1B 5C
|
||||
A2 32 DD E5 2F 33 6D CD AD AF DD D3 D9 91 F1 CD
|
||||
70 1D 8D D0 0F 73 85 48 41 54 5A 5F 93 8C 41 C3
|
||||
86 55 CE 0B EB DB 59 1F 06 E6 D7 4B 7C E5 A3 53
|
||||
CF DD 6D AC 1E 34 58 7F 35 FF 51 B0 DB 21 57 12
|
||||
7E AE 16 49 8E 7E B0 2E DF 33 4B 49 CC 44 47 3F
|
||||
2A F8 77 28 85 07 8A 98 6B 43 22 4E 8A 1C B7 94
|
||||
4A F9 0D BE 71 61 DD BC 93 C9 1D 0A 01 E0 13 84
|
||||
C5 CF 15 91 B2 CB 3D 24 29 22 29 12 49 D3 17 2A
|
||||
33 28 CA 94 90 49 EC BF 4C E4 77 AB 93 13 7F 7E
|
||||
73 93 DC 23 66 47 36 1C B3 C9 FD BC E3 1E 7C 29
|
||||
04 4D 58 F0 27 D6 27 49 A7 5D 39 E4 F5 B3 FA 91
|
||||
7F 35 60 13 72 C2 9A 73 5A AB 7C 73 B0 97 FC 16
|
||||
70 AD 8D 21 0E CA 83 71 32 11 3A C8 D9 78 55 2C
|
||||
A9 EE EA 13 BE 6C B3 AF C0 51 D5 73 F5 4F 3B 2B
|
||||
94 6C 3D 22 E9 E1 09 94 1A E5 A7 03 89 E8 8A EF
|
||||
EC 73 76 2E 16 30 96 E4 B1 9E 0F FC A2 26 B8 51
|
||||
34 9A 90 2E 17 B4 2D 0E CC C7 B3 A2 CA 1E B2 9A
|
||||
23 6F 8F 7E A4 B4 87 A7 59 99 1A 2E 2F F9 1A FB
|
||||
5A 44 88 24 2D 74 24 4D FA 83 86 E3 9D F3 B4 62
|
||||
4E 5C 20 DA D6 C6 46 3A B8 C4 45 6E 18 72 65 4E
|
||||
FE 61 43 2A A2 9E E4 B6 47 F1 64 A1 C4 79 AC CD
|
||||
EC 5F 44 B8 35 B3 8D 7C 88 6F C4 A2 BB B9 B9 A5
|
||||
30 81 CB 51 2C F3 FC 0C 5F 1C 0C 0A 73 3A 17 24
|
||||
03 F5 FC CB 15 0B 7B 92 E3 DF 07 C5 C9 73 5D E2
|
||||
D8 88 51 DB 41 83 84 77 CA 37 B3 13 FB E4 C5 48
|
||||
F0 87 C8 85 62 AD 21 DB BE 3D 8A 47 87 08 77 43
|
||||
29 E5 23 5C 1E 66 21 A0 BC E5 C1 1E 4C F2 3B EA
|
||||
9B 35 3B F9 69 00 66 C1 1A 2A EE C8 62 83 40 80
|
||||
04 69 02 5D 5C 44 4A CC 84 C0 A6 B2 B8 93 22 F9
|
||||
E4 1A BF 0A 9A 3A 39 E1 5F B1 AB 74 D6 D6 19 42
|
||||
A7 D3 E1 D5 99 7F 8B D8 F7 89 45 16 61 BC 17 C0
|
||||
93 2E 82 AC F4 F8 CD F1 9A EA 33 2D D1 5F 44 6C
|
||||
8F 3C E3 64 0C 89 5F 19 09 51 EF 9A CF 10 13 42
|
||||
24 AA AE B0 34 A5 E5 D5 C2 8F 7B 92 7C DF 05 4B
|
||||
9A B6 1B 5A 6A E3 97 D5 D3 27 87 6F 5B 58 6F 57
|
||||
CC 82 17 F2 FC 2F AE 85 AA 9B D6 D8 39 56 DF 61
|
||||
5D 56 07 E9 FE 76 CF A7 6B 02 54 E1 B5 87 A4 C7
|
||||
AF 5C 5A 9D 64 5F 57 16 7C 6A 34 E3 94 1A D1 77
|
||||
D7 1C 80 14 FB D4 2D 8B 13 D7 A3 FF D1 C5 6A 3F
|
||||
2B CF 3D 88 EB 23 36 A5 DE C4 78 36 05 A3 58 7C
|
||||
79 75 9A 38 E9 97 74 E0 5C 92 47 F9 F9 51 30 29
|
||||
2F 85 D9 7F 95 4C FE 33 F1 34 32 44 38 77 C2 77
|
||||
82 44 E8 70 81 9B 86 E9 43 00 D7 B5 77 07 7B 1D
|
||||
C6 29 F6 93 BD 40 27 65 35 7D 6D 65 B6 D3 E7 22
|
||||
D2 21 4A CD EB 9C 10 BE E0 A0 02 10 A0 4E 19 33
|
||||
1B 47 E5 46 69 F4 9A F5 8C C7 8D 60 02 54 73 8A
|
||||
49 6B FB 75 D8 13 AD AE 66 85 DA 40 7A B9 47 7D
|
||||
64 28 42 1F 52 FD 16 30 44 CA 9F 55 16 DF 8B 4E
|
||||
DC 93 94 61 E3 4D 23 B4 60 29 B3 AA AB E6 EF 69
|
||||
C5 97 B1 EB D5 B0 91 67 73 12 3F 9D DC 2D 2A FB
|
||||
47 20 C7 BE BE 3A 46 2D 21 5F 53 D8 3E CB E8 81
|
||||
F5 96 28 2C 5D E7 FF BE D6 31 D1 A6 98 3C 06 45
|
||||
9D 64 EF 34 D9 F3 D9 D6 87 CC EB F0 A9 D1 B5 50
|
||||
D5 5E 92 06 6C 5E 68 98 6B 88 82 6E EF C7 05 BD
|
||||
98 16 EB 43 D4 6F 1A 45 81 7C 03 08 51 CD 12 24
|
||||
9E 0E 98 99 F8 75 51 C7 EB 5A 28 6A B0 63 1F EA
|
||||
D7 EF DC 56 B8 C9 DE CA F1 59 B0 27 EE CD F0 84
|
||||
4A D0 0B C5 0C B2 CC 72 3D 73 6A AF EC 6E E1 C8
|
||||
B9 FB A2 09 18 ED 54 0C BD 77 86 78 E2 56 9F 22
|
||||
9F EF F1 77 0C 6D 4A 7E 3E 6F E2 A2 16 C5 7E 3D
|
||||
69 2D D2 8E EB 37 A0 86 47 EC 98 E8 A5 BD F5 D5
|
||||
02 51 BE 84 5C 55 67 41 81 32 91 EE B8 D4 FC AE
|
||||
47 A8 7D 34 4B 22 F1 00 C6 BE 0D 55 0D 43 17 5A
|
||||
53 48 F1 41 68 63 FB AD 97 25 F6 22 2F CB 43 39
|
||||
1E E7 1E F1 DA 29 13 A3 6A C1 AA F9 0D FB 7B E0
|
||||
05 8D 86 A5 4F 57 63 18 6C 9B AA 9A 9A AD 61 77
|
||||
5D 63 DA 45 04 1B 22 C0 8F 7B A5 6A 2A 67 64 4E
|
||||
FB 12 3C 9E 21 2E 6B D4 0A D9 C7 11 47 DA 1F 7A
|
||||
2B 9D 4A AE 54 48 41 44 43 C8 BD C1 21 E0 27 FF
|
||||
50 6E D1 6D 11 00 52 7F 5C 03 3F FF C2 27 4C 4F
|
||||
56 7F 84 E3 42 40 48 71 F9 9E B6 DE DE DC E7 A9
|
||||
74 F8 50 46 F4 8B 07 10 B6 25 D9 F9 BB 8A 1F 13
|
||||
4D F6 1A 70 48 82 69 63 C6 E9 C4 61 1B 6A 26 D4
|
||||
38 9E 8E 78 81 69 C2 5D B5 1E 24 6A 83 88 D0 4B
|
||||
6C 87 7C 43 48 7F 5C DF 71 1E F8 61 AE 66 78 A1
|
||||
74 FF 2E B3 1E 84 C5 43 59 C0 D2 66 A3 C7 AB 0C
|
||||
2E FB 81 CE 44 80 A3 C7 2C AD 14 FE 1D 08 7D A1
|
||||
E8 60 96 08 95 E8 7B 17 46 21 49 15 F4 6F 86 B0
|
||||
80 4E C6 D5 F1 2D 63 05 1D 0F E3 FF 31 F6 BE 4D
|
||||
CF CD 17 71 57 EB C5 6A 33 0B 11 B2 E1 BB AE 7A
|
||||
C2 C6 7A 0E 07 E7 FD 9D FC 7E 7D E1 2C D7 50 19
|
||||
14 32 DF 12 CF 26 60 E9 A1 8B B8 02 91 FB C1 FE
|
||||
11 18 FA 09 A8 5A 75 AA E4 BF AB 91 50 5D CB 51
|
||||
08 7C EA D6 53 39 F1 BD 55 52 71 6F 6D 64 79 F9
|
||||
14 B2 85 36 01 21 E2 7E 15 E5 17 B8 E6 EA F8 37
|
||||
82 E0 A5 50 5B 84 48 E8 E2 35 A6 19 1C 88 9A 65
|
||||
23 1A 49 D2 1C C7 08 53 09 4E AA 01 93 6F 4F 0E
|
||||
C0 2A 3A 09 8E 97 C6 DC 3B F4 CF 57 30 48 79 1E
|
||||
CC 6E 82 7F C9 7D 9E 3A 1C E4 8A CD 71 0B A0 7B
|
||||
C7 B4 F0 EB 08 10 6C 21 9C 93 64 7D 19 F8 C9 17
|
||||
71 8E E5 2C 1B 9A E1 A7 E3 D1 5B 86 52 F6 FD 3B
|
||||
96 1E 52 34 93 2B AB A5 6D DC 89 78 BE 49 08 8C
|
||||
20 29 28 FA 23 31 EB 95 01 B6 A7 F4 3D 05 BE 5B
|
||||
CC 45 9D 14 71 6F D4 50 37 3C 98 E7 14 AE 2B 1E
|
||||
D7 A0 F6 6A F1 B6 C1 0F D1 BD 53 DA 57 EE 89 81
|
||||
4F AF CB 9D 1D CE 2C 28 CA E6 CB F5 59 4C 2D CB
|
||||
87 CA FA 35 E8 84 09 18 35 79 B1 CF BE A7 ED 5F
|
||||
36 0F 31 1F 60 6A 7A F3 A9 05 98 AB 26 E4 A2 1C
|
||||
93 44 69 4A F9 F5 88 C9 5A 18 AE EB 17 F8 F6 21
|
||||
27 43 B5 C1 F5 0C 04 6E 34 5C AC A6 54 12 DA 33
|
||||
DB 85 1B 7E 22 32 EE 91 95 3F C3 B4 0A 16 16 63
|
||||
78 17 78 BC B9 B6 5D F4 03 69 4B E3 40 6A 0E EC
|
||||
B5 2B 2D AE 16 EB FC 94 DE 0E B2 22 B2 BA 60 14
|
||||
A1 97 00 9D CF 9A 2F 83 41 8D 43 30 9B BF 8A 1C
|
||||
D2 27 D3 9E 9F 91 DE 7D DB 1E D7 B9 A2 B1 3D 05
|
||||
FF 74 5A 6E 03 BF 86 19 89 D6 D3 80 DD B3 9C 25
|
||||
CC 63 D3 C4 1B 46 0B 77 09 52 E4 0A C0 DC FF AC
|
||||
FF 7F 5F B4 E1 6C AA A5 81 B8 C6 EF 3F 20 8C 14
|
||||
6D AC AA C8 E0 93 88 F0 85 46 76 88 4E D1 17 99
|
||||
50 1B 8E 46 8B E7 73 5D 6E 96 F5 43 FC E9 37 30
|
||||
AF 30 53 79 6C ED 85 F0 DA D8 33 D7 D1 7F 0A 30
|
||||
AB 0B 91 3F 06 A4 BF 57 48 57 07 A2 52 5E 70 22
|
||||
F8 14 67 99 6F D0 9C D4 4B BA 82 4A 77 B5 D2 2E
|
||||
65 72 8A 56 32 1D 7A 17 D1 07 42 B5 1B 3E 82 42
|
||||
8F 92 EA 74 80 E8 AF DD D4 D9 9A 8F 10 31 FF 6D
|
||||
B0 45 F0 C5 37 08 67 05 84 F0 49 03 13 76 DC C5
|
||||
4F EE D1 69 49 6F E7 F7 0A 29 92 E8 99 19 33 8E
|
||||
18 9D 1D 0A 91 1A 43 22 A2 82 1F E5 D4 CA 11 AB
|
||||
63 10 27 3C 68 07 AF 0F 26 C2 5A AB DA AE 1C 9A
|
||||
74 92 FA CC B8 2C 46 E6 13 FB 2B B7 C6 3C F0 3F
|
||||
85 4F 51 78 03 CB A4 1D D1 A8 39 9A 09 33 83 5C
|
||||
04 70 17 39 C5 C4 DA 04 03 2C 5E 0B 50 39 D7 6D
|
||||
16 3B 4F 96 30 99 BC DD 03 4C D3 AE 09 57 3D 5B
|
||||
01 88 3D 3C 52 26 9C 20 CA A8 8F 03 02 60 4A 50
|
||||
25 33 B1 0E 8C F2 50 1E 12 AD 14 5D 7D CB 9C 81
|
||||
3B 9A C4 CD B5 E7 15 CB DB 51 AA 39 9B FA 25 7B
|
||||
B2 36 13 2F 27 15 8A 43 2D 64 18 C4 08 C8 D2 64
|
||||
0D 40 92 31 82 05 47 EE A3 24 9E 5E B0 14 CA 31
|
||||
49 3A EA 8C D6 77 D7 25 47 50 DB 8B F8 F4 50 73
|
||||
BB 4B CB 67 05 F3 94 60 C4 6E 90 8E EE F6 C1 EC
|
||||
9F 1D 1A EE EB 7B EB 1E 52 9E F0 DE 3F 8B 00 D2
|
||||
CB 85 36 68 23 29 29 51 00 EF 82 F8 20 BA 82 C2
|
||||
E6 B0 07 08 5F 73 0C 63 98 82 92 95 85 5B 47 0D
|
||||
0E 20 59 38 23 24 CB 24 59 DE 53 1A D5 D5 E1 66
|
||||
AB EF ED 70 E5 03 A3 B9 12 5C D8 83 87 F0 6F 7F
|
||||
81 81 C8 47 EE 08 40 29 ED D4 96 A6 67 5C 8A DF
|
||||
6C F5 20 95 F6 37 E6 D5 44 9A 01 73 D5 10 16 7A
|
||||
9F B4 F7 25 80 6F B9 E4 7A CF DF 1C CD 53 E8 8D
|
||||
08 46 63 32 CB 8D 93 2C 0F BC 34 A4 35 AE 07 C9
|
||||
58 B0 60 22 93 F7 2C 86 77 64 58 4E F0 1C AE 94
|
||||
2A B4 54 84 BB D6 F3 10 A5 27 1E B7 13 DC C3 D7
|
||||
D1 61 BC 32 54 FA 01 73 C1 1B EA 55 70 DF 50 9F
|
||||
02 0F EA 22 C1 16 E2 E1 D1 8C B6 91 71 B9 18 80
|
||||
4E C8 B3 82 9C A0 B4 58 1A 80 6F A8 A7 8D 98 95
|
||||
27 F0 7E D8 2F 3C 33 84 43 BD 50 16 49 B8 A9 36
|
||||
89 C6 1F ED 90 A7 4C 65 43 C4 A8 6F 83 95 CE 5D
|
||||
CF 9C B2 4B BB 76 D4 B0 C1 08 E4 B2 5B E8 F8 B6
|
||||
6F 47 48 1B 10 3A 35 FA 3F 7B D3 27 F8 B4 AA C0
|
||||
C5 B3 5F D5 C6 63 16 FF DC B3 79 A7 FE D4 21 11
|
||||
1A 70 E6 0B C3 4C 9D 58 A5 07 79 00 C2 36 C9 79
|
||||
A8 FD DD BC 80 4B 63 03 2D AE 43 9F 97 65 11 04
|
||||
40 CC D1 88 5C 0E C0 1A BE 83 57 99 12 62 79 E9
|
||||
B9 3C 8E DC B2 4B F2 BB 1E 46 FD D1 C2 E8 33 2A
|
||||
6E 5B F8 3A 44 B7 E8 10 D5 C7 BB DC C1 5B 3D A7
|
||||
54 A9 54 EC 68 90 B1 96 AA 03 FD E3 99 C9 8E 63
|
||||
61 CA 8A 27 A3 8A 86 A8 05 C4 7D E2 BA D3 95 80
|
||||
82 CD E0 69 D3 74 FE 4E E9 D0 FB 9F 8F 80 AB 7A
|
||||
8F 58 B9 0F E6 F5 3A 69 77 42 A8 2B F1 F3 16 5C
|
||||
10 C9 49 CB CD 64 A3 91 EB CA 47 8D 32 ED C9 EE
|
||||
99 AB 68 47 2F 8B A0 27 8E A1 88 54 2C 6F FA CE
|
||||
10 41 02 81 4D EF C2 05 72 6E 61 C9 CB DD 77 2F
|
||||
7A F0 2B 00 95 CA 55 4B 2E 25 39 0C 4F 6A 5B DF
|
||||
A0 5F EE 3E 97 67 FF 8A 3A 31 6F 6B 54 8B 71 8A
|
||||
16 42 9E 67 20 AA 04 7A 24 08 0C 97 B0 F3 B6 54
|
||||
1D 21 65 83 44 E1 FD FC 1D 44 2D F3 03 F4 9B 0D
|
||||
31 9B C2 0E 9D 77 15 88 D6 40 82 95 5B 05 36 55
|
||||
3B ED D0 77 B3 0B 25 70 74 28 11 76 91 0C 74 BA
|
||||
80 CF 1C F1 81 E6 E3 9D 45 68 2B D2 15 37 66 E6
|
||||
2F 4C 53 F1 36 AB 19 63 76 3C 42 E1 D9 49 FB A8
|
||||
01 22 EF 4D 24 12 42 5F 7C A1 87 20 8C A6 AD 2D
|
||||
31 F7 0F 3C 8B 27 62 0D 6D 6A 12 34 9E 60 BE 7D
|
||||
1E 7A 82 C3 FC D0 D7 76 DA D2 9C 30 47 3D 52 75
|
||||
9F ED A8 06 2C B5 51 7C FD 64 16 B4 66 21 DA 3F
|
||||
05 D7 DA 1E 03 19 49 9B 18 49 DE A1 72 F5 F1 00
|
||||
80 20 F8 7F AB 7D 98 6A 9F C2 01 90 83 61 F6 FA
|
||||
D1 4B B6 F4 E2 B7 77 D1 DB 22 CD B1 D1 1A 92 9F
|
||||
D7 21 12 A1 E0 F5 F6 6F E9 69 4E D7 85 A8 BE 94
|
||||
AD 0C 26 9A AC E2 A2 82 52 7C BB AC B0 FD D4 B9
|
||||
DF C8 43 F0 7E C8 3D B9 86 56 7C 78 9B 60 78 BF
|
||||
5B 02 D3 B2 8C 41 2F 56 D0 8E C0 AD A7 9A 72 38
|
||||
19 2F B8 15 22 4C B0 6D C5 CD F9 7C ED 8C 5C B5
|
||||
4E 5C 70 A1 0A C4 00 68 3D A7 B6 DA 2B 40 46 A4
|
||||
AF 2E E1 0F 19 8B 3D 7A CF 09 CC 05 EF 3D DE 36
|
||||
BA E3 97 08 9A 5B 41 F6 C6 41 CA 80 A7 17 7D C4
|
||||
66 FA FF 9C CB 1A AE DD 0E AE C3 43 FF 59 E5 B2
|
||||
85 5F B3 76 C4 A6 0B 28 27 97 C8 1C C0 E6 22 E0
|
||||
1C CC 6C E5 66 0F 04 E9 F9 F9 5B 33 4A 8A DD D8
|
||||
4A C3 8B 74 37 3E 5A 70 C9 00 4B 1D 6B F0 DA A2
|
||||
F2 3C 18 B8 96 75 F0 7D DF 7D 4A D7 AD 87 A0 2D
|
||||
ED 7A 75 71 73 32 D3 E3 2E 17 9D 7E 67 70 B3 1D
|
||||
77 A3 FD 1A 57 A0 F8 A6 B9 01 55 98 B4 14 BF 73
|
||||
0B 74 4B F0 C9 59 2A 1F 22 BE 85 E3 7C AE 71 46
|
||||
20 8E 6C 2D 05 D1 3B 2E 51 A9 1D 72 F9 70 A7 99
|
||||
7F AB F3 01 1A 7D 58 D8 6D 54 F9 1F 3C 5C 2B 8C
|
||||
61 84 A9 5D 6C 6C A9 C8 99 09 4E 3F 16 AB 11 E8
|
||||
E6 ED 16 9C 99 1A DC 45 3E 4E A2 AD C1 C7 DC 7D
|
||||
CE 1C 6B 26 4F 34 5E 39 63 F7 B0 0D D2 E2 E1 27
|
||||
67 4A 12 BF D4 27 7C 5B BC 4C CA 15 C0 39 8A 74
|
||||
4F D9 28 92 9B 67 35 0F 00 61 2D B1 5B 5E 23 02
|
||||
99 9D DA 4E 39 4E F3 87 06 78 B2 06 A4 53 6B 64
|
||||
B2 9C 3A 8D 2A 75 B1 F1 4D 8B F5 3A FD F9 89 EF
|
||||
85 DD 11 32 30 E3 21 8A 46 00 60 54 8E CA B2 E1
|
||||
5C 5C 71 3E A0 2E 18 F5 7E 02 D5 AE 05 F0 31 25
|
||||
C1 8E F9 9D 05 81 B5 C8 37 00 27 82 3D 35 60 95
|
||||
D4 15 BE 9A 2A C5 D4 B5 EA 29 4C C9 B1 39 D7 F0
|
||||
35 A8 35 37 5B B7 9B 0C 4E 1C 4E F9 E7 18 02 D0
|
||||
07 3B 51 66 35 9C 5A A8 49 1C B7 1F 8E 0D 06 8A
|
||||
50 95 25 2F 14 39 84 E8 11 58 F8 12 B2 CF 5C DC
|
||||
29 D8 52 A0 9D 3E 41 1A E9 18 81 7E B5 F1 E3 0F
|
||||
7E 15 D4 45 7B E8 F9 08 24 8E 99 66 D1 63 5A DE
|
||||
2B 5E 7E 0E 70 B8 8C AE 43 65 BF 9C 45 4C 65 0C
|
||||
E0 B5 DF 00 0E 24 F2 57 9B 07 C2 EB 11 52 15 BE
|
||||
21 5F 31 2E 12 0E 1D BA 7F 4A 13 0C B8 DB D7 B1
|
||||
3A A9 02 42 99 23 67 6E 1E F7 15 53 33 3D 2D 1B
|
||||
3E CB 46 9D 35 2B DE 6D BF 27 55 8A 01 D4 2B 45
|
||||
10 02 EA 13 07 5B AC 9B AB 31 63 9C 8B B1 BE 78
|
||||
86 D1 D0 84 E5 B2 84 A5 45 EE 6E D6 41 D0 93 8B
|
||||
98 93 10 D4 10 8B 31 B5 24 E5 E4 DB DF BC 33 B2
|
||||
76 B9 56 FA 5D 45 04 5C 47 08 C0 19 86 11 88 5F
|
||||
D5 A4 54 F2 6F D0 89 62 D8 57 5C 33 5E 62 97 B6
|
||||
9D CF 96 3B 8B 85 CD 63 C2 53 9A CC E1 F9 89 85
|
||||
11 DA F3 F6 C2 3D 2E 52 E3 F8 9D 33 A5 93 62 31
|
||||
98 92 B7 95 70 82 A9 93 65 21 5B 8B 52 99 93 1D
|
||||
2E A1 AB 19 EA 08 C8 A2 BE A3 78 95 4A 20 7A 00
|
||||
D8 DF B6 CD 20 75 3E 8F 58 CA E4 0C B9 85 53 51
|
||||
67 2F 55 F8 C7 5F 58 C1 FB B7 9C 11 7E 66 2E 50
|
||||
1D 8A D0 84 0A 2F CD E6 11 61 99 ED BD 67 53 B3
|
||||
A3 33 3C 34 2E 57 E1 AE 24 F6 8F 70 48 69 2B 15
|
||||
30 DB EA E8 E5 B6 BD 6C E5 C0 C8 13 9E 66 D0 87
|
||||
11 7D A7 88 E4 29 09 2F 98 A5 4A FD 37 54 C4 1C
|
||||
37 1D B5 5B B7 F1 61 62 4C E3 51 12 D4 87 F5 9A
|
||||
9C 08 07 95 01 42 76 C1 96 67 99 DC 04 DA 80 0C
|
||||
F3 1C C0 7E 49 09 E6 BA 85 AF BA D9 88 D6 10 31
|
||||
C9 3D 6C EB 39 C3 56 78 AE 9F 1A 08 B9 4E AD 36
|
||||
93 31 F0 5D 3E 38 1D EF 79 FC 59 15 6B 11 DE 32
|
||||
19 59 18 65 14 63 94 D6 6D DA A0 C7 DF 07 47 FB
|
||||
F8 9D 15 A0 EE 17 EB 47 FC F5 F1 F7 39 F9 92 2A
|
||||
B1 8E A7 04 1A B8 02 43 1F 0D 52 AB A9 EE 1C F7
|
||||
08 A5 33 49 10 99 60 A6 70 B3 D1 16 02 25 21 36
|
||||
D7 FC 94 69 DA F1 C8 28 14 2F C0 EE E2 3B 16 54
|
||||
7D 81 8A 5B 5B 82 43 65 63 9A 9A 22 2F C1 23 59
|
||||
E7 AD B1 89 F4 F0 A2 8C 7A 8A C9 94 53 34 C9 16
|
||||
41 98 9E 17 8F 60 FC 37 71 DC 8A C0 2C 59 56 84
|
||||
94 47 D1 9F D9 37 18 55 FB 8B E2 C3 EC 05 44 D0
|
||||
CB 51 A8 B9 E2 3C 25 92 57 4E 04 7C 8E D0 8E 23
|
||||
F9 24 9E EE C0 97 2B 33 32 18 F8 AA D3 82 1F A2
|
||||
D8 71 8B DB B0 A2 42 0F 0B 50 B4 F8 0B CE 9E EF
|
||||
70 7D 55 94 97 86 AF C4 47 18 3C 8C 0F F3 33 D0
|
||||
D6 52 F0 0B F8 F2 7D 67 C5 20 9C 06 68 45 8D E0
|
||||
50 C9 EA 68 FA 0F 81 80 ED 57 95 B2 A2 C4 B6 15
|
||||
72 6D 2D 19 35 66 14 DE 42 25 71 64 2A F1 B0 EE
|
||||
CE 0E 05 E7 B1 BF 8A 09 A3 B8 C8 85 35 62 2F E9
|
||||
91 A7 44 F0 5C D0 A3 77 45 8A D0 CE 83 CF 7C E4
|
||||
98 25 56 F1 F0 6C AD 70 25 0F C5 E2 6B F2 84 16
|
||||
D1 66 2C 80 4B A5 1D 3E 5D 37 5A AA B1 6A 31 3B
|
||||
A8 C2 8E 51 66 BB 47 52 A1 B9 C3 5F AD E9 DC F0
|
||||
EA ED 96 69 5D 9D 8B C3 8A 2D 78 BE 3C C1 68 D4
|
||||
07 71 49 5D C9 EE 1B 7E BB 06 FD E2 7C 7D 06 97
|
||||
8F 24 4E E6 61 A8 84 73 A2 A3 3D 05 DA 8B 2D FE
|
||||
B5 AC DB B7 1C 76 2A 77 10 20 28 D0 DC 87 EB 11
|
||||
0B 9A C3 E8 32 B8 4E 96 0E 2C 3A F3 07 6E C5 36
|
||||
C4 E9 81 94 EC B7 80 28 5E 7C 7B 4D AD C4 36 F3
|
||||
08 40 A2 F0 C9 E4 B2 87 0A CE FE 15 8C D1 61 A2
|
||||
A0 4C 97 10 0C 45 94 2A D4 32 66 62 A2 75 F4 09
|
||||
FB 69 97 50 CC B0 2B 0E 70 2F BE F8 0D 18 C2 53
|
||||
39 81 1D AF A4 15 24 06 93 20 2A 8F 6C 65 D7 44
|
||||
E9 8A 96 EE 6A E3 38 2D AF DC BA D5 DF 89 0D 8C
|
||||
CE 10 3D 95 A5 CB 5D A8 BA F6 91 90 4F 5F C7 DB
|
||||
8B 73 7C 2D D8 17 3D 33 87 1C FF BB 7E C2 E6 AD
|
||||
BB 1A 88 92 DC A8 54 B2 B0 DE F7 A5 06 6F 66 39
|
||||
50 44 3E D6 63 92 B3 4F BD D5 3E 7E 7E 1B 2A 26
|
||||
F4 99 85 AD CA 82 B3 58 F2 63 45 1D EA 65 9C 04
|
||||
8D BD 89 42 D9 F9 FD 01 D2 7E D2 83 F3 0A B2 AD
|
||||
91 14 A6 70 92 E2 94 BC EB 3B 64 04 74 0B F6 F1
|
||||
AD 9E 93 29 98 B7 F6 46 49 26 FB 09 5A CB 7A B8
|
||||
E7 64 56 99 20 D3 86 74 4B C7 03 9C 01 D9 68 AF
|
||||
1C 9B C3 77 6C 3E 17 08 3B 70 1E 36 D8 A2 32 0F
|
||||
78 C5 28 6E D5 7A 43 F9 8F 6D 17 1B 8A D9 49 A1
|
||||
23 0E 44 CC CE F8 01 46 5E 3A C3 B0 EA 78 FD 02
|
||||
D3 9D AB E4 42 1C 3C 27 18 64 89 02 65 9C B8 42
|
||||
87 58 E2 08 34 AD 2D 23 30 E4 AB 18 0D 07 FF 88
|
||||
D5 BC 86 DE C0 B6 5C 31 0D 96 8D 71 C0 7F 8E 53
|
||||
94 26 5A 83 6C 66 84 2F 89 43 F2 E1 B0 1A 61 A6
|
||||
76 AD 20 0A 34 2C B8 A8 F8 7D 84 BB DB 4E 2D 18
|
||||
F4 54 09 F3 04 2D 66 6E BB B5 4C D8 11 7B 2B 05
|
||||
CD 58 1F 10 51 E1 21 A3 30 2F 0B E8 BF 89 66 F3
|
||||
42 D1 1C 9D 99 20 40 B0 1D 62 DB C9 F4 61 D5 FA
|
||||
C7 D6 F0 8B 78 8E DE 10 8D 37 C5 4A A7 2F A7 30
|
||||
32 86 C6 82 9D 2C DA 56 C3 CC 6E 79 6A B9 F1 C9
|
||||
53 38 2F CE 4C 6C EA 08 D5 11 2D 7E 99 B8 A9 F0
|
||||
60 0C 17 C1 64 EE A7 EE 17 B5 44 77 0E 76 80 80
|
||||
E5 1D FA F7 ED 84 DE 54 2C 2F BE 76 95 53 B9 2B
|
||||
6A 6E 94 02 2D 05 58 50 A6 64 C5 E5 E4 6D 19 A7
|
||||
37 65 72 E4 45 CD 33 5D ED 0F 7B F6 1B 86 67 48
|
||||
AE 08 F5 39 90 44 2E 8A 6C 4E 60 9B 2B 23 25 89
|
||||
D8 E3 A1 B1 DA 56 FB 8A 9A AB 83 9B 00 F2 49 0E
|
||||
90 5B 5B F7 44 7D FF 05 27 55 EA AB 0B E9 E2 F8
|
||||
47 5B B5 B7 18 37 7A A0 4F 37 BB 2D 8A 0D FD 2E
|
||||
E6 88 27 13 31 4D 8E 83 03 22 50 1E 6D 06 12 AE
|
||||
65 01 55 87 16 F0 AA 0C D0 FC A9 F3 BD 56 10 E2
|
||||
76 E8 B3 5D AA C5 05 AC 4B 01 72 D8 4F 00 4F 41
|
||||
5C 62 DF 05 BD 2C 29 49 7E 1C 95 9B 64 14 97 43
|
||||
0F 4B 62 72 49 9C 90 58 41 B8 C2 10 7A 7F BF BA
|
||||
FF 88 F9 52 87 5E 3C 37 8F D1 61 EA E0 B9 7F 9C
|
||||
D5 83 60 7D BE 2B CE 1D D0 2C 10 6B 92 DD E1 98
|
||||
6A 1A B3 F9 0E C1 5F E1 3B F3 20 D3 8C 9D EB 00
|
||||
55 2B 53 DB C2 4D 59 41 F8 38 8F 75 6D 02 05 14
|
||||
70 E5 77 90 A7 5B 1B D1 30 E7 50 BF 57 82 3E 12
|
||||
40 38 9F 6C 93 03 1A 4D 7F 97 58 44 C1 83 EF B7
|
||||
8F 34 BD 60 E8 E4 3C 5D 52 D3 3D 36 7F A1 89 F7
|
||||
9A 1E 6C 2A DD 3A 6F EB 74 76 E1 3E 57 5D A2 5D
|
||||
05 41 3F 90 4C 30 5C A1 6A 7A 76 01 98 65 2E B6
|
||||
78 BD F0 21 63 CF 3B 98 64 8F 5A 55 12 77 6E 13
|
||||
71 50 7C 28 D2 B6 00 90 90 8A DA F4 58 19 D3 7F
|
||||
95 45 37 DC 7B 8A 87 C6 6F 7E DB 2B 12 BD 3F 75
|
||||
E4 43 DD FB 30 9D 9D 70 62 6C 39 EE 04 56 D0 46
|
||||
89 39 BA 70 46 B2 5C 0C 44 43 A7 D0 6C 09 3B 22
|
||||
5B 4E CB E4 C7 50 1D 7E 91 AE 6F 2A 67 7A A0 A5
|
||||
99 25 58 08 EF 60 D7 6F AD 0B 4F E6 71 12 5D 23
|
||||
41 40 EC DF C3 BA 50 C8 E3 B1 80 E3 16 A0 41 5C
|
||||
87 8E 1E 20 1C 86 49 07 D7 C2 61 40 F3 9E 09 FF
|
||||
CE 13 A2 3A F2 21 0D 64 AE 36 BA D1 4F 8E 6C EE
|
||||
22 37 AF CE 4C 94 4C 97 69 33 B9 19 FB 20 AB DF
|
||||
84 E7 A7 1B 95 56 DE 6E 97 A3 17 FE E5 05 12 ED
|
||||
38 A9 D8 FC 5F 97 5C E6 4E 9C B1 B6 5D 6B E7 07
|
||||
1B 88 F7 81 F6 87 23 98 A7 62 9B AF 75 E9 93 3D
|
||||
37 94 11 A9 4F 72 4D 5A 81 C7 05 A9 FD FC DF 5A
|
||||
CD C6 CF A3 9F BE 78 81 C1 F3 BC F5 98 5A EB FD
|
||||
54 68 89 8E 50 6B C9 4D 70 FE 38 4F AB A6 43 15
|
||||
21 E6 F5 3D 8F FD 3B 02 61 73 4B 63 DE F9 D6 E8
|
||||
18 17 E8 E6 85 13 75 B8 BE 97 D2 AA 09 B4 49 7D
|
||||
BD 94 B4 E4 6D 76 3C 94 98 B0 D3 29 24 DF 11 70
|
||||
43 C7 17 DB F7 B7 BA CE 01 59 8B 32 FB C9 E8 34
|
||||
8B D6 9A 7D 64 E1 B6 C8 47 51 BB 32 51 9D 22 E5
|
||||
98 11 6A B3 DA 9C CC A8 E8 D3 82 53 4C BF 06 5A
|
||||
DD 51 C1 88 96 1A E0 AF 3B FB 2F 05 52 6F 74 1D
|
||||
EF 04 FB C5 53 1C 36 80 80 60 7E 43 77 42 EF EB
|
||||
4A 58 20 A0 D6 E9 8A 5E B4 B0 35 31 3F 17 18 E8
|
||||
87 F0 7D 9D 84 9B D7 97 73 23 4C 27 3A 47 9C 92
|
||||
CB 9F D6 28 B5 8A 5E 5A 3C F1 67 64 23 C9 3F A5
|
||||
3E 1B 6A 08 23 13 61 52 83 E6 1E 2C B3 99 D0 EE
|
||||
6D 06 37 2D 3D 71 BE 09 E1 74 97 68 3D D5 F0 C7
|
||||
BB 90 04 05 5F 0D A2 2B D3 0A 0E 0B 75 AC A9 75
|
||||
87 B1 74 D9 7E 3F 4B F8 38 30 95 EC 12 5D DC ED
|
||||
A9 DC 23 B4 04 52 54 D6 93 44 86 56 E0 3A 13 63
|
||||
E5 3A E8 B7 DA 3F 4D 2E 75 9A 71 F2 34 FC 69 02
|
||||
4E 57 59 9B BE 35 EF BA AC AB 0A 6B 89 C1 64 8A
|
||||
D4 21 38 D9 16 8B E1 C5 8D 27 84 D9 E7 06 CE CA
|
||||
04 38 88 7B 57 10 A8 90 26 39 B0 62 5C 46 0F 2C
|
||||
7F 57 05 F8 B2 D5 90 88 F9 62 25 06 7F D5 1C FE
|
||||
3A C1 11 65 8D C3 D6 46 4C 73 47 87 55 BD 3F 67
|
||||
72 E6 0C F1 0E FC FF 8C 20 CC 8F 66 62 1C E0 C5
|
||||
41 71 91 75 B0 D6 DC BA C6 0E 88 D7 17 B3 B1 C5
|
||||
B0 13 CB F8 EE AB 46 39 4E 17 0B EE 9E 9C D7 A1
|
||||
F4 26 3B 86 BF 3B 57 CE F7 D7 2D DE 18 F3 0C 2E
|
||||
69 44 A5 EA F6 53 50 87 FA 56 DF AA 64 0B B0 8B
|
||||
42 E9 5B D0 60 7C 75 B9 44 C1 A2 AA 94 89 80 3A
|
||||
76 80 51 21 FB E7 2B 4D A2 98 5B D2 A2 DD 83 6B
|
||||
40 DD A4 D9 FB 8E FF C7 C9 C3 3C 42 69 BD 60 18
|
||||
1F 13 61 D5 21 F1 0A 73 5A 74 DB 8B 38 92 DD 1F
|
||||
4F 45 1E A8 71 34 3D 4F 44 F9 B3 40 16 C0 B7 9F
|
||||
B7 9B CA D2 6C E6 51 3A 61 57 AA 88 04 08 CA 38
|
||||
F1 33 5A 21 57 EF 63 50 D3 E6 12 6C F3 DF AC 5A
|
||||
3F F4 71 83 D8 F7 1C 4A 4A 24 5A 7D F7 54 35 53
|
||||
5C 77 7D C0 72 6E 3A 49 22 B7 F5 08 0E 53 8C 76
|
||||
0E E2 7A 49 D9 97 5F 4F 66 B2 B9 0E 93 9D 44 92
|
||||
38 01 D8 F5 15 AA E8 55 18 26 38 6D B4 DF 11 90
|
||||
72 FB D3 98 48 5A 25 EC 74 46 11 14 73 52 95 51
|
||||
41 46 72 A7 24 7D 4B 5B CA 5F 48 D8 79 42 9C 94
|
||||
B8 30 3F 35 B2 A5 6E C0 96 04 71 86 4C 36 05 F8
|
||||
EF EF 3B 8C A4 8D 7B 85 FE 09 5F 47 0E 11 4B 12
|
||||
DC A4 46 2D C3 AE 1C 93 E1 38 52 BC 9E C2 17 9E
|
||||
B0 B6 71 ED 6F ED BD D3 0B 49 7D 41 20 C1 67 3A
|
||||
53 45 62 14 C6 DE DD F4 D6 32 D5 8E 9A B2 27 21
|
||||
38 73 58 A8 4B 1C C0 D7 F9 32 EC 7F 5C B3 C9 61
|
||||
CC 1B 05 F3 33 E2 EB CE 9E 37 33 7D 11 B5 4C B4
|
||||
AC 51 32 A1 52 88 CE 90 BA 50 CF 33 88 99 F5 B5
|
||||
66 B1 EB 60 37 AE AB A0 08 98 41 AB 5F 26 82 06
|
||||
09 3E 70 8F 99 FF ED F2 8C D0 42 C1 30 B0 92 B1
|
||||
55 63 26 44 7D 84 3A 23 78 A6 DD 22 5E 8E 38 5C
|
||||
DA AE 81 D0 CD AB D4 BD 0B 50 AC 0F AE 10 BD 49
|
||||
9E 7C 1F FE 25 D6 00 77 51 2F 44 61 59 AE C8 08
|
||||
A8 3B B4 D3 C8 20 A1 88 2F C5 46 24 C7 A4 35 FF
|
||||
BF 64 27 1E 2A 85 16 7A A8 E5 1F 51 69 E4 AA 58
|
||||
A1 7D 03 F4 EA 99 1D 2A EC 22 7D B6 F5 38 46 6B
|
||||
E7 95 40 3A 62 04 47 BE EE 0D BB F8 14 7E 86 3E
|
||||
CB 30 9A 08 93 48 C1 E0 83 A6 54 9A BB 42 BC 29
|
||||
7F 13 2E 06 5E CC 59 37 02 CC 19 8E 40 2A E5 5A
|
||||
A6 64 78 C4 AB 6F CF E3 6D 0D F7 FB E8 56 9D B5
|
||||
7E C3 AF EA 2D F1 D9 93 50 DB 0D 86 06 90 3F 73
|
||||
C7 30 B8 28 25 B0 F3 F6 6E D8 61 4E 22 60 2C 12
|
||||
E9 19 6D 1A 66 9A AB 2D E9 24 92 7F 75 E4 8F EC
|
||||
80 9A F5 E6 2C F9 CB DE 92 80 4D 65 B2 AF 4D 72
|
||||
CA B6 FD 07 6C B4 54 06 A4 EF 8F CC BA 8F 25 81
|
||||
3A 82 4B 26 A4 87 70 18 74 E4 81 79 A7 7C 67 40
|
||||
* End 3510841990 1114471188
|
||||
@ -1,18 +0,0 @@
|
||||
Version 4
|
||||
SymbolType BLOCK
|
||||
LINE Normal 64 0 8 0
|
||||
LINE Normal -8 16 -8 -16
|
||||
LINE Normal 8 16 8 -16
|
||||
LINE Normal -8 0 -64 0
|
||||
WINDOW 3 0 33 Center 2
|
||||
WINDOW 38 0 -33 Center 2
|
||||
SYMATTR Value Temperature=25
|
||||
SYMATTR SpiceModel MMASU32MAB7106_PNA01
|
||||
SYMATTR Prefix X
|
||||
SYMATTR ModelFile MMASU32MAB7106_PNA01_LT.cir
|
||||
PIN -64 0 NONE 8
|
||||
PINATTR PinName Port1
|
||||
PINATTR SpiceOrder 1
|
||||
PIN 64 0 NONE 8
|
||||
PINATTR PinName Port2
|
||||
PINATTR SpiceOrder 2
|
||||
@ -1,701 +0,0 @@
|
||||
* LTspice Encrypted File
|
||||
*
|
||||
* This encrypted file has been supplied by a 3rd
|
||||
* party vendor that does not wish to publicize
|
||||
* the technology used to implement this library.
|
||||
*
|
||||
* Permission is granted to use this file for
|
||||
* simulations but not to reverse engineer its
|
||||
* contents.
|
||||
*
|
||||
* MMASU32MAB7106_PNA01 LTspice Model ( Temperature / DC Bias Model )
|
||||
*--------------------------------------------------------------------------------------------------------
|
||||
* Model Generated by TAIYO YUDEN Corporation (https://www.yuden.co.jp/en/)
|
||||
* Version 3.0
|
||||
* TAIYO YUDEN Control No. 250905
|
||||
* Copyright(c) 2021 TAIYO YUDEN CO.,LTD. All Rights Reserved.
|
||||
*--------------------------------------------------------------------------------------------------------
|
||||
* Product Description (link to TY-COMPAS)
|
||||
* https://ds.yuden.co.jp/TYCOMPAS/or/detail?pn=MMASU32MAB7106KPNA01&u=M
|
||||
*--------------------------------------------------------------------------------------------------------
|
||||
*
|
||||
* Begin:
|
||||
1E FD 14 DB 52 AE 58 6A 2E 81 BB EB 90 C3 0B 2A
|
||||
41 F4 3F AB F8 54 DD 0D 1E 08 9B 9B 3B 9B 47 A7
|
||||
EC B5 42 B7 92 B1 22 50 FC 89 DD 35 F1 E7 B8 26
|
||||
F0 C3 6C 8D A8 FB AC FD EA B2 BF 0A 8E 42 06 33
|
||||
EE F3 B3 AE 40 5F 78 0B 48 12 2D 03 C2 66 80 EE
|
||||
D0 C4 83 02 D6 2D C0 CD 42 D7 66 53 C4 6B 17 0E
|
||||
30 FF 6B 2E 99 B6 D5 BF 3E F8 CD 11 4C 08 95 08
|
||||
75 00 04 36 B3 0D E7 0D D2 01 DA E3 F9 C5 AE A6
|
||||
35 9E 29 2A AA C6 D2 7B 1D E5 F1 28 60 3B 6F 46
|
||||
40 EF 64 B4 BF 18 72 32 E2 01 BF F0 7A C5 9C 57
|
||||
2C A9 FD 41 74 D0 6F FF 04 51 05 E2 8D 82 6C 33
|
||||
78 00 EB AD BF 95 8E FB 21 36 58 B9 35 3B 96 BF
|
||||
ED 02 28 86 6A 48 BF FE AD 7B 35 A1 70 06 C5 3F
|
||||
A7 0A 91 D2 9F 0F 30 D3 37 30 95 7A C9 9F 3A 7F
|
||||
28 DA 99 AB 2C 9F B9 FA C7 93 DB 2B C4 DB 4A 68
|
||||
CC 1E 36 94 4E 85 03 8A 48 F9 EB C1 CC 7D CF B9
|
||||
76 73 49 23 2B EE E8 A1 92 DD 09 03 7C 02 45 4C
|
||||
FF F9 7C 8E 51 9A 06 FC BF 2F A3 9C 84 25 09 D4
|
||||
0A 0D 6F B6 82 05 2B 3E 6E 22 30 92 BC 83 2A 69
|
||||
13 6B 78 1F 44 13 C0 F4 5B 45 87 B6 92 FC 0C E2
|
||||
7B 0D 4B 2D E5 B0 57 CF 65 A5 78 92 52 3B 80 D3
|
||||
FD A3 F8 87 53 7A 7C 39 54 C4 EA 63 B1 8C 00 6C
|
||||
5B 17 87 98 56 93 18 62 86 1A 18 98 9F 28 B8 9D
|
||||
CB 9E B7 1E 81 74 D4 21 62 18 7F EF C5 3D 4F AB
|
||||
95 D5 91 E7 34 9A 17 11 B6 FD A2 D8 4A 9C 8B 2D
|
||||
3C 50 23 4C 2B 55 2D 7F 1C D9 99 F6 B0 13 80 A5
|
||||
81 F0 D7 45 0F 42 0B AA EB 31 97 22 8B 3A B0 E2
|
||||
E9 35 6A 14 02 CE FB EF 41 EF 30 A1 5F 7B E9 27
|
||||
B0 4C FE 8F D5 56 CE 66 51 0F A8 8A 4C 60 99 EB
|
||||
94 F8 B1 A1 66 4C DC 52 E2 72 F5 05 14 68 51 74
|
||||
EF 33 5A C1 0B E5 5A 7E 0F 33 00 E8 C2 69 3C CA
|
||||
FE 4F C2 27 15 15 81 9D 5E 2B 51 04 E7 7E 8B 55
|
||||
F5 DB 50 52 AC 74 DD 28 DB B4 33 EB 09 E4 35 C1
|
||||
76 84 36 84 A5 1B E2 B2 CB 64 16 6F E8 45 42 7C
|
||||
47 FA 21 7E EE 71 C1 68 58 BF 39 D4 8E F7 14 F3
|
||||
43 E4 34 86 E3 CB 7D 61 9D AD 08 26 2C DF 28 AE
|
||||
9D 49 32 33 13 03 00 AE C7 40 94 84 9F 70 15 4B
|
||||
31 14 29 ED BB E9 AF 95 45 0E EF 4F 3F 42 2A A4
|
||||
E0 43 AA 70 B8 40 90 3B F7 44 52 EF B6 DF C4 1E
|
||||
8A 4B F9 72 04 13 06 81 6D 04 FD BB EB FE 60 37
|
||||
A9 03 6D 93 36 9A 71 C4 B7 9F 43 59 EF DF 21 D2
|
||||
82 49 4E FC 72 79 27 36 EA 27 0F F1 9C 2A 7A 97
|
||||
D1 C5 B1 D4 AB DD 81 8B CE 1C E4 E1 54 AF 7E 9C
|
||||
BE 14 0C B0 79 48 AA 83 C6 54 D8 22 B0 A1 9C B7
|
||||
E8 31 16 80 C8 1C F0 B2 73 14 EE 36 6E 6F F3 46
|
||||
4C 2C 0D AB B7 7F 5C 70 6B D1 B9 0C E3 83 9D B0
|
||||
9E 79 D1 7A D2 39 B5 A1 60 48 0E EE F9 1E 4E EE
|
||||
88 55 53 F9 CE BF 60 60 CA 02 E6 6E 8A CF 73 30
|
||||
5F 1E 69 1F 3E 67 7C 18 5D 5F 38 C2 63 CB 98 3D
|
||||
AC 08 BE 7D B8 3B B4 6C 9B B6 DD DF 40 52 E4 A8
|
||||
0A 68 8A E0 09 E7 EF 81 05 52 05 DF 8C 0C 17 8B
|
||||
B0 A2 AD 59 42 6A 0F 72 27 CB 14 DA AD EB 94 E8
|
||||
10 2B BB 92 41 E8 5F 27 69 59 61 BE 30 B0 33 2C
|
||||
13 33 95 ED AE 73 6D 47 20 80 E3 C3 3A F3 FE 9E
|
||||
7F B8 FB BF 93 60 A0 9E 47 CD 1E DE 68 93 F0 C4
|
||||
CD EA E9 88 B0 52 57 79 37 DF 02 93 8A D3 A5 76
|
||||
03 DB BB 13 81 D7 DF 57 C8 A3 D5 D7 F4 64 8D DC
|
||||
2D 65 00 87 78 BE 95 B3 C3 5D 20 58 E7 F8 91 2D
|
||||
A1 3D 03 30 28 F0 81 54 2E DD F0 FE AC A6 88 A4
|
||||
0A DA BE 9F B4 71 A2 9C 94 7C AA C2 A4 4E 66 9C
|
||||
1F 58 8A 43 CF 2B 3B 16 DD 0F D7 93 11 E4 0E 28
|
||||
31 2F 6F 1A 96 C2 08 B0 E5 93 16 11 A2 E4 97 55
|
||||
D5 F2 D4 9C F4 6E 78 77 98 46 09 03 76 2C 49 2D
|
||||
77 CE 17 D6 17 27 18 4A 53 FA 4E C7 BA 56 42 93
|
||||
01 CD A5 B0 7F B7 6C 60 0E FE 84 86 DD 0B F0 D0
|
||||
10 A6 DF 53 7A 78 31 B4 99 1B 2B E4 FB 36 41 9D
|
||||
04 C0 12 41 F1 81 E6 B0 33 0B 2D 70 0F 04 17 37
|
||||
78 79 23 52 DF AB 20 91 D6 2D D1 6C FC 1F 48 CA
|
||||
E9 23 6C 22 76 9E 0F 78 2C D6 FE 31 58 DC 3E 3D
|
||||
78 0B 92 91 2E F0 06 CA A4 2D B5 C5 95 46 AB 18
|
||||
B1 6B BC 7E DB 70 49 39 6F 0A 0A 3C A5 E2 28 B8
|
||||
8A A2 8D D8 E5 F5 35 CB D3 97 65 3D 4E FC E0 41
|
||||
44 E3 88 BC 72 F6 A6 76 69 F3 67 DF B1 EC CF 7D
|
||||
AC E6 2C D4 41 51 B9 CB 15 B5 BB B5 04 81 35 3D
|
||||
30 7E 61 30 29 1E 4D 41 91 56 B8 35 8F D5 04 2E
|
||||
1D 18 6B C7 5A 6B D6 C9 28 FF 7D 8B EF 3C 17 98
|
||||
8D 26 35 DB 1C 9F 7E D6 76 A7 B0 6A 27 B1 1A 07
|
||||
48 9E 99 56 47 4B 91 32 B5 DB 75 27 65 99 26 B6
|
||||
F6 BD 98 7E 41 1D 88 B6 D7 DC 1D D0 0C F6 4E A8
|
||||
8C 50 84 5B 5D 21 26 0D CB A1 E8 25 82 ED 91 BE
|
||||
8C E2 96 BD B1 25 11 0C 4A 04 8A 6D 3C F6 FE CD
|
||||
B7 BA 45 6B 66 46 80 57 E8 1F 0A 95 67 3C 67 E3
|
||||
4E 49 13 40 07 5C CD F0 A3 5F EF FB 07 38 75 0C
|
||||
D3 A2 FA 31 C7 15 DE 56 96 55 3B 67 1E 89 75 BF
|
||||
C6 AB D4 51 2B 96 85 70 9C 22 25 62 11 D2 1E FF
|
||||
C9 04 5A DC 97 47 42 7B 8A 9A 85 FE EC C5 1A 7D
|
||||
85 AA 05 6C 51 47 AE 61 91 AB 9E 5A CE DB 69 FC
|
||||
45 35 8B BD 89 EC 5B 62 6D D9 A0 AB 5B 96 FC 40
|
||||
43 6E 46 8A 7A 94 92 14 4A A5 E6 E9 26 6B B6 58
|
||||
17 59 A4 3B 8F C0 E9 9A 4A C7 DF 57 57 33 90 52
|
||||
B4 9E 9E 0D 91 B8 91 DB EA 89 68 78 A5 CC 61 F9
|
||||
A9 EB 10 94 B0 0F 5B 08 A9 46 BE 55 62 10 2E E2
|
||||
76 85 CD 09 92 40 42 C0 33 4B 28 48 4F 25 0A C3
|
||||
B2 3D 53 0B 32 DB 1E AD 79 74 A9 E4 32 9B DD 51
|
||||
0B 9B 7D FA CC B4 02 C8 1D E7 9F 2C 1C E4 B0 F2
|
||||
54 28 72 23 F1 74 D6 59 12 6C 1F F8 47 3D 24 4F
|
||||
8C 05 95 F7 CE EB B1 0F 15 76 74 07 93 6C 24 3A
|
||||
E0 F8 D4 B6 99 D3 B1 89 13 07 26 63 74 9F 17 B4
|
||||
E7 5D 46 69 3F F5 45 07 F8 1F 53 87 1A A0 0C A3
|
||||
10 07 5C 39 5B C0 5D C8 C6 17 C7 48 3E DC 2B 0C
|
||||
DA 67 7B 56 34 F4 7E 00 92 34 10 2C 5A 83 FB C0
|
||||
71 F0 91 16 BA D6 BD 9A 8A 70 63 30 30 28 D6 EC
|
||||
EB E7 56 92 A1 2A 08 20 B2 02 A0 44 05 AA 7D 70
|
||||
7E DE 8E 49 0D 08 10 87 77 5F C3 7A DD 94 4C D4
|
||||
13 4D 3E F3 B3 48 CC D0 C9 4C 97 C9 B1 AD 23 B7
|
||||
B0 92 4C 1F 1F BB C7 CF 1C D5 34 39 25 C8 AC EF
|
||||
D6 F4 24 7F 3A C9 74 B1 65 5C EC F5 5C 4F 9A 6B
|
||||
18 98 11 6F 1C 9D 3F D0 0B 2A 0E 84 74 96 3C 47
|
||||
B6 EF D4 8E D3 27 1F 7E 9F 2D DC 95 9F A9 0D 17
|
||||
EA E0 0F 99 82 02 E6 66 37 03 69 6B 91 30 41 FB
|
||||
C6 1B 06 51 39 8B DE EF 36 56 58 9A 5C 00 0D 08
|
||||
60 1D 7E 7B 38 67 4A B5 4D 0D 98 FE F8 A1 BD 04
|
||||
E5 4B 92 F8 C6 1E 69 4B 91 7A F2 75 8E 0C AB 7A
|
||||
30 63 92 B2 B2 2C 72 A2 E5 05 FB B4 4F 81 1C 2F
|
||||
EA AC D2 2F C6 D9 31 3E BD D2 3E D7 BE 83 31 F6
|
||||
C0 97 FE 72 D9 8C 6C BC 51 27 06 CA 7A 1E F4 55
|
||||
34 5F E3 5E BF C8 85 B9 CB E3 0D F9 96 DF C9 76
|
||||
39 81 26 3A BE 47 80 AD D0 B4 45 75 D8 EC 13 63
|
||||
1A 28 85 42 F0 66 0A E3 AE 7A 78 F2 5F F4 F3 B4
|
||||
75 12 49 F7 DB 2B E5 5D 76 14 CE E0 4F 5B C8 EC
|
||||
63 BD 05 C9 4E 80 79 10 D9 97 AA 85 4A 4E DB 36
|
||||
F2 B2 24 E9 24 88 8E 64 EF 3D 31 AE AB CE 1B F6
|
||||
5B 6E 5D 0D CE 96 D2 6E 92 6B F8 7C 28 4B E8 75
|
||||
1E 6C B1 18 BB 13 86 53 17 14 C1 82 AB A0 40 A2
|
||||
45 C5 5F B3 35 55 DD 4A 19 27 80 8E 5C C7 FF A4
|
||||
AB E1 0A F9 91 87 73 38 D4 4F 18 AB 80 8E 4E A3
|
||||
67 5E B1 FA 5B FB 84 C8 59 24 0F 4E 2E DD DE 9A
|
||||
B9 30 1B B5 44 56 9E EA 84 BA 82 CE AF 9B 31 D4
|
||||
D0 5B 0B AB 91 3F 59 D5 01 3A AA 32 02 80 D1 AA
|
||||
E9 04 E4 4E 81 26 8F 5C 9E 89 5D 5F 7C 48 9F A5
|
||||
E1 A9 FE A6 4D EB 9A CE DE 73 26 F7 2F 66 83 7E
|
||||
CC CD CF 35 95 FA 21 32 9D E5 BB D1 13 BB BD A1
|
||||
4D 2E 98 18 B5 71 50 72 7D 81 93 22 45 06 D1 00
|
||||
0A B8 84 03 06 3D FD 81 B1 22 01 D8 83 A2 06 D4
|
||||
BA 29 55 C0 92 E5 92 36 94 AC 9C EA 6E 87 6D A8
|
||||
D4 33 9D 8F A7 55 08 62 B3 0E EB 78 12 E8 89 37
|
||||
62 1A 77 F4 07 62 C7 47 AB 05 28 36 2E C1 AF E2
|
||||
8D 22 F4 13 44 3D 8A 41 1C 3E 9B B6 41 1F BC 5D
|
||||
3C 22 C5 EC 9D C2 C3 5D D7 E9 FF AB 8C E5 CB C8
|
||||
1B 8A E8 75 33 5A DD C7 A6 7E 3F 78 B9 CB 63 C9
|
||||
69 3D D8 FF 6F 72 37 D8 00 96 9D 2C 8E 4B 72 57
|
||||
E6 BE 3C 04 A2 2E 65 10 77 B4 87 F5 E1 E5 F3 F2
|
||||
D0 22 8F 51 11 44 BF 4D 40 53 BA 7B 04 43 94 93
|
||||
7E 17 FB 43 0E 09 E6 18 98 DB FA 2F ED 18 9C FF
|
||||
6F 62 12 07 21 D3 CB 98 D7 C2 AA C3 A1 6F A7 30
|
||||
12 47 EC A1 94 A7 06 36 4A 86 4D 5D 2F 14 A8 2E
|
||||
FF 2B 8A DA C3 33 C2 4F 14 E0 C1 04 F0 DC 7A 1A
|
||||
58 1C C1 B3 0B 2D E3 1F E2 54 01 BD D2 D0 A7 3C
|
||||
0C F8 EA D2 B4 0D 43 F0 7C 2C EF E7 94 43 4E E2
|
||||
FA FB 90 2E FA 76 CA 51 1D E2 F5 C9 85 05 30 59
|
||||
5F EE D0 6C C9 3D D7 40 9A D9 76 6E 3D 6C B5 81
|
||||
E4 67 79 0F B5 8F 80 C0 2A 95 AA A6 6D B3 BD D5
|
||||
73 21 98 1D 86 5F AF 8D 98 9D 74 22 99 03 7B 58
|
||||
7C 23 63 41 7B DB D2 37 DB F1 B9 C0 44 7E 6A 4B
|
||||
2A CD 2C DD 99 D4 E2 4A EF 7C 12 51 86 7D B6 E7
|
||||
23 31 69 11 D4 32 C6 0A 24 DA DB 81 1F 8B 10 3E
|
||||
FE F5 D1 3C 16 9E 11 B4 14 37 50 1E 30 D5 B4 EE
|
||||
F2 EC 34 08 F7 20 FF CC 11 D2 DF 37 03 F0 C4 F2
|
||||
C3 CB A3 60 B7 71 26 36 7A DE 69 97 63 AD B2 ED
|
||||
E5 9D C2 45 19 31 0E 35 C7 96 D9 65 60 C9 92 99
|
||||
B7 29 28 28 1A D9 F8 BB 0B 09 B1 E5 2C DD 39 58
|
||||
B1 AE A8 0C F3 A3 2A 88 FC E2 C2 B5 A2 73 A9 78
|
||||
3A EC AE D5 6F EC C0 62 33 24 2C 1C F1 27 BD 97
|
||||
4B 93 9D 21 19 46 4B 0F 92 2F E3 61 93 91 19 91
|
||||
1D 31 24 19 D5 2C 1D A8 D3 B8 01 0E 36 E9 1A E5
|
||||
07 3E EC 55 21 5E 7D 41 6E 2B C5 C5 B8 8C 9F E0
|
||||
FA C7 97 48 89 02 86 5B F9 17 E1 A5 53 4E 62 5B
|
||||
B0 C6 D8 AE 15 45 E8 DC 1F 98 0C 18 EB B7 16 22
|
||||
FA 86 FE DC 35 B4 AF C4 ED D0 7B C2 17 68 AC E1
|
||||
32 D8 9A A2 EF 37 B3 1B E7 0C 35 5A 18 A2 82 CB
|
||||
57 2D 98 76 FB BC AC B7 1B 3D 16 54 A5 14 11 C0
|
||||
E6 C1 A4 71 F2 7D 92 52 20 67 D8 03 F3 78 D5 F0
|
||||
B2 E9 22 63 AF 92 C0 1C 1C 42 38 F9 78 FC 31 F1
|
||||
6A 5B 79 05 7D 7F FA 59 59 63 65 D7 8B 50 E1 46
|
||||
B0 EA 93 6B 2B F3 7C 39 2F C4 00 D7 CE 53 6C 50
|
||||
DB DF E1 73 AC 6E 22 3B 92 D0 5E 5E 9A C0 9E 29
|
||||
3A 2D F4 FF B8 12 88 36 C0 0F 44 39 80 0E FF 6D
|
||||
47 BD 0B 78 FD 03 57 F6 F0 22 B4 2E D1 8A 2D 6E
|
||||
A6 DE F2 DB 99 C2 BB 98 D3 73 87 3D 60 F5 F9 70
|
||||
D8 49 86 F4 77 9C 18 59 D0 68 CA F7 26 AC 78 90
|
||||
51 25 DB 18 A1 CC 67 45 18 23 A3 AA 26 21 B9 F7
|
||||
C9 08 E0 6D 16 E8 4C EC 57 74 F0 63 C4 5F F8 1E
|
||||
1F 05 83 E6 9E A7 9D 43 41 E4 72 10 45 0E E0 09
|
||||
63 C2 85 E5 04 7C 07 82 90 D1 B3 95 B6 50 19 2C
|
||||
76 9B 1F 99 93 7D 61 76 1C E6 E7 B2 A2 2F E0 F6
|
||||
35 27 82 13 AC 02 C2 D8 20 CA 9E EF FE 32 CB 21
|
||||
B2 D8 01 A5 52 65 79 A1 EB E0 5B 75 7F FA CC 5E
|
||||
53 D5 63 CA B8 BD AF 0D C3 A0 C4 A8 F8 0F 0D 86
|
||||
15 EA 8A 42 BB 12 22 8F 72 DB 4F 4A B5 AA 44 3D
|
||||
76 8B F4 B8 5B E2 42 CC 74 D9 1F 8F A5 F6 6D 2E
|
||||
2C 30 C1 3C 1B 87 D8 6D BF B4 82 6D D6 04 C1 DC
|
||||
7C 45 2F 3C EA 8C 61 A2 AA CB F7 DF 11 76 BA 79
|
||||
E0 B3 7F FC C1 B5 81 85 86 2F B5 2D BB 94 E3 40
|
||||
BC 16 FE 56 A6 5B C1 CF 63 37 96 1D 2A A2 0C FD
|
||||
A0 DA 29 E5 C9 93 83 D2 C7 A1 FB 12 39 B7 A4 FE
|
||||
17 05 B5 74 78 EE E9 D4 7B EF 58 81 5D 85 42 C7
|
||||
86 F4 FC 57 1B 3F A5 7A E1 A0 C1 D1 2B 38 C4 74
|
||||
F2 AA 43 40 2C 28 E1 35 64 15 E0 11 0B 30 3B AB
|
||||
3C 0F 79 20 39 D6 93 F4 91 6D 77 E8 D9 9E 2B 58
|
||||
89 43 62 58 89 59 99 D4 D3 B2 AB A7 E0 74 26 DF
|
||||
68 5B 1B 38 BF B0 87 04 0E 4B 9E B1 83 B7 42 89
|
||||
A4 04 AB 39 32 32 38 57 1B 31 C1 CA 5F A8 CE EA
|
||||
36 27 FA 2F EA D8 4E 20 66 68 70 5C 65 32 1D 15
|
||||
B6 EA 66 87 9A D9 49 73 09 06 AD 7E E5 B5 CA C4
|
||||
8B ED 4F 65 69 6F 19 75 34 84 3D 8D B3 99 A8 67
|
||||
EE 09 7B 59 F2 12 D3 F4 8D 22 41 2B 9E A7 CA 43
|
||||
C7 71 5A 1B 3E 93 92 01 B2 1E BB 1B DA E8 F2 41
|
||||
49 24 51 C4 04 CE CC CF 47 BB 2A A9 23 A4 57 32
|
||||
C9 72 3E CB 4D 9D 9F BB C3 BF 5D A7 46 0A 8A C1
|
||||
54 D9 42 69 5F 26 7C 79 F0 F4 BF 70 7B 4F 67 99
|
||||
90 73 ED 59 82 55 DE 70 F1 8A 97 FB C9 96 86 CC
|
||||
6F BD D0 A1 C0 44 4B 63 DF 65 B0 7E CF AC 2A DD
|
||||
C1 2B 1B 14 7F 6F 06 8F 12 34 43 24 59 DC 08 34
|
||||
02 A5 22 83 7E AF C1 B1 E2 1E ED C8 49 E9 95 CB
|
||||
F7 F4 A5 30 5A C9 E7 4B 9E 29 EA B0 8C 7A 1B EE
|
||||
E2 67 86 71 0C 5C 35 14 CC CC F9 E7 96 FA 6C DE
|
||||
19 D9 85 A4 B1 1D 9A BE 25 10 16 01 BC 8D C5 A9
|
||||
B2 54 66 48 67 06 F9 27 9A 90 D1 63 3F 61 AF 1C
|
||||
C1 62 F7 04 2E F4 08 BC 18 63 53 F5 B5 E5 D5 0B
|
||||
15 0D 3B 15 C3 6A 23 D9 3A AA 5D D0 63 9D 93 59
|
||||
C2 03 55 C7 27 92 E1 A1 90 0C F6 00 87 12 E2 A5
|
||||
70 B8 8C FD D3 8F 53 61 EA 91 06 DD 61 36 3C EA
|
||||
14 E9 FC F6 C6 82 24 24 71 DA 21 50 9C 25 67 BC
|
||||
DD 98 6B 65 57 C1 AB B8 A7 F9 A6 16 C5 55 33 C0
|
||||
75 5E DA 18 A6 67 C9 C1 E6 3F 65 18 55 FE 54 9C
|
||||
16 CD B8 84 18 2D 6D 28 1A D6 2D 64 5E 03 40 D6
|
||||
31 3E 6C 29 EB 42 0B D1 56 41 3D 70 D0 C5 93 E1
|
||||
3B 77 9A 08 E0 28 B2 9B 20 14 A6 2F 07 45 DB C8
|
||||
EA EB 0D 9B 7E AF 79 5D 1B 88 EF 5F C6 B6 E6 76
|
||||
84 1B 23 34 39 97 50 73 96 A1 D4 E4 13 DB 8D 3C
|
||||
6E 48 DB 56 69 7B 03 3A 0A D7 27 5E 90 8A FC FC
|
||||
09 56 93 E8 32 E6 84 64 A9 E9 1C F0 CF B1 91 E0
|
||||
AF 4B AD 6C C6 F8 F2 4E 86 66 DC D8 4B F8 44 A3
|
||||
06 02 3D 60 A3 95 F5 55 DE 33 D3 4C 35 81 78 2E
|
||||
5A B4 93 F6 4C 87 E5 34 1D 85 2F EB 4B E7 42 56
|
||||
4F 71 B7 DC D5 EF AD 96 DF E9 46 62 97 5B 09 72
|
||||
3B 10 C5 95 4A 32 BA 23 91 48 A4 80 AC 9F 45 61
|
||||
7D 98 A7 D3 7A 9E 9E 1E 28 D3 99 0A AD 07 E2 89
|
||||
0B 01 56 66 BB 8D DE 04 DD BB CE 4B 8C 33 36 F3
|
||||
69 78 CD AA 64 D5 04 A7 33 EA 9F 82 73 02 0D 82
|
||||
09 3F 46 F6 24 C4 FA 5E 1F 15 2A 7F A2 98 7D CF
|
||||
A0 39 06 85 88 9D D3 94 92 77 06 13 8A E5 15 6D
|
||||
EE 60 40 76 C7 4F 0F 1F 2B D3 AD A4 1E EC 26 2A
|
||||
D4 2D EA 4B C4 3F 19 EF 59 21 BB 9F CE 70 D2 9C
|
||||
21 C1 69 E3 9B E9 9C 61 A2 B1 7B 95 E9 1D 6B 3E
|
||||
7D 54 9A 29 A0 F5 D5 6C ED 33 69 DB 3D 20 DB 5D
|
||||
2A 76 91 0D CB E9 11 F9 53 8B 4A D9 70 25 F5 13
|
||||
F8 41 1E B3 01 77 8F A2 9B 9C 00 AE F2 BC CC B3
|
||||
AA C8 FB A9 17 92 49 EC F3 91 5B 68 8F 98 CE C2
|
||||
A9 60 D9 67 CF 1F 07 C8 6C A9 D0 6C 2C 02 F4 1D
|
||||
9F 05 1D 88 5B 3B F8 93 2B E5 9A 41 25 85 02 73
|
||||
F3 E1 D4 EA 24 2E 41 FA 69 5D 18 C8 73 DE 17 D0
|
||||
00 E6 C7 03 CF 0F FE 4B 48 B5 E6 46 EA AB 26 58
|
||||
92 9A 3C E2 66 2D B6 19 CB 02 5B FC 67 CA 2B A4
|
||||
EA DB 15 35 43 55 EF E9 B1 97 D2 86 0A 9D 57 23
|
||||
98 2F 31 B9 95 BF DB 76 07 73 32 88 72 7C 24 EA
|
||||
29 C3 D0 A5 81 F8 9A B4 88 61 23 BF A0 E2 12 D1
|
||||
B4 94 0D F3 70 BF C7 D0 02 90 E4 8B CD F0 31 15
|
||||
5C 10 16 5F 33 50 44 7E 2D 5B B6 99 1E 07 43 0E
|
||||
93 31 EB CF 9F 3F 6A 10 E1 64 CB 2D E4 08 8D 2C
|
||||
E8 BD 4C ED 23 EB 74 D1 87 13 FB 09 39 57 62 F7
|
||||
61 A3 6F EC 2D B4 EF 80 35 00 6D 7B 7B 33 20 ED
|
||||
48 9D E4 4C A8 E2 5D 2C 02 41 02 F7 6C 1C 37 AB
|
||||
45 AF 5B 78 8F 05 C1 30 E8 16 6F 5A 61 22 4E 02
|
||||
37 0C 9A CD C9 79 B3 B7 47 BF 4F 22 9C 8C 23 65
|
||||
5D 8B 59 91 A0 67 7A 4B B3 03 9D B5 45 72 BA 34
|
||||
61 73 5D 6E C9 32 83 1E 8F 48 D3 F3 E3 F3 DA C9
|
||||
4B 1D AC 88 AF 7C 08 77 77 6B 87 7D AC 54 DE BB
|
||||
74 31 5A 32 88 BB 11 74 42 5E 6B AE AD E5 76 7C
|
||||
0D 0F B0 DF 47 F4 BE E1 20 E3 99 8A 1F 7A 90 27
|
||||
C1 9F 2F 03 5B 7C 16 96 89 C1 4B F2 74 35 13 3A
|
||||
05 7D 65 7C BC ED 05 4C D8 E7 5D 7F FE 6C 43 A8
|
||||
86 7A E4 25 9C 66 73 87 37 0D 97 22 E3 4B 66 36
|
||||
41 EE 49 2C E3 71 46 6C 97 17 EC 57 B4 D9 42 56
|
||||
BA D8 57 D8 96 B3 7B 31 DA BA EE 24 56 F5 B9 F0
|
||||
15 5E 6B B0 9F 79 AB AD 81 6A 08 C9 68 8A E9 7F
|
||||
86 59 DD 09 31 CD B8 69 B1 25 04 74 C6 7E 69 9C
|
||||
6B 1E AB B4 B9 18 95 C0 BC 1F 9A B6 48 5D B2 4C
|
||||
1F AA 5A 3A 74 38 B4 8F B6 D1 BD 02 E8 0A 3A 5C
|
||||
0D 0A 5C F9 5D BB 42 83 4A EC 70 3C 4E 36 D8 B1
|
||||
40 62 91 79 C7 04 F7 05 BE F2 32 E4 EF 06 DD 25
|
||||
40 B1 56 2C E8 90 25 6D 62 29 11 E2 33 31 4D C9
|
||||
D8 5A 95 44 D6 E7 B2 D5 F5 61 66 6F 1A 40 DC 4B
|
||||
45 50 E2 73 01 65 CD BD 5A B6 E5 77 13 05 D2 17
|
||||
FC 6C 72 5B 8E 46 DA 58 DC E1 DE B0 08 7C AE 67
|
||||
5D 29 A6 E2 B3 99 B3 30 29 F5 F3 ED B2 46 F4 CA
|
||||
94 E0 B9 94 14 C6 00 B9 61 44 93 E1 29 B1 6A C1
|
||||
38 FE 49 5F 9D 45 32 4F 73 40 4C 09 08 C9 D8 D9
|
||||
C4 65 08 D0 2F C5 48 7A 6B 50 1C AD 88 EF 76 7B
|
||||
CD 96 C3 6E 71 C3 13 6C 3E 9E A5 8E FA 86 C2 42
|
||||
42 24 B7 0D FF 0C 1C 85 87 B3 9A 4E 9F 9F C3 86
|
||||
04 B2 CF DD C0 0F 13 E1 6B A8 EE 00 0A 18 3B CC
|
||||
3E 40 63 4E C4 5B 44 F9 56 4B FA BE 0A 62 DC BB
|
||||
17 49 84 36 B1 D9 E6 38 3B 06 78 E1 34 8D 32 42
|
||||
05 65 13 18 9F 33 9B 5C 67 96 17 3C D8 79 FB 01
|
||||
7B 49 02 FB 78 8A D1 3E FD D2 0B 24 96 D0 D0 9A
|
||||
BE 91 8A 8F D4 B1 F1 C3 D2 7C 75 E7 34 78 59 F5
|
||||
BE 41 6A E7 9E 03 22 30 67 41 DD D8 84 6D F9 47
|
||||
5F 04 B0 EE F2 A1 CC 69 9D 11 54 E2 01 D3 67 93
|
||||
98 FB 25 52 47 AF 4F AF 9A 6F 29 85 47 64 87 DA
|
||||
61 AE 1E B1 64 EA AC A6 D3 CE 62 99 96 73 DF FA
|
||||
AA FC 0E 7F FA 05 50 84 BC F4 57 DC 0F 01 36 10
|
||||
33 84 50 C6 4B 54 38 C8 20 28 9B 75 4E 93 B7 2E
|
||||
FE 8A 14 AC C5 DE E6 36 F6 4A 13 06 E8 EF D2 3D
|
||||
63 46 9E 5F 46 3A 51 0E 6B 53 08 FC C3 7F E6 90
|
||||
4C 81 03 BC A8 81 EC 88 79 F2 82 F3 C9 22 84 4A
|
||||
0B 43 94 BA BF 3D EB 75 50 F0 3A 08 C9 A9 2E 04
|
||||
C4 0E 1C 3A 07 70 DF E6 64 CC 51 ED D0 FB 5E 37
|
||||
6D EC 10 88 D7 F1 8F 0C 1D A5 2E 22 BB 86 29 5E
|
||||
E7 C1 A0 CC E0 48 A6 1C 54 46 A9 26 48 72 C0 0C
|
||||
2C 7C B1 73 6F 12 3F E1 6F 58 58 C6 DC CD B1 19
|
||||
EA 82 B2 3A 26 8B C9 87 7F 1C 33 6D 78 0D 11 19
|
||||
3D AA 14 9D 2A 0C 27 E7 5C DF 66 90 A9 3C 9F 47
|
||||
15 60 4E CF 51 ED F8 2F AD B1 3E FE 33 73 13 E2
|
||||
4F D5 AA DF 11 75 C2 D7 68 0D 08 4F 0A 4D C8 B1
|
||||
B6 B6 6E F7 D3 92 4E 5A 38 7A 73 8A 5B 10 C0 22
|
||||
07 F2 27 63 1D 41 02 BD 94 37 4F 94 50 F8 EB 93
|
||||
43 47 44 11 B2 33 8D DE 52 8B 85 C8 7D 68 96 CF
|
||||
7C 6B F7 0E A4 9D 2D F8 1B 9A 85 CD AE 83 9B 40
|
||||
A9 EF 66 A5 CB F8 EF BF 2F 3E 60 06 05 4C A3 FD
|
||||
22 47 FD CF EE A4 8E 55 4A 69 E4 64 50 58 A1 15
|
||||
8B 88 BD CA 0E F1 ED B0 C2 AC F0 34 87 BD 00 B1
|
||||
EA 94 14 4C 7B 1A 2E 80 F2 05 52 97 70 66 5D 3B
|
||||
BA 7E D0 BB 95 2D 01 8C 4B 7D D6 7F 85 AC 98 B9
|
||||
50 EA AF 0A 3D 4D C9 7E 85 04 6D BD 00 C0 1A 9C
|
||||
01 6A D4 A3 27 8A 3E A3 AF 27 23 25 E8 15 19 5D
|
||||
45 1C 9F 84 16 6D E0 26 5B 83 AB 11 D9 F4 79 E1
|
||||
09 B2 06 D5 B0 83 88 E2 8A 30 B4 5E A3 F4 BF 0E
|
||||
54 4E 22 77 36 28 95 0A F3 B7 86 2D A7 BC 29 EE
|
||||
FD D4 03 1F EB B5 21 E0 95 6C BF 14 A0 43 CC 70
|
||||
C4 85 0F 88 23 44 66 AB 05 DB C6 27 41 B1 18 33
|
||||
5A CB EF 89 2D 68 70 DC E4 F3 8F 52 E7 75 B1 63
|
||||
34 6E FE 4B A4 D2 B6 C4 9E 0A 7C 46 58 77 CE 5F
|
||||
5C BF 10 F7 3E B8 EC DB 4D F6 DE 12 4F 40 7E A0
|
||||
24 61 01 50 E4 41 C4 DC 79 28 0C 05 29 2C 47 0F
|
||||
15 09 FD 23 22 2C 28 E0 7E 26 48 D9 44 CE 10 FA
|
||||
35 92 B3 32 C9 00 F8 0A A6 64 F6 66 96 8D C1 75
|
||||
9C 1A AA 91 56 85 62 BE 00 25 97 58 0A 0E B0 11
|
||||
C9 D5 33 37 A8 1C 0A EF 59 A7 D7 10 EB A8 87 20
|
||||
9A 86 C0 B0 1C F6 61 AF F5 F3 2A 69 3B 89 CE 26
|
||||
6B BF 09 D5 ED 65 35 A3 83 47 0C 61 CB 57 9D 51
|
||||
15 D8 0F 2D 7E 1E 7A 9D 31 4A CB FE D0 1D 8B 72
|
||||
6E 67 1C A9 76 05 84 67 91 3A 33 0A CF 96 59 1B
|
||||
6A DD D9 8A C4 A3 AF AC 7C 82 25 7F D3 A7 3E C4
|
||||
92 0B E2 9A EB B4 77 C3 DC 5D C3 D6 F0 17 33 60
|
||||
B8 C1 57 3B F9 7F 3E EC 2B A2 3F B5 29 56 BA A7
|
||||
B5 B3 42 57 84 0E 9B 6B A0 01 EF A0 D2 59 98 A3
|
||||
E0 7A 6D BD 9C 80 1F 50 D6 58 55 E1 34 21 22 94
|
||||
70 05 A7 DF 9F 68 88 55 7F A3 2E 86 BE 23 A3 5A
|
||||
EF B0 D1 F0 68 88 01 81 07 82 D6 B8 45 40 D8 23
|
||||
59 A8 BA 1A C4 6E 78 43 E0 28 14 A2 52 60 C6 A7
|
||||
64 6A 5B F5 1F C8 EF 65 EE 40 2C 2A 4E D1 AF AD
|
||||
39 63 32 21 F0 AF 96 74 56 13 A6 6E E3 AE 9F 86
|
||||
A7 F7 3A 68 D9 CD 21 65 E7 F5 E2 E3 F0 6E 1F 27
|
||||
D4 E0 E6 BF C1 37 AC E9 3B 54 42 1D 41 12 1B 55
|
||||
6D DE F6 C5 39 52 21 F6 40 67 03 F3 FA 92 E5 6E
|
||||
4A C6 00 BA D6 71 82 B9 F1 B8 A5 61 61 2E B5 C7
|
||||
C8 8B 78 9F D1 4C BA 66 AC C6 35 5B 07 9B 68 84
|
||||
4C C9 8B 70 7B 81 EA 83 18 CD 78 3E 76 FF E7 D6
|
||||
2E B9 6C 79 AE 30 01 6B BD 05 7C 97 ED 67 94 C8
|
||||
3B 93 A8 58 35 32 7E 88 92 D4 D8 17 0B 24 C5 56
|
||||
82 7A F2 F5 E9 09 C0 44 83 9B 8D 6A 42 56 D5 12
|
||||
BB EE 3D D8 ED 66 A3 49 0E 4C 61 47 A4 3F DD 15
|
||||
78 B8 C0 1D 9E B8 06 40 CA 1B B0 8D 27 71 0B 6E
|
||||
50 25 EA 53 1A 2E 99 41 26 6D 78 91 7C DD EF BB
|
||||
59 D3 48 62 2B 9D A8 2A 5D FC 60 EF 87 72 B8 FC
|
||||
7C E4 F1 81 BA D3 F0 F3 37 2E 5B 58 5E DD 0F 84
|
||||
EE DD 76 54 95 12 EB 2C DF 5F E7 F0 07 76 46 E3
|
||||
D9 96 EB 30 04 C3 57 20 B3 0E F8 B0 0C 39 5C 9D
|
||||
AD 4E D9 CC 2C 2C 31 BD 6A E4 92 DA 55 69 F5 43
|
||||
7F 96 FC 23 89 40 F5 D8 07 13 72 6B 03 38 CC 45
|
||||
D3 9B D4 61 32 79 25 91 76 AE 93 31 9D 3D BC 9A
|
||||
07 53 EB 34 A4 39 AC 3F 5E 49 15 CC 19 A5 2A DA
|
||||
F7 2E 3B 06 79 B7 B3 87 E7 5A 2A 55 7F 8D 4C A2
|
||||
0D FB 88 AA FB 9D 34 1E 8B 6F 4C 6F 25 1B F8 24
|
||||
FC 81 56 B6 70 99 41 4C FF 13 EB D9 C5 7F C6 70
|
||||
97 B9 2F CC F4 42 86 0C 3A 21 56 C3 4C 21 3C F9
|
||||
A5 3A 50 96 BD E6 7D 6D B1 5B FD E7 0C A5 EC A3
|
||||
31 53 DB EE 41 25 F8 F8 B6 02 D7 5C FE 49 03 95
|
||||
D5 EE 7D 85 46 1D 6F 85 5A A9 1A 33 F5 EA 83 D7
|
||||
BE 48 65 22 F4 0C E2 AE 4B 97 33 03 C0 13 2A 23
|
||||
C8 2B A2 C0 CD 69 7F AD 50 45 8A 3A 2F 44 38 C8
|
||||
C1 A4 DF 61 7A 75 BE F6 84 37 B1 26 4F C1 E0 30
|
||||
EB AD DE 9E 75 B8 2D 71 AA D7 40 D7 64 3A 12 C3
|
||||
DD E7 30 1F 3B 9B 86 AE F0 DB FD EC 61 64 B6 4E
|
||||
6D 53 76 D7 0B 32 F4 2A 00 E7 E2 5E 4E 9A 2C 84
|
||||
4F 48 A5 FB 94 FE B0 59 0B E2 77 3D 71 22 EA F9
|
||||
5A 73 1B 38 98 80 2A 41 6D 8F 62 E8 13 90 39 EB
|
||||
38 73 19 D5 EB CE ED 56 2D A9 E6 A2 6A 62 4D 49
|
||||
A2 BF 29 E0 B9 A6 35 86 F3 D8 71 B5 96 EC 53 CC
|
||||
53 90 2E D6 4F 2F 4D 51 97 A2 C2 5D C7 EC 88 E8
|
||||
C2 6A 5F 01 8D 56 0C 4E 5E 8C 96 FC 9E EE D1 FF
|
||||
89 DD 1E 72 D4 AE AA 7C C6 77 DF 8C 63 DB 11 6B
|
||||
AB 25 B0 CC 0D C3 F4 28 0A 4D F9 C3 C5 55 10 D3
|
||||
FE CA 74 07 47 74 3B 60 75 16 22 8B AF C1 C9 30
|
||||
BE BE 13 B3 A8 94 D5 32 81 A5 65 77 08 B8 65 BD
|
||||
BF 73 6C 1C C2 F4 27 41 30 8B 2E 2F 3D 0B 44 71
|
||||
32 AA 6A 4B C3 B5 CE B3 0B 04 AB 4A CB 82 A6 5D
|
||||
6E FE 07 95 C1 4A 63 49 22 D8 FB 3C 79 CD A6 19
|
||||
76 F9 F2 4F 26 C1 90 DD E0 8E C5 D0 74 8E 60 3A
|
||||
3A E2 4F F1 52 CB 0B 53 B7 C6 DE 3D 11 40 E6 F8
|
||||
35 A6 D4 74 93 F9 E3 BB 18 8B 3C 57 3A 7B 49 B5
|
||||
1E 76 18 44 5F E5 5F 67 08 DC 58 97 F5 99 A7 6A
|
||||
A9 D8 F1 BC A6 0B 59 18 0C 3F 52 85 E5 C8 68 18
|
||||
2C D9 84 80 D0 38 1F E4 4E 1E 0A 4F 85 B2 E0 53
|
||||
39 CA 1D 58 1F 8E 35 41 B1 5A 38 5C F4 11 6E 7D
|
||||
2D 75 81 4E 6F 3B 65 2E D7 9E 76 55 8A 69 25 90
|
||||
BD 4B 7C 74 D1 43 22 5A 42 C6 70 D2 55 0F 02 FF
|
||||
25 27 59 41 64 3E 7B 90 5C 32 B8 D7 47 08 E7 EB
|
||||
1E 45 51 E8 FE BF BC DD BB 8B 49 B1 73 D3 91 34
|
||||
C7 2B AD 49 0E 9C 58 F5 24 AF C8 2B 16 3B AA DF
|
||||
52 2F A6 BD 06 2E B5 3F 95 9E 36 A8 78 12 DD BA
|
||||
17 76 19 24 84 2A C2 F0 E8 36 64 47 A6 42 B7 58
|
||||
AD 4C AC 32 FE 00 52 BC 38 C1 8C BD A2 F4 56 5F
|
||||
50 35 02 52 0C BB 79 50 E3 FF 3C 65 D1 E9 9C CC
|
||||
F5 65 CE 6E DF 8D 9A 67 BE BC 8D 45 1B 45 47 98
|
||||
FB EE 52 0D D2 11 26 C1 03 DF B7 8F 66 AC AC 73
|
||||
F8 7E 92 53 F5 EE A5 C1 06 FC E2 5C 5E 2B 79 6F
|
||||
56 F6 C5 A5 64 49 F4 05 66 D8 CD 21 FD 57 8D C9
|
||||
91 10 43 5A FE C2 9B 26 68 4B 23 22 87 87 20 22
|
||||
4F 38 7C F7 30 0A B3 0F 46 C7 E5 B3 9D B5 06 13
|
||||
3F F7 FA 9C 4C 9B 1D CD 61 51 2F 6D D3 D3 B5 9E
|
||||
A7 3B 9E 5B F6 4A 7E F1 37 B5 88 21 F1 73 D1 0E
|
||||
B3 7F 60 9C A9 D7 FB 16 FE 0E E3 0D A0 E8 D3 62
|
||||
8C A1 AC AB AA E2 86 A8 94 03 3F 52 A4 F5 92 C7
|
||||
27 68 C1 5F 40 25 1E F7 F8 15 E5 9C E9 17 33 E5
|
||||
89 FC A2 7A AE 01 BB 9D D4 12 A2 0E 35 7A 49 E9
|
||||
64 18 E3 C7 FA EB D7 45 5B 91 F1 62 D8 3D B6 CC
|
||||
BC 34 6B 34 4C 6D D3 76 8B 71 2B 66 35 16 78 CB
|
||||
AD 6D DC 3C 5B B5 30 8B 64 73 69 43 E2 56 A3 A3
|
||||
5A AD FB 8A 1C 27 53 D3 61 62 64 15 9C F5 7A AC
|
||||
43 B1 B1 BA B3 E7 50 BE 38 EE 3F 16 D3 04 77 27
|
||||
21 39 AF CB 32 2A 7F 53 1C 9E 98 5D 1E 5C E5 C6
|
||||
19 25 05 94 65 48 F4 98 30 92 F2 13 8B 41 99 C4
|
||||
3E C1 4D 78 79 91 18 06 00 1C AC D4 30 C0 8B 2B
|
||||
42 14 55 58 DA 1A 5A AE 85 D4 66 9E 3D FE CD F3
|
||||
AE 08 82 99 D3 46 AA 41 D8 CA 02 47 18 4A C8 52
|
||||
E9 BD CA E0 43 C4 8D A0 A7 3F 89 26 67 36 98 50
|
||||
D3 9D BF 7A 68 F4 54 2A 0E FA 81 98 78 A0 F7 9C
|
||||
F1 DA E6 24 B2 A2 31 78 0F 9C 75 37 E7 DB 4E 28
|
||||
FF C3 58 67 6D 66 B1 9E F7 C3 8A 8F 08 DF 23 6D
|
||||
EB 20 CC 1D E3 95 EB BF 3A 1D 2F 7D 59 35 BF A6
|
||||
9F CE 4A 89 51 E5 3A 39 E9 C1 BC FA FC A9 CA FE
|
||||
5E 3E 4A B2 BE 55 86 73 7A 3F DE E7 E1 66 31 55
|
||||
11 5B 35 C4 D6 7E 88 CF AE A6 B6 F9 1B 8E 1F 6B
|
||||
C8 CB 64 CC D5 E1 2B D5 12 6F 10 38 94 20 A1 72
|
||||
04 D1 4F CF 01 63 92 7C DA 09 04 23 74 44 A1 2F
|
||||
0E 83 88 80 DD 71 B3 49 10 49 ED 96 97 4D C3 55
|
||||
32 59 50 83 D9 1D AC 0A 62 67 BA 35 F2 3E E2 A0
|
||||
26 7B EC 14 BF 6E F3 53 DF 32 99 78 B1 D2 C1 AE
|
||||
B3 F3 9C B1 24 45 D3 59 6F 78 D8 99 06 30 E4 44
|
||||
58 3B EB D0 AD CC 10 40 8D F7 32 1F BF 92 0A BA
|
||||
56 00 57 96 05 BF 5B 40 7D A1 2D 2F 8E E2 F4 73
|
||||
8C E5 64 AE 93 64 4A AD 01 16 75 09 77 B2 A6 7B
|
||||
BB 25 11 DB 66 DC 4D C7 3D 78 CC FE 9D 48 D6 B4
|
||||
D6 0F 3D 27 C6 D9 FE 50 49 24 1C 41 F1 2C C8 42
|
||||
F6 29 9A 8F 24 FF 26 16 41 32 C3 C4 8C D2 66 8D
|
||||
D5 C0 3A 92 E9 05 EA B8 9F 1B 55 E0 3E C1 04 F0
|
||||
3F 0B 1E 0A 83 7D D0 CF 1F DA 38 DA 70 46 5C A7
|
||||
4F 53 F8 8A 83 9B B0 B5 C9 3D 84 CE 65 6C ED 7F
|
||||
C5 B6 69 34 38 F7 B0 D8 B7 94 92 2F 19 53 BD E9
|
||||
48 58 51 0A FA 7D BF CC 0B 29 6C 69 3A 5A CB 20
|
||||
F4 E4 48 02 EC 0B E0 C8 42 DE 88 91 71 A8 45 20
|
||||
A8 73 4C E0 22 D0 B0 56 85 AC CF B8 51 AE F3 90
|
||||
32 62 E3 07 90 47 47 F2 19 60 60 C5 FA CB 23 EA
|
||||
EB 10 BD 5E 5F 8E B0 91 33 E2 CD ED D2 FA 51 53
|
||||
1E A3 68 10 72 91 D6 DF 14 B1 7F C6 78 59 AD 46
|
||||
63 78 27 9E AA E8 86 00 73 9F 1D 8C C7 69 32 F5
|
||||
65 09 F9 90 89 3B AA AC 6C 7C E3 B9 C6 74 13 22
|
||||
01 CF 83 66 64 AA FC 69 2F BF 9C 2C 1E CA 7F 0E
|
||||
CB D5 28 1E 4E ED CC 2C 62 04 03 F2 A3 F4 E6 A3
|
||||
3D 5C 7E 64 B6 45 29 48 AE 96 80 C9 82 82 D5 93
|
||||
B8 38 AF 6D 79 2F F7 C8 A6 E8 23 FA 3E 10 AB 68
|
||||
C6 17 54 04 8F 33 95 5A 3B 02 5F D6 E0 88 82 0B
|
||||
E1 86 D8 60 FD 1E 6B D4 30 30 0D 49 15 09 4B 16
|
||||
73 AC 2E A1 C6 11 59 C0 63 A6 7E 1E 35 64 65 DD
|
||||
53 39 67 0F 37 D0 F4 31 67 1D 6C 1D DE B0 E4 8D
|
||||
11 ED B3 02 33 65 52 7F 61 DC 1B 29 09 16 F0 27
|
||||
C2 E7 D0 A5 07 02 B2 01 83 47 6C 23 77 2B CC EF
|
||||
CD 74 2C 89 95 F2 49 6B 21 7E F6 E0 49 15 9E 85
|
||||
A4 A2 D5 FB 78 55 37 0D 30 0F 2B 76 7D 08 8E 7E
|
||||
20 38 4B 53 A7 6C 90 1E 71 9F F4 76 BD 80 C4 91
|
||||
75 E8 E2 78 0D 40 24 40 B7 1C BF 3D 15 A2 47 88
|
||||
25 5F F5 69 14 29 CC DD 0A B4 07 4B 79 1A 46 9F
|
||||
51 05 E4 BA C4 46 8C 0C 6A FD FC C6 7A 0A 97 8F
|
||||
02 5D 41 83 C1 E1 58 47 5A C8 DB 28 D7 6D 72 0C
|
||||
03 DF D0 AB 6C A6 16 06 D7 EA 8A 06 44 51 1B B8
|
||||
93 6F 5B B3 10 F2 0A 2E C8 F0 2F 48 8B 06 FD C6
|
||||
A3 B0 E3 66 48 CA 53 DA A0 3C 4F 4B F5 0F 90 1C
|
||||
9C A8 72 00 C9 11 D7 AD 09 20 21 46 4F 92 80 D1
|
||||
10 31 62 77 33 68 A5 9F DD 4A DF 39 3C C2 48 31
|
||||
AE 8E B0 DA C0 10 1F 5F D4 AA F4 21 71 81 85 1D
|
||||
05 A7 7D E9 08 B3 6B AA 99 8C E4 F3 0D 90 F0 F1
|
||||
8B 74 59 60 9B 87 4E 75 9E CA B8 57 45 98 70 0B
|
||||
C3 EF 4C F2 D5 59 B7 13 B1 E4 26 EF 6A F4 E5 B5
|
||||
71 89 E5 D8 F5 E1 82 2A 0E 15 E4 31 71 78 AA FB
|
||||
0E D7 40 D7 91 AC D5 27 DD E5 0C 16 6A B1 E7 0F
|
||||
07 30 8F 9C 38 2A C9 91 D4 35 E5 41 6F 3B C5 FB
|
||||
05 A2 9F C6 66 98 2E 49 04 4F 4F C3 22 73 61 3E
|
||||
EA 8D 52 6E 5D 1F B4 87 69 65 C5 FD 98 A8 06 22
|
||||
26 01 AC F1 38 47 18 C0 6B DC 97 F9 67 66 3C 5D
|
||||
84 5C E1 72 F3 11 48 60 D3 2D 1C A9 74 31 8B AB
|
||||
E9 F3 91 9D 01 C1 EF 50 08 BA 50 F4 0E 64 A5 F2
|
||||
2A A1 55 4E F9 92 EA E4 66 AE 70 3F D8 54 63 54
|
||||
85 2F D7 C0 9D EE ED 74 5D 4A BE C4 F2 56 D6 BC
|
||||
3D F9 A9 9C 3E 17 C1 AC 01 AC E9 39 E5 79 4E EA
|
||||
BA 89 4F 01 C7 B2 45 37 93 EB EC 50 5F DF B0 73
|
||||
D3 13 87 CB C1 A6 65 20 70 1E E8 2E AF A8 68 64
|
||||
EC 38 6D 07 28 9B 02 06 4F 79 ED EC 64 3C 4A 26
|
||||
21 E2 B9 22 B2 21 15 6C 8A 39 FC 87 EF D2 A2 F7
|
||||
39 3B 8E BD C9 E6 86 71 7E AA 01 0F 40 5D B2 34
|
||||
1B 91 14 11 E2 0D EC D6 32 D7 4F D3 B6 6B 8B AE
|
||||
FA 2A AA 2D 3F 29 BE 75 67 1C AA F2 39 43 FF 8B
|
||||
79 46 2E 81 C3 32 2C 77 A8 31 C9 09 E9 52 D8 4D
|
||||
14 B5 D3 D4 79 8A 21 14 24 84 5C BD 2A B0 05 11
|
||||
36 D9 30 BE 67 FA 39 79 FB 6F 80 20 81 F3 12 32
|
||||
BD B7 63 8F 6E BC F9 70 FB 00 76 F8 8F 7F A3 CF
|
||||
73 11 77 04 13 9C C4 4B 02 51 5A 28 9F 6F 72 06
|
||||
A2 C3 AE 2E 3C 4C A3 7F 65 58 B9 6B AC D5 D9 6D
|
||||
54 24 FD 54 F5 DA AE 77 EF D3 60 F5 07 B5 0C D7
|
||||
C4 3D 9C 2F 91 23 F0 F0 A8 8A 5B 92 93 AD D3 82
|
||||
36 6C EF E0 7C 17 91 43 9A 7C 78 8A B0 03 E3 A0
|
||||
15 FA FD E9 61 E2 6F 3C 24 84 24 CD 23 9E 4C 4E
|
||||
A6 23 ED 66 76 DF 7C 9E E7 C8 02 F5 1F 1D 0C E4
|
||||
5F 0D A9 06 FB D8 4A 55 8C BB 46 D6 FF 0B 3C 7E
|
||||
13 81 91 22 D8 08 58 EC 56 7B 48 27 59 85 E5 28
|
||||
6C 85 4A 6D 96 3D 83 D6 A2 73 E9 BA 61 60 41 39
|
||||
F5 EA A1 BC 91 36 E4 FA DF 8E E0 D9 1C 33 37 45
|
||||
59 68 FF 42 BF 43 CB CD 7E 4B B7 11 34 17 2F 5C
|
||||
0E 2F 34 A8 57 A7 7C 20 95 BC C3 F8 B5 2E 52 24
|
||||
51 E5 4B BA 70 7E E0 51 21 49 AF AD B6 EC 5F 42
|
||||
05 D7 61 5A 02 43 D4 C5 24 0A 15 C7 C7 7D 43 92
|
||||
A5 FC 1A 97 8D 45 7F 1F 5D 0C 80 1C 13 7E BD 6E
|
||||
FE 25 FC C6 38 AE 9E 59 82 A2 6F 9F BF 3D 65 C8
|
||||
A7 B6 0D 46 8A 38 62 CC AD 7A 3C AA D9 8C 31 7E
|
||||
97 20 F0 5E 96 31 4B 24 CC 4F 97 AF B3 0C 4E 6E
|
||||
C8 C3 CF 10 78 38 F7 29 BD F6 D7 86 F5 55 1B 86
|
||||
00 51 D0 4C C9 EF B4 1F A5 60 1A AE 3E 87 E4 F3
|
||||
30 62 D7 97 6A A0 26 B9 AE 76 CD 1E E7 92 4E 3C
|
||||
F8 78 3E 9E E5 7A 28 9D 31 6B 2D 25 D6 79 EE F8
|
||||
BE FF 5B 44 A6 30 EC B0 64 66 02 92 C2 E1 13 B9
|
||||
0C 67 85 DB 31 CC F7 9F CA 60 DC 39 74 EA 4B EF
|
||||
F5 9A D8 C3 71 85 72 1D CA C6 43 5F A7 94 3D E0
|
||||
9D FA 15 54 41 28 D2 C8 15 2B 38 C8 91 B7 B3 C2
|
||||
EA 6F 71 4E 5D A7 2F 5C 88 1E 69 F2 4B 9F 82 C2
|
||||
68 0C 41 0D F3 59 E1 15 5D 58 B5 89 2F 4E 26 C9
|
||||
27 BF AC 92 7A 7E 22 53 31 FC 13 02 50 D5 F6 00
|
||||
51 05 9A C2 4F FE B7 B5 29 B8 53 A0 5D 1C 0B 33
|
||||
D9 47 D1 B0 EF 90 90 36 A4 E3 2B 20 31 B6 5A 5E
|
||||
78 F3 01 B3 AC CE AC 57 B6 47 46 13 FD A9 C2 DB
|
||||
EC 48 EF 1E 02 14 4F 0C B3 8D B9 05 66 E2 3B D0
|
||||
EC F4 4B 99 2C B4 02 2A 5E 17 4C 14 BE 3B EF CD
|
||||
AF 75 C3 7A 2D F9 33 3C D3 78 71 8F B3 BB 97 48
|
||||
D9 0C 24 17 14 37 40 C8 8A 5B 3D 64 B1 60 A0 83
|
||||
95 25 18 9C 42 10 6D 94 08 E6 78 CD C7 CB F9 1B
|
||||
64 8A 7D 37 6E 35 D0 FB A6 12 65 C7 97 16 A8 3B
|
||||
D2 55 1D 4D 29 D4 D6 05 9B 9C 2E F1 5E 28 41 9F
|
||||
8A 81 ED 54 0F 9C 6B A1 0B EA D1 2E 44 DF B1 C6
|
||||
5E FB 8D E9 C5 FF 25 0A F3 A8 63 C4 54 4A E2 8F
|
||||
54 4F 3F A0 10 3C 07 5B 57 7D AD 00 98 C9 EF F2
|
||||
D2 6C 4A 8F EA 25 31 EF 52 E5 C5 1F D7 66 7C DC
|
||||
05 7E 5D 09 95 94 4C EB 52 1E 30 68 5D 03 45 BE
|
||||
69 E8 47 AE 0D 08 5A 91 32 3F 1B 68 72 81 B3 F1
|
||||
0E 7E BD 95 21 9E E6 95 52 C9 A0 1A 68 CA EE 6B
|
||||
5A 33 A2 81 25 D6 79 7A C3 A1 D6 5F 2D DB 3F A1
|
||||
8E B4 5D 28 A7 A6 BC 70 C8 C4 6E C8 37 D1 48 B5
|
||||
D4 00 27 FE 38 4B 88 17 C9 BE 2B 45 69 50 56 FA
|
||||
89 E8 AE A7 E1 6F 20 C5 FA 96 FF 21 AE 57 61 D0
|
||||
7D 39 C2 FD C4 BF 78 CB 84 C3 AB 7E 7B 4F 5D 30
|
||||
24 93 B5 95 8A 7C 3D FD 3B 32 09 76 8C 80 4B 3D
|
||||
55 FF FE 1A 65 EB BA B3 EE 28 7D 30 A9 C2 CF 12
|
||||
4B 0E 98 7F 9D CB 84 AB 29 1C 8E 9C 7C E8 E4 98
|
||||
A7 9F 08 E3 CC 92 06 68 C1 15 47 4F 13 7A B5 56
|
||||
70 37 F5 08 DE 24 B8 0E AA 6C 8E EF 5B 46 52 F2
|
||||
27 FE 68 D8 7F F2 07 B0 59 9D 1C 1F 9D 9E FE 8E
|
||||
51 A4 33 56 39 47 CF B1 C0 69 CB F4 26 8B 95 20
|
||||
7E 44 91 C1 B4 DB 35 E7 91 CF E3 6A 38 D3 F2 07
|
||||
75 28 BC 9E C4 00 8B 57 10 47 DB 15 36 0D 67 F9
|
||||
03 4E 75 A3 07 61 8B 4A A9 A8 3B A6 8D 53 E3 8C
|
||||
F5 7B DE EF 4D 2B 82 2E AC 79 82 0C F3 D6 09 C7
|
||||
B6 8D EE 90 67 4F E5 99 0C 29 16 35 2F EA AE C2
|
||||
B7 F6 B8 52 28 A9 06 3D F0 6E BA 72 0B 00 87 2D
|
||||
DE 3A 5E 72 6F CC C1 F5 7C ED 79 E2 D6 18 68 F6
|
||||
9F 5B 61 96 02 96 E5 53 E6 B3 84 ED A0 99 7D 58
|
||||
14 13 74 B8 14 4C AB 4B 69 51 90 BF 4B 80 D0 74
|
||||
F2 5C 52 5A 05 3A 16 61 23 66 63 E9 1F A4 0A FF
|
||||
86 A0 F0 C7 8B 78 2C 5B 27 7A 91 CF 75 3C 08 68
|
||||
53 02 D2 C8 A6 E0 5A 30 19 FA 58 6D 7B F1 EA C3
|
||||
1B 81 8F 39 0D 5F F4 BB 6C 08 C3 69 D8 E6 35 45
|
||||
31 3B 5C 29 45 8E D3 B5 68 B7 96 E1 0C 91 B5 C5
|
||||
00 FA 6E D7 D4 5F CE CC 37 EA 46 C6 A1 DA 37 2F
|
||||
44 9B 2A F2 63 95 B0 48 2F CE 6A D9 1E AA 5A 3E
|
||||
97 0E D0 22 09 40 C5 4B B4 3F 86 D4 19 85 5D 25
|
||||
DE 7B CA 30 A1 00 55 77 BA BB 6A 62 C1 01 0A FA
|
||||
FE 35 27 80 FF CF 26 D7 0F 23 C9 F4 5F F9 3A C8
|
||||
1A 41 CE 8F 93 18 16 D0 B1 E1 7F E9 F3 8C B6 4D
|
||||
EA B3 EA A9 32 0E 12 5D C6 16 CB A2 79 8F C5 15
|
||||
72 36 2E 1B B0 2C EC F9 60 97 17 CD 0B E6 CC 88
|
||||
6E 8B 8E 6D D5 05 57 1D 5D 4D 3B 2C F6 D5 FB 0F
|
||||
A1 85 22 90 FD EE 29 BF 13 19 61 F3 1F 21 FB A9
|
||||
CE C6 BD 88 95 40 61 B2 00 58 71 30 90 AB D7 1A
|
||||
56 BE 38 63 F1 E5 02 19 4E 31 4E EB 42 C5 2C 4F
|
||||
AF 8A 6E F6 62 A5 67 89 8C 89 63 8A 4A 6B F9 25
|
||||
EB 8C 1A D0 61 92 68 46 DB 09 0E D1 9C BF 1D 56
|
||||
54 ED BC DD 4F 81 87 F6 4A 28 A7 D1 25 A6 77 99
|
||||
BB 42 1D AC 3C 0B EA 64 0B FA A5 B3 58 8F 4E E9
|
||||
29 70 B6 6C 7F 30 DB 6E 23 DE BC 62 82 38 61 9A
|
||||
69 E8 F9 0B 00 D9 15 A9 36 7A D0 C2 A6 C1 83 F9
|
||||
53 D5 F9 F2 96 4A E7 E7 FF 9D D5 4D 41 39 8E 4C
|
||||
2F 23 7E 2C C7 90 F1 64 EF CA 40 4F E1 16 8D 5D
|
||||
29 A2 AD 1D 60 07 42 37 0D 8A 2F DD 61 78 A6 EC
|
||||
8D CE 9D 77 5F 34 14 48 6A 68 9E 9A 52 21 5B F8
|
||||
FF EA B5 E7 18 BA C5 4C 51 DF 21 0C 90 E0 AE DF
|
||||
25 75 22 CB 8F 76 85 7E 56 07 47 17 7D 47 DB 82
|
||||
FD 63 1E 29 40 BD 86 99 E7 71 90 A3 77 CC 64 9E
|
||||
FB 09 F7 64 A1 9E D9 FD 60 DF A5 15 10 46 39 47
|
||||
4E 39 00 49 62 9B 5D 4D C2 5F 3E 63 6D 5F 94 99
|
||||
F3 C2 7A 03 7B AA E3 35 A1 1C 11 BA 7D EE 0A B4
|
||||
66 4A B4 D6 7D 37 AD A9 6B AA 36 D9 FE 45 78 08
|
||||
E6 08 20 7D E5 7E 20 33 C7 7B 9C B4 51 FA D2 35
|
||||
7F 66 E4 50 51 D3 82 C0 7D 5F AD 5E EA A3 05 2D
|
||||
2B 3A D8 35 65 D4 12 C5 B0 D5 7E 98 1D 0D 45 31
|
||||
D1 85 08 EE 9F B1 D7 0A E3 3F 9C 3A 99 3E EC 8B
|
||||
71 5E BA 18 F0 91 09 37 BF FE F6 BE F9 A0 C3 57
|
||||
65 B1 C9 30 FC 6E 7D 2A 40 34 1B DE 86 52 E5 90
|
||||
61 C9 6A 23 5D ED D5 38 DE AD 17 7E F7 B0 C4 32
|
||||
43 EE 16 E5 5C 99 68 40 B6 EA 2A DE 12 14 19 4F
|
||||
2A F1 68 03 4F 01 D9 65 7C C7 C3 79 B6 BF 75 EF
|
||||
CF 13 FE 07 63 B4 0C FC BA 43 D6 BC B1 D6 EA F5
|
||||
95 E8 AA 3B 42 AE 7B B7 71 71 32 BD 67 BB 95 98
|
||||
6D A3 44 E0 60 C8 7D 78 92 9E 9C 71 17 FC 11 EF
|
||||
C4 72 13 30 55 31 76 81 1B 0E 66 AE 7E E2 DD D6
|
||||
F0 B1 74 6E E3 42 00 DA 12 0A 2F 3D 08 ED 11 0C
|
||||
D2 49 6A 43 2A BC 44 E2 D7 87 70 37 80 61 CB 06
|
||||
72 F7 56 10 47 7B 0D 89 35 07 A8 7C DC 40 52 0A
|
||||
0B 39 9C 97 81 CB F7 94 5B 55 AA 61 5A 43 7D E7
|
||||
C7 4D 38 8F 08 32 81 74 75 9F 03 F3 6A DD 86 28
|
||||
20 AB 2F EA 5C A2 AC 2B EF 29 BA 14 C8 0D 02 BA
|
||||
39 66 97 9B 8C 78 5C F2 DB 78 27 C2 6A 2A CC 88
|
||||
1A 4A AC 38 DC 37 91 96 EF 50 6C CD F7 68 AE 61
|
||||
4C 14 95 66 DE 49 99 71 94 D0 99 5E 92 5D 52 1B
|
||||
EA 17 EE D6 47 1D C8 7E B3 87 60 B0 87 2F FB E3
|
||||
15 DD B5 4F 39 A6 ED 0B 8B 27 7F 1E 0E 21 86 6F
|
||||
CF 60 B8 95 D0 49 AD 5E FD 5D F0 1D C1 DF E7 52
|
||||
4D 2B 52 FC C9 C3 F7 EB 83 B4 D2 97 7D FC AF 11
|
||||
53 70 F8 90 0D D2 0F 88 66 9A 4F 7B 55 2A 7B E8
|
||||
EA 79 11 4E 29 91 2F A3 D3 2D 32 CF 60 41 A2 C4
|
||||
C5 34 27 F2 E7 B0 3C 84 2C 9B 29 1C C5 FA 4F 24
|
||||
24 30 F4 9B 35 AE 66 17 67 70 EF 32 1A 8F 3F 1E
|
||||
92 5E 15 15 40 54 41 71 8D 6E 9D C1 4C E3 7E 4D
|
||||
C3 33 9C 70 7A F2 5D F4 26 3A D2 B3 9B E3 25 00
|
||||
ED CC AA 6E 0D 44 91 DA 6E CE 86 5F 45 75 E3 90
|
||||
0D 70 77 0A B7 EC 87 70 0D 49 BA 6F 76 7C 64 C8
|
||||
3C 5B 4B D7 B7 39 AE 92 62 A3 3D 47 44 83 94 63
|
||||
34 AE 1B EB 51 29 C8 17 D9 4C E9 40 77 42 81 A6
|
||||
18 0C 49 30 28 8F 28 0D 76 B3 0A 4F CA 12 E8 84
|
||||
95 0F D7 27 49 24 2E 3D EF 7F 5B 8E 48 D3 AE 17
|
||||
6E 87 C7 09 A6 51 7C E1 AD FC 28 CE FB 0C CA 1C
|
||||
06 F6 BC 10 1F 71 30 B5 CD A9 BD C2 21 58 09 32
|
||||
63 45 CA 59 5E F4 3B 25 44 8E 1B B3 7E 73 E7 BD
|
||||
49 65 18 17 A2 FF 65 B5 0B FF 69 5E EB 7A 96 19
|
||||
4F 44 FB 18 FF 23 D9 78 15 8F 47 4D 4C 9E C1 34
|
||||
E9 24 E9 DD 8C CF 1D 0C CE 8C CB 46 3F 4F 63 C2
|
||||
61 AB 61 F7 94 1D A9 E4 A0 C0 19 D5 8F 45 E7 37
|
||||
A9 3D C7 47 94 CF 84 B3 83 77 20 0D 16 59 BE A7
|
||||
95 8D AA D3 15 31 4D 0B CC 73 77 03 7C F3 D9 09
|
||||
A1 7C CA EA F2 A2 30 87 03 9B E6 29 6D 3A E9 AE
|
||||
8F 72 00 F9 CE 74 C5 55 2C 1C 4C 28 3C C4 FA 7D
|
||||
B8 43 88 0E 3E 98 5C B5 81 9C 2F AD E0 CB DD D4
|
||||
DB 45 28 A6 90 E8 13 9D 5C DA F1 4C BB 67 15 EF
|
||||
9C 9B EA 7E 01 48 AE F2 84 00 00 6C C4 13 67 61
|
||||
A6 C2 20 2A 61 14 41 38 57 3A D1 94 DD 7B B8 54
|
||||
84 77 04 06 BF 88 D7 C1 D3 CA 9F 03 E8 91 C3 02
|
||||
F3 F9 73 E9 E7 79 31 BD 25 3A 1E DD 32 82 64 36
|
||||
02 EA A2 69 2C 9A A4 2F 43 13 08 9A B1 24 91 86
|
||||
15 2D D4 5A 69 65 B5 23 AF AF FB 9D DB 44 C3 E7
|
||||
83 44 08 B1 93 9C 7D 0D 75 8F 45 FD 06 99 79 60
|
||||
61 0F 9A A1 E4 60 77 D4 2F 76 66 FA 8B A6 81 8E
|
||||
* End 138167944 2957739639
|
||||
@ -1,118 +1,124 @@
|
||||
Version 4.1
|
||||
SHEET 1 1124 804
|
||||
WIRE -384 -720 -544 -720
|
||||
WIRE -16 -720 -304 -720
|
||||
Version 4
|
||||
SHEET 1 1144 804
|
||||
WIRE -96 -720 -256 -720
|
||||
WIRE 272 -720 -16 -720
|
||||
WIRE -1248 -560 -1600 -560
|
||||
WIRE -992 -560 -1168 -560
|
||||
WIRE -880 -560 -992 -560
|
||||
WIRE -800 -560 -880 -560
|
||||
WIRE -544 -560 -544 -720
|
||||
WIRE -544 -560 -800 -560
|
||||
WIRE -400 -560 -544 -560
|
||||
WIRE -144 -560 -320 -560
|
||||
WIRE -16 -560 -16 -720
|
||||
WIRE -16 -560 -64 -560
|
||||
WIRE 80 -560 -16 -560
|
||||
WIRE 192 -560 80 -560
|
||||
WIRE 288 -560 192 -560
|
||||
WIRE 400 -560 288 -560
|
||||
WIRE 752 -560 400 -560
|
||||
WIRE -928 -560 -1168 -560
|
||||
WIRE -688 -560 -928 -560
|
||||
WIRE -608 -560 -688 -560
|
||||
WIRE -528 -560 -608 -560
|
||||
WIRE -256 -560 -256 -720
|
||||
WIRE -256 -560 -528 -560
|
||||
WIRE -112 -560 -256 -560
|
||||
WIRE 144 -560 -32 -560
|
||||
WIRE 272 -560 272 -720
|
||||
WIRE 272 -560 224 -560
|
||||
WIRE 304 -560 272 -560
|
||||
WIRE 432 -560 304 -560
|
||||
WIRE 512 -560 432 -560
|
||||
WIRE 592 -560 512 -560
|
||||
WIRE 752 -560 592 -560
|
||||
WIRE -688 -528 -688 -560
|
||||
WIRE -608 -528 -608 -560
|
||||
WIRE -528 -528 -528 -560
|
||||
WIRE 432 -528 432 -560
|
||||
WIRE 512 -528 512 -560
|
||||
WIRE 592 -528 592 -560
|
||||
WIRE -1600 -496 -1600 -560
|
||||
WIRE -1600 -496 -1680 -496
|
||||
WIRE -1680 -480 -1680 -496
|
||||
WIRE -880 -464 -880 -560
|
||||
WIRE 80 -448 80 -560
|
||||
WIRE 192 -448 192 -560
|
||||
WIRE 288 -448 288 -560
|
||||
WIRE 400 -448 400 -560
|
||||
WIRE -800 -432 -800 -560
|
||||
WIRE -544 -432 -544 -560
|
||||
WIRE -384 -432 -544 -432
|
||||
WIRE -16 -432 -16 -560
|
||||
WIRE -16 -432 -320 -432
|
||||
WIRE -1600 -320 -1600 -496
|
||||
WIRE -880 -320 -880 -336
|
||||
WIRE -800 -320 -800 -368
|
||||
WIRE -1648 -256 -1840 -256
|
||||
WIRE -1840 -240 -1840 -256
|
||||
WIRE -1600 -208 -1600 -240
|
||||
WIRE 752 -208 752 -560
|
||||
WIRE -1600 -176 -1600 -208
|
||||
WIRE 240 -144 208 -144
|
||||
WIRE 512 -144 304 -144
|
||||
WIRE 704 -128 592 -128
|
||||
WIRE 208 -80 208 -144
|
||||
WIRE 208 -80 96 -80
|
||||
WIRE 352 -80 208 -80
|
||||
WIRE 512 -80 512 -144
|
||||
WIRE 512 -80 480 -80
|
||||
WIRE 656 -80 512 -80
|
||||
WIRE -1600 -64 -1600 -96
|
||||
WIRE 656 -64 656 -80
|
||||
WIRE 352 -16 320 -16
|
||||
WIRE 592 -16 592 -128
|
||||
WIRE 592 -16 480 -16
|
||||
WIRE 320 0 320 -16
|
||||
WIRE 352 48 96 48
|
||||
WIRE 656 48 656 0
|
||||
WIRE 656 48 480 48
|
||||
WIRE 752 48 752 -112
|
||||
WIRE 752 48 656 48
|
||||
WIRE 976 48 752 48
|
||||
WIRE -1600 80 -1600 16
|
||||
WIRE -1600 80 -1728 80
|
||||
WIRE -1600 96 -1600 80
|
||||
WIRE 752 96 752 48
|
||||
WIRE -1728 128 -1728 80
|
||||
WIRE 976 128 976 48
|
||||
WIRE 96 144 96 48
|
||||
WIRE -1600 192 -1600 176
|
||||
WIRE 752 208 752 176
|
||||
WIRE 848 208 752 208
|
||||
WIRE 752 240 752 208
|
||||
WIRE 848 256 848 208
|
||||
WIRE -1728 272 -1728 192
|
||||
WIRE 752 384 752 320
|
||||
WIRE 848 384 848 320
|
||||
WIRE 976 384 976 192
|
||||
FLAG 752 384 0
|
||||
FLAG -1600 272 0
|
||||
FLAG 96 224 0
|
||||
WIRE -256 -432 -256 -560
|
||||
WIRE -96 -432 -256 -432
|
||||
WIRE 272 -432 272 -560
|
||||
WIRE 272 -432 -32 -432
|
||||
WIRE -688 -416 -688 -432
|
||||
WIRE -608 -416 -608 -432
|
||||
WIRE -528 -416 -528 -432
|
||||
WIRE 432 -416 432 -432
|
||||
WIRE 512 -416 512 -432
|
||||
WIRE 592 -416 592 -432
|
||||
WIRE -1600 -400 -1600 -496
|
||||
WIRE -1600 -288 -1600 -320
|
||||
WIRE -1600 -112 -1600 -208
|
||||
WIRE -1600 -64 -1600 -112
|
||||
WIRE -1600 -64 -1728 -64
|
||||
WIRE -1600 -48 -1600 -64
|
||||
WIRE -1728 -16 -1728 -64
|
||||
WIRE 752 -16 752 -560
|
||||
WIRE -1600 48 -1600 32
|
||||
WIRE 240 48 208 48
|
||||
WIRE 512 48 304 48
|
||||
WIRE 704 64 592 64
|
||||
WIRE 208 112 208 48
|
||||
WIRE 208 112 96 112
|
||||
WIRE 352 112 208 112
|
||||
WIRE 512 112 512 48
|
||||
WIRE 512 112 480 112
|
||||
WIRE 656 112 512 112
|
||||
WIRE -1728 128 -1728 48
|
||||
WIRE 656 128 656 112
|
||||
WIRE 352 176 320 176
|
||||
WIRE 592 176 592 64
|
||||
WIRE 592 176 480 176
|
||||
WIRE 320 192 320 176
|
||||
WIRE 352 240 96 240
|
||||
WIRE 656 240 656 192
|
||||
WIRE 656 240 480 240
|
||||
WIRE 752 240 752 80
|
||||
WIRE 752 240 656 240
|
||||
WIRE 976 240 752 240
|
||||
WIRE 752 288 752 240
|
||||
WIRE 96 336 96 240
|
||||
WIRE 976 336 976 240
|
||||
WIRE 752 400 752 368
|
||||
WIRE 848 400 752 400
|
||||
WIRE 752 432 752 400
|
||||
WIRE 848 448 848 400
|
||||
WIRE 752 576 752 512
|
||||
WIRE 848 576 848 512
|
||||
WIRE 976 576 976 400
|
||||
FLAG 752 576 0
|
||||
FLAG -1600 128 0
|
||||
FLAG 96 416 0
|
||||
FLAG -1600 -560 vbus
|
||||
FLAG -992 -560 vmid
|
||||
FLAG 848 384 0
|
||||
FLAG -928 -560 vmid
|
||||
FLAG 848 576 0
|
||||
FLAG -1680 -416 0
|
||||
FLAG -1600 -208 vdrv
|
||||
FLAG -1728 272 0
|
||||
FLAG 320 0 0
|
||||
FLAG 96 -80 cp
|
||||
FLAG 96 0 0
|
||||
FLAG 80 -320 0
|
||||
FLAG 192 -320 0
|
||||
FLAG 288 -320 0
|
||||
FLAG 976 384 0
|
||||
FLAG -800 -320 0
|
||||
FLAG 400 -320 0
|
||||
FLAG -880 -320 0
|
||||
FLAG -1648 -304 0
|
||||
FLAG -1840 -160 0
|
||||
SYMBOL nmos 704 -208 R0
|
||||
FLAG -1600 -112 vdrv
|
||||
FLAG -1728 128 0
|
||||
FLAG 320 192 0
|
||||
FLAG 96 112 cp
|
||||
FLAG 96 192 0
|
||||
FLAG 304 -560 vl2
|
||||
FLAG 976 576 0
|
||||
FLAG -688 -416 0
|
||||
FLAG -608 -416 0
|
||||
FLAG -528 -416 0
|
||||
FLAG 432 -416 0
|
||||
FLAG 512 -416 0
|
||||
FLAG 592 -416 0
|
||||
SYMBOL nmos 704 -16 R0
|
||||
SYMATTR InstName M1
|
||||
SYMATTR Value AON7140
|
||||
SYMBOL res 736 224 R0
|
||||
SYMATTR Value AON7262E
|
||||
SYMBOL res 736 416 R0
|
||||
SYMATTR InstName R1
|
||||
SYMATTR Value {rtip}
|
||||
SYMBOL voltage -1600 176 R0
|
||||
SYMBOL ind -128 -544 R270
|
||||
WINDOW 0 32 56 VTop 2
|
||||
WINDOW 3 5 56 VBottom 2
|
||||
SYMATTR InstName L1
|
||||
SYMATTR Value flux={L*Is}*tanh(x/{Is})
|
||||
SYMBOL voltage -1600 32 R0
|
||||
WINDOW 123 0 0 Left 0
|
||||
WINDOW 39 24 44 Left 2
|
||||
SYMATTR InstName V1
|
||||
SYMATTR Value {vbus}
|
||||
SYMBOL voltage 96 128 R0
|
||||
SYMATTR Value PWL(0 0 1m 0 1.1m {vbus} 10m {vbus} 10.1m 0)
|
||||
SYMBOL voltage 96 320 R0
|
||||
WINDOW 123 0 0 Left 0
|
||||
WINDOW 39 0 0 Left 0
|
||||
SYMATTR InstName V3
|
||||
SYMATTR Value PULSE(0 5 5m 100n 100n {d*1/fsw} {1/fsw} 200)
|
||||
SYMBOL cap 640 -64 R0
|
||||
SYMATTR Value PULSE(0 5 2m 100n 100n {d*1/fsw} {1/fsw} 200)
|
||||
SYMBOL cap 640 128 R0
|
||||
SYMATTR InstName C3
|
||||
SYMATTR Value 100n
|
||||
SYMBOL res -1264 -544 R270
|
||||
@ -120,97 +126,78 @@ WINDOW 0 32 56 VTop 2
|
||||
WINDOW 3 0 56 VBottom 2
|
||||
SYMATTR InstName R2
|
||||
SYMATTR Value 5m
|
||||
SYMBOL cap 832 256 R0
|
||||
SYMBOL cap 832 448 R0
|
||||
SYMATTR InstName C4
|
||||
SYMATTR Value 10p
|
||||
SYMBOL ind -1616 -192 R0
|
||||
SYMBOL ind -1616 -416 R0
|
||||
SYMATTR InstName L2
|
||||
SYMATTR Value 500n
|
||||
SYMATTR SpiceLine Rser=1m
|
||||
SYMBOL res -1616 -80 R0
|
||||
SYMBOL res -1616 -304 R0
|
||||
SYMATTR InstName R8
|
||||
SYMATTR Value 120m
|
||||
SYMBOL cap -1696 -480 R0
|
||||
SYMATTR InstName C5
|
||||
SYMATTR Value 1µ
|
||||
SYMBOL res -1616 80 R0
|
||||
SYMBOL res -1616 -64 R0
|
||||
SYMATTR InstName R9
|
||||
SYMATTR Value 20m
|
||||
SYMBOL cap -1744 128 R0
|
||||
SYMBOL cap -1744 -16 R0
|
||||
SYMATTR InstName C6
|
||||
SYMATTR Value 200ľ
|
||||
SYMBOL IRS10752L 416 -48 R0
|
||||
SYMATTR Value 10ľ
|
||||
SYMBOL cap -32 -448 R90
|
||||
WINDOW 0 0 32 VBottom 2
|
||||
WINDOW 3 32 32 VTop 2
|
||||
SYMATTR InstName C7
|
||||
SYMATTR Value 5p
|
||||
SYMBOL res 240 -576 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R11
|
||||
SYMATTR Value 18.9m
|
||||
SYMBOL res 0 -736 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R12
|
||||
SYMATTR Value 10Meg
|
||||
SYMBOL IRS10752L 416 144 R0
|
||||
WINDOW 3 2 120 Top 2
|
||||
SYMATTR InstName U2
|
||||
SYMBOL schottky 240 -128 R270
|
||||
SYMBOL schottky 240 64 R270
|
||||
WINDOW 0 32 32 VTop 2
|
||||
WINDOW 3 0 32 VBottom 2
|
||||
SYMATTR InstName D5
|
||||
SYMATTR Value 1N5818
|
||||
SYMBOL voltage 96 -96 R0
|
||||
SYMBOL voltage 96 96 R0
|
||||
SYMATTR InstName V2
|
||||
SYMATTR Value 12
|
||||
SYMBOL ind 736 80 R0
|
||||
SYMBOL ind 736 272 R0
|
||||
SYMATTR InstName L3
|
||||
SYMATTR Value 10n
|
||||
SYMATTR SpiceLine Rser=1m
|
||||
SYMBOL ind -416 -544 R270
|
||||
WINDOW 0 32 56 VTop 2
|
||||
WINDOW 3 5 56 VBottom 2
|
||||
SYMATTR InstName L1
|
||||
SYMATTR Value flux={L*Is}*tanh(x/{Is})
|
||||
SYMBOL cap -320 -448 R90
|
||||
WINDOW 0 0 32 VBottom 2
|
||||
WINDOW 3 32 32 VTop 2
|
||||
SYMATTR InstName C1
|
||||
SYMATTR Value 5p
|
||||
SYMBOL res -48 -576 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R3
|
||||
SYMATTR Value 12m
|
||||
SYMBOL res -288 -736 R90
|
||||
WINDOW 0 0 56 VBottom 2
|
||||
WINDOW 3 32 56 VTop 2
|
||||
SYMATTR InstName R4
|
||||
SYMATTR Value 10Meg
|
||||
SYMBOL diode 960 192 M180
|
||||
SYMBOL diode 960 400 M180
|
||||
WINDOW 0 24 64 Left 2
|
||||
WINDOW 3 24 0 Left 2
|
||||
SYMATTR InstName D1
|
||||
SYMATTR Value RB068M-60
|
||||
SYMBOL Contrib\\CHEMI-CON\\Capacitors\\Alcap-PolymerHybrid-SMD\\HHXC350ARA220ME61G -816 -432 R0
|
||||
SYMATTR InstName C2
|
||||
SYMBOL sw -1600 -336 R0
|
||||
SYMATTR InstName S1
|
||||
SYMATTR Value SW1
|
||||
SYMBOL voltage -1840 -256 R0
|
||||
SYMATTR InstName V4
|
||||
SYMATTR Value PWL(0 0 1m 0 1.1m 1 6m 1 6.1m 0)
|
||||
SYMBOL MMASU32MAB7106_PNA01 -880 -400 R90
|
||||
SYMATTR Value Temperature=40
|
||||
SYMATTR InstName U3
|
||||
SYMBOL MMASU32MAB7106_PNA01 80 -384 R90
|
||||
SYMATTR Value Temperature=40
|
||||
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT -688 -480 R270
|
||||
SYMATTR InstName U1
|
||||
SYMBOL MMASU32MAB7106_PNA01 192 -384 R90
|
||||
SYMATTR Value Temperature=40
|
||||
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT -608 -480 R270
|
||||
SYMATTR InstName U3
|
||||
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT -528 -480 R270
|
||||
SYMATTR InstName U4
|
||||
SYMBOL MMASU32MAB7106_PNA01 288 -384 R90
|
||||
SYMATTR Value Temperature=40
|
||||
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT 432 -480 R270
|
||||
SYMATTR InstName U5
|
||||
SYMBOL MMASU32MAB7106_PNA01 400 -384 R90
|
||||
SYMATTR Value Temperature=40
|
||||
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT 512 -480 R270
|
||||
SYMATTR InstName U6
|
||||
TEXT -1656 -1016 Left 2 !.tran 12m
|
||||
TEXT -1648 -808 Left 2 !.param fsw=100k
|
||||
SYMBOL CL31B106KBHNNN_Precise_Interactive_LT 592 -480 R270
|
||||
SYMATTR InstName U7
|
||||
TEXT -1656 -1016 Left 2 !.tran 10m
|
||||
TEXT -192 -632 Left 2 !.param L=3.3u Is=8.2
|
||||
TEXT -1648 -808 Left 2 !.param fsw=50k
|
||||
TEXT -1648 -776 Left 2 !.param d={pout/(vbus*vbus/rtip)}
|
||||
TEXT -1648 -904 Left 2 !.param vbus=28
|
||||
TEXT -1648 -840 Left 2 !.param pout=130
|
||||
TEXT -576 -40 Left 2 !.param rtip=2.5
|
||||
TEXT 352 112 Left 2 !.lib IRS10752L.lib
|
||||
TEXT -1648 -872 Left 2 !.param rtip=2.5
|
||||
TEXT 352 304 Left 2 !.lib IRS10752L.lib
|
||||
TEXT -1648 -936 Left 2 !.param vcc=3.3
|
||||
TEXT -1656 -992 Left 2 !.options abstol=10n vntol=10n reltol=0.005 gmin=10p method=gear
|
||||
TEXT -480 -632 Left 2 !.param L=2.2u Is=7
|
||||
TEXT -584 -64 Left 2 !*.step param rtip list 2.5 3 3.5 4.5 5 100k
|
||||
TEXT -1496 -16 Left 2 !.model SW1 SW(Ron=1n Roff=10Meg Vt=0.5 Vh=0.1)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user