board bringup: adc, usart working

This commit is contained in:
jaseg 2020-01-23 14:38:36 +01:00
parent 6a49b8399f
commit 410e386510
53 changed files with 24804 additions and 8 deletions

File diff suppressed because one or more lines are too long

111
gm_platform/fw/Makefile Normal file
View file

@ -0,0 +1,111 @@
# Megumin LED display firmware
# Copyright (C) 2018 Sebastian Götte <code@jaseg.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
CUBE_PATH ?= $(wildcard ~)/resource/STM32CubeF0
CMSIS_PATH ?= $(CUBE_PATH)/Drivers/CMSIS
CMSIS_DEV_PATH ?= $(CMSIS_PATH)/Device/ST/STM32F0xx
HAL_PATH ?= $(CUBE_PATH)/Drivers/STM32F0xx_HAL_Driver
MAC_ADDR ?= 0xdeadbeef
CC := arm-none-eabi-gcc
LD := arm-none-eabi-ld
OBJCOPY := arm-none-eabi-objcopy
OBJDUMP := arm-none-eabi-objdump
SIZE := arm-none-eabi-size
CFLAGS = -g -Wall -Wextra -std=gnu11 -O0 -fdump-rtl-expand
CFLAGS += -mlittle-endian -mcpu=cortex-m0 -march=armv6-m -mthumb
#CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS = -nostartfiles
#LDFLAGS += -specs=rdimon.specs -DSEMIHOSTING
LDFLAGS += -Wl,-Map=main.map -nostdlib
#LDFLAGS += -Wl,--gc-sections
LIBS = -lgcc
#LIBS += -lrdimon
# Technically we're using an STM32F030F4, but apart from the TSSOP20 package that one is largely identical to the
# STM32F030*6 and there is no separate device header provided for it, so we're faking a *6 device here. This is
# even documented in stm32f0xx.h. Thanks ST!
CFLAGS += -DSTM32F030x6 -DHSE_VALUE=8000000
LDFLAGS += -Tstm32_flash.ld
CFLAGS += -I$(CMSIS_DEV_PATH)/Include -I$(CMSIS_PATH)/Include -I$(HAL_PATH)/Inc -Iconfig -Wno-unused -I../common
LDFLAGS += -L$(CMSIS_PATH)/Lib/GCC -larm_cortexM0l_math
###################################################
.PHONY: program clean
all: main.elf
.clang:
echo flags = $(CFLAGS) > .clang
cmsis_exports.c: $(CMSIS_DEV_PATH)/Include/stm32f030x6.h $(CMSIS_PATH)/Include/core_cm0.h
python3 tools/gen_cmsis_exports.py $^ > $@
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $^
# $(CC) -E $(CFLAGS) -o $(@:.o=.pp) $^
%.o: %.s
$(CC) -c $(CFLAGS) -o $@ $^
# $(CC) -E $(CFLAGS) -o $(@:.o=.pp) $^
%.dot: %.elf
r2 -a arm -qc 'aa;agC' $< 2>/dev/null >$@
sources.tar.xz: main.c Makefile
tar -caf $@ $^
# don't ask...
sources.tar.xz.zip: sources.tar.xz
zip $@ $^
sources.c: sources.tar.xz.zip
xxd -i $< | head -n -1 | sed 's/=/__attribute__((section(".source_tarball"))) =/' > $@
main.elf: main.c adc.c serial.c cobs.c startup_stm32f030x6.s system_stm32f0xx.c $(HAL_PATH)/Src/stm32f0xx_ll_utils.c base.c cmsis_exports.c
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
$(OBJCOPY) -O ihex $@ $(@:.elf=.hex)
$(OBJCOPY) -O binary $@ $(@:.elf=.bin)
$(OBJDUMP) -St $@ >$(@:.elf=.lst)
$(SIZE) $@
program: main.elf openocd.cfg
openocd -f openocd.cfg -c "program $< verify reset exit"
8b10b_test_encode: 8b10b_test_encode.c 8b10b.c
gcc -o $@ $^
8b10b_test_decode: 8b10b_test_decode.c 8b10b.c
gcc -o $@ $^
protocol_test: protocol.c protocol_test.c
gcc -o $@ -O0 -Wall -Wextra -g -I../common $^
clean:
rm -f **.o
rm -f main.elf main.hex main.bin main.map main.lst
rm -f **.expand
rm -f cmsis_exports.c
rm -f sources.tar.xz
rm -f sources.tar.xz.zip
rm -f sources.c
rm -f *.dot
rm -f protocol_test

906
gm_platform/fw/Scope.ipynb Normal file

File diff suppressed because one or more lines are too long

125
gm_platform/fw/adc.c Normal file
View file

@ -0,0 +1,125 @@
/* Megumin LED display firmware
* Copyright (C) 2018 Sebastian Götte <code@jaseg.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "adc.h"
#include <stdbool.h>
#include <stdlib.h>
volatile uint16_t adc_buf[ADC_BUFSIZE];
static void adc_dma_init(int burstlen);
static void adc_timer_init(int psc, int ivl);
/* Mode that can be used for debugging */
void adc_configure_scope_mode(int sampling_interval_ns) {
adc_dma_init(sizeof(adc_buf)/sizeof(adc_buf[0]));
/* Clock from PCLK/4 instead of the internal exclusive high-speed RC oscillator. */
ADC1->CFGR2 = (2<<ADC_CFGR2_CKMODE_Pos); /* Use PCLK/4=12MHz */
/* Sampling time 239.5 ADC clock cycles -> total conversion time 38.5us*/
ADC1->SMPR = (7<<ADC_SMPR_SMP_Pos);
/* Setup DMA and triggering */
/* Trigger from TIM1 TRGO */
ADC1->CFGR1 = ADC_CFGR1_DMAEN | ADC_CFGR1_DMACFG | (2<<ADC_CFGR1_EXTEN_Pos) | (1<<ADC_CFGR1_EXTSEL_Pos);
ADC1->CHSELR = ADC_CHSELR_CHSEL2;
/* Perform self-calibration */
ADC1->CR |= ADC_CR_ADCAL;
while (ADC1->CR & ADC_CR_ADCAL)
;
/* Enable conversion */
ADC1->CR |= ADC_CR_ADEN;
ADC1->CR |= ADC_CR_ADSTART;
/* An ADC conversion takes 1.1667us, so to be sure we don't get data overruns we limit sampling to every 1.5us.
Since we don't have a spare PLL to generate the ADC sample clock and re-configuring the system clock just for this
would be overkill we round to 250ns increments. The minimum sampling rate is about 60Hz due to timer resolution. */
int cycles = sampling_interval_ns > 1500 ? sampling_interval_ns/250 : 6;
if (cycles > 0xffff)
cycles = 0xffff;
adc_timer_init(12/*250ns/tick*/, cycles);
}
/* FIXME figure out the proper place to configure this. */
#define ADC_TIMER_INTERVAL_US 20
static void adc_dma_init(int burstlen) {
/* Configure DMA 1 Channel 1 to get rid of all the data */
DMA1_Channel1->CPAR = (unsigned int)&ADC1->DR;
DMA1_Channel1->CMAR = (unsigned int)&adc_buf;
DMA1_Channel1->CNDTR = burstlen;
DMA1_Channel1->CCR = (0<<DMA_CCR_PL_Pos);
DMA1_Channel1->CCR |=
DMA_CCR_CIRC /* circular mode so we can leave it running indefinitely */
| (1<<DMA_CCR_MSIZE_Pos) /* 16 bit */
| (1<<DMA_CCR_PSIZE_Pos) /* 16 bit */
| DMA_CCR_MINC
| DMA_CCR_TCIE; /* Enable transfer complete interrupt. */
/* triggered on transfer completion. We use this to process the ADC data */
NVIC_EnableIRQ(DMA1_Channel1_IRQn);
NVIC_SetPriority(DMA1_Channel1_IRQn, 2<<5);
DMA1_Channel1->CCR |= DMA_CCR_EN; /* Enable channel */
}
static void adc_timer_init(int psc, int ivl) {
TIM1->BDTR = TIM_BDTR_MOE; /* MOE is needed even though we only "output" a chip-internal signal TODO: Verify this. */
TIM1->CCMR2 = (6<<TIM_CCMR2_OC4M_Pos); /* PWM Mode 1 to get a clean trigger signal */
TIM1->CCER = TIM_CCER_CC4E; /* Enable capture/compare unit 4 connected to ADC */
TIM1->CCR4 = 1; /* Trigger at start of timer cycle */
/* Set prescaler and interval */
TIM1->PSC = psc-1;
TIM1->ARR = ivl-1;
/* Preload all values */
TIM1->EGR |= TIM_EGR_UG;
TIM1->CR1 = TIM_CR1_ARPE;
/* And... go! */
TIM1->CR1 |= TIM_CR1_CEN;
}
/* This acts as a no-op that provides a convenient point to set a breakpoint for the debug scope logic */
static void gdb_dump(void) {
}
void DMA1_Channel1_IRQHandler(void) {
/* Clear the interrupt flag */
DMA1->IFCR |= DMA_IFCR_CGIF1;
gdb_dump();
/*
static int debug_buf_pos = 0;
if (st->sync) {
if (debug_buf_pos < NCH) {
debug_buf_pos = NCH;
} else {
adc_buf[debug_buf_pos++] = symbol;
if (debug_buf_pos >= sizeof(adc_buf)/sizeof(adc_buf[0])) {
debug_buf_pos = 0;
st->sync = 0;
gdb_dump();
for (int i=0; i<sizeof(adc_buf)/sizeof(adc_buf[0]); i++)
adc_buf[i] = -255;
}
}
}
*/
}

28
gm_platform/fw/adc.h Normal file
View file

@ -0,0 +1,28 @@
/* Megumin LED display firmware
* Copyright (C) 2018 Sebastian Götte <code@jaseg.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __ADC_H__
#define __ADC_H__
#include "global.h"
extern volatile uint16_t adc_buf[ADC_BUFSIZE];
void adc_init(void);
void adc_configure_scope_mode(int sampling_interval_ns);
#endif/*__ADC_H__*/

25
gm_platform/fw/base.c Normal file
View file

@ -0,0 +1,25 @@
#include <unistd.h>
#include <stdbool.h>
int __errno = 0;
void *_impure_ptr = NULL;
void __sinit(void) {
}
void *memset(void *s, int c, size_t n) {
char *end = (char *)s + n;
for (char *p = (char *)s; p < end; p++)
*p = (char)c;
return s;
}
size_t strlen(const char *s) {
const char *start = s;
while (*s++);
return s - start - 1;
}
void __assert_func(bool value) {
}

View file

@ -0,0 +1,48 @@
#ifndef __GENERATED_CMSIS_HEADER_EXPORTS__
#define __GENERATED_CMSIS_HEADER_EXPORTS__
#include <stm32f030x6.h>
/* stm32f030x6.h */
TIM_TypeDef *tim3 = TIM3;
TIM_TypeDef *tim14 = TIM14;
RTC_TypeDef *rtc = RTC;
WWDG_TypeDef *wwdg = WWDG;
IWDG_TypeDef *iwdg = IWDG;
I2C_TypeDef *i2c1 = I2C1;
PWR_TypeDef *pwr = PWR;
SYSCFG_TypeDef *syscfg = SYSCFG;
EXTI_TypeDef *exti = EXTI;
ADC_TypeDef *adc1 = ADC1;
ADC_Common_TypeDef *adc1_common = ADC1_COMMON;
ADC_Common_TypeDef *adc = ADC;
TIM_TypeDef *tim1 = TIM1;
SPI_TypeDef *spi1 = SPI1;
USART_TypeDef *usart1 = USART1;
TIM_TypeDef *tim16 = TIM16;
TIM_TypeDef *tim17 = TIM17;
DBGMCU_TypeDef *dbgmcu = DBGMCU;
DMA_TypeDef *dma1 = DMA1;
DMA_Channel_TypeDef *dma1_channel1 = DMA1_Channel1;
DMA_Channel_TypeDef *dma1_channel2 = DMA1_Channel2;
DMA_Channel_TypeDef *dma1_channel3 = DMA1_Channel3;
DMA_Channel_TypeDef *dma1_channel4 = DMA1_Channel4;
DMA_Channel_TypeDef *dma1_channel5 = DMA1_Channel5;
FLASH_TypeDef *flash = FLASH;
OB_TypeDef *ob = OB;
RCC_TypeDef *rcc = RCC;
CRC_TypeDef *crc = CRC;
GPIO_TypeDef *gpioa = GPIOA;
GPIO_TypeDef *gpiob = GPIOB;
GPIO_TypeDef *gpioc = GPIOC;
GPIO_TypeDef *gpiod = GPIOD;
GPIO_TypeDef *gpiof = GPIOF;
#include <core_cm0.h>
/* core_cm0.h */
SCB_Type *scb = SCB;
SysTick_Type *systick = SysTick;
NVIC_Type *nvic = NVIC;
#endif//__GENERATED_CMSIS_HEADER_EXPORTS__

293
gm_platform/fw/cobs.c Normal file
View file

@ -0,0 +1,293 @@
#include "serial.h"
#include "cobs.h"
/*@ requires \valid(dst + (0..dstlen-1));
@ requires \valid_read(src + (0..srclen-1));
@ requires \separated(dst + (0..dstlen-1), src + (0..srclen-1));
@
@ behavior valid:
@ assumes 0 <= srclen <= 254;
@ assumes 0 <= dstlen <= 65535;
@ assumes dstlen >= srclen+2;
@ assigns dst[0..srclen+1];
@ ensures \forall integer i; (0 <= i < srclen && \old(src[i]) != 0) ==> dst[i+1] == src[i];
@ ensures \result == srclen+2;
@ ensures \forall integer i; 0 <= i <= srclen ==> dst[i] != 0;
@ ensures dst[srclen+1] == 0;
@
@ behavior invalid:
@ assumes srclen < 0 || srclen > 254
@ || dstlen < 0 || dstlen > 65535
@ || dstlen < srclen+2;
@ assigns \nothing;
@ ensures \result == -1;
@
@ complete behaviors;
@ disjoint behaviors;
@*/
ssize_t cobs_encode(char *dst, size_t dstlen, char *src, size_t srclen) {
if (dstlen > 65535 || srclen > 254)
return -1;
//@ assert 0 <= dstlen <= 65535 && 0 <= srclen <= 254;
if (dstlen < srclen+2)
return -1;
//@ assert 0 <= srclen < srclen+2 <= dstlen;
size_t p = 0;
/*@ loop invariant 0 <= p <= srclen+1;
@ loop invariant \forall integer i; 0 <= i < p ==> dst[i] != 0;
@ loop invariant \forall integer i; 0 < i < p ==> (src[i-1] != 0 ==> dst[i] == src[i-1]);
@ loop assigns p, dst[0..srclen+1];
@ loop variant srclen-p+1;
@*/
while (p <= srclen) {
char val;
if (p != 0 && src[p-1] != 0) {
val = src[p-1];
} else {
size_t q = p;
/*@ loop invariant 0 <= p <= q <= srclen;
@ loop invariant \forall integer i; p <= i < q ==> src[i] != 0;
@ loop assigns q;
@ loop variant srclen-q;
@*/
while (q < srclen && src[q] != 0)
q++;
//@ assert q == srclen || src[q] == 0;
//@ assert q <= srclen <= 254;
val = (char)q-p+1;
//@ assert val != 0;
}
dst[p] = val;
p++;
}
dst[p] = 0;
//@ assert p == srclen+1;
return srclen+2;
}
int cobs_encode_usart(char *src, size_t srclen) {
if (srclen > 254)
return -1;
//@ assert 0 <= srclen <= 254;
size_t p = 0;
/*@ loop invariant 0 <= p <= srclen+1;
@ loop assigns p;
@ loop variant srclen-p+1;
@*/
while (p <= srclen) {
char val;
if (p != 0 && src[p-1] != 0) {
val = src[p-1];
} else {
size_t q = p;
/*@ loop invariant 0 <= p <= q <= srclen;
@ loop invariant \forall integer i; p <= i < q ==> src[i] != 0;
@ loop assigns q;
@ loop variant srclen-q;
@*/
while (q < srclen && src[q] != 0)
q++;
//@ assert q == srclen || src[q] == 0;
//@ assert q <= srclen <= 254;
val = (char)q-p+1;
//@ assert val != 0;
}
usart_putc(val);
p++;
}
usart_putc(0);
//@ assert p == srclen+1;
return 0;
}
/*@ requires \valid(dst + (0..dstlen-1));
@ requires \valid_read(src + (0..srclen-1));
@ requires \separated(dst + (0..dstlen-1), src + (0..srclen-1));
@
@ behavior maybe_valid_frame:
@ assumes 1 <= srclen <= dstlen <= 65535;
@ assumes \exists integer j; j > 0 && \forall integer i; 0 <= i < j ==> src[i] != 0;
@ assumes \exists integer i; 0 <= i < srclen && src[i] == 0;
@ assigns dst[0..dstlen-1];
@ ensures \result >= 0 || \result == -3;
@ ensures \result >= 0 ==> src[\result+1] == 0;
@ ensures \result >= 0 ==> (\forall integer i; 0 <= i < \result ==> src[i] != 0);
@
@ behavior invalid_frame:
@ assumes 1 <= srclen <= dstlen <= 65535;
@ assumes src[0] == 0 || \forall integer i; 0 <= i < srclen ==> src[i] != 0;
@ assigns dst[0..dstlen-1];
@ ensures \result == -2;
@
@ behavior invalid_buffers:
@ assumes dstlen < 0 || dstlen > 65535
@ || srclen < 1 || srclen > 65535
@ || dstlen < srclen;
@ assigns \nothing;
@ ensures \result == -1;
@
@ complete behaviors;
@ disjoint behaviors;
@*/
ssize_t cobs_decode(char *dst, size_t dstlen, char *src, size_t srclen) {
if (dstlen > 65535 || srclen > 65535)
return -1;
if (srclen < 1)
return -1;
if (dstlen < srclen)
return -1;
size_t p = 1;
size_t c = (unsigned char)src[0];
//@ assert 0 <= c < 256;
//@ assert 0 <= c;
//@ assert c < 256;
if (c == 0)
return -2; /* invalid framing. An empty frame would be [...] 00 01 00, not [...] 00 00 */
//@ assert c >= 0;
//@ assert c != 0;
//@ assert c <= 257;
//@ assert c > 0;
//@ assert c >= 0 && c != 0 ==> c > 0;
/*@ //loop invariant \forall integer i; 0 <= i <= p ==> (i == srclen || src[i] != 0);
@ loop invariant \forall integer i; 1 <= i < p ==> src[i] != 0;
@ loop invariant c > 0;
@ loop invariant 1 <= p <= srclen <= dstlen <= 65535;
@ loop invariant \separated(dst + (0..dstlen-1), src + (0..srclen-1));
@ loop invariant \valid_read(src + (0..srclen-1));
@ loop invariant \forall integer i; 1 <= i <= srclen ==> \valid(dst + i - 1);
@ loop assigns dst[0..dstlen-1], p, c;
@ loop variant srclen-p;
@*/
while (p < srclen && src[p]) {
char val;
c--;
//@ assert src[p] != 0;
if (c == 0) {
c = (unsigned char)src[p];
val = 0;
} else {
val = src[p];
}
//@ assert 0 <= p-1 <= dstlen-1;
dst[p-1] = val;
p++;
}
if (p == srclen)
return -2; /* Invalid framing. The terminating null byte should always be present in the input buffer. */
if (c != 1)
return -3; /* Invalid framing. The skip counter does not hit the end of the frame. */
//@ assert 0 < p <= srclen <= 65535;
//@ assert src[p] == 0;
//@ assert \forall integer i; 1 <= i < p ==> src[i] != 0;
return p-1;
}
void cobs_decode_incremental_initialize(struct cobs_decode_state *state) {
state->p = 0;
state->c = 0;
}
int cobs_decode_incremental(struct cobs_decode_state *state, char *dst, size_t dstlen, char src) {
if (state->p == 0) {
if (src == 0)
goto empty_errout; /* invalid framing. An empty frame would be [...] 00 01 00, not [...] 00 00 */
state->c = (unsigned char)src;
state->p++;
return 0;
}
if (!src) {
if (state->c != 1)
goto errout; /* Invalid framing. The skip counter does not hit the end of the frame. */
int rv = state->p-1;
cobs_decode_incremental_initialize(state);
return rv;
}
char val;
state->c--;
if (state->c == 0) {
state->c = (unsigned char)src;
val = 0;
} else {
val = src;
}
size_t pos = state->p-1;
if (pos >= dstlen)
return -2; /* output buffer too small */
dst[pos] = val;
state->p++;
return 0;
errout:
cobs_decode_incremental_initialize(state);
return -1;
empty_errout:
cobs_decode_incremental_initialize(state);
return -3;
}
#ifdef VALIDATION
/*@
@ requires 0 <= d < 256;
@ assigns \nothing;
@*/
size_t test(char foo, unsigned int d) {
unsigned int c = (unsigned char)foo;
if (c != 0) {
//@ assert c < 256;
//@ assert c >= 0;
//@ assert c != 0;
//@ assert c > 0;
}
if (d != 0) {
//@ assert d >= 0;
//@ assert d != 0;
//@ assert d > 0;
}
return c + d;
}
#include <__fc_builtin.h>
void main(void) {
char inbuf[254];
char cobsbuf[256];
char outbuf[256];
size_t range = Frama_C_interval(0, sizeof(inbuf));
Frama_C_make_unknown((char *)inbuf, range);
cobs_encode(cobsbuf, sizeof(cobsbuf), inbuf, sizeof(inbuf));
cobs_decode(outbuf, sizeof(outbuf), cobsbuf, sizeof(cobsbuf));
//@ assert \forall integer i; 0 <= i < sizeof(inbuf) ==> outbuf[i] == inbuf[i];
}
#endif//VALIDATION

23
gm_platform/fw/cobs.h Normal file
View file

@ -0,0 +1,23 @@
#ifndef __COBS_H__
#define __COBS_H__
#include <stdint.h>
#include <unistd.h>
#include <string.h>
struct cobs_decode_state {
size_t p;
size_t c;
};
ssize_t cobs_encode(char *dst, size_t dstlen, char *src, size_t srclen);
ssize_t cobs_decode(char *dst, size_t dstlen, char *src, size_t srclen);
int cobs_encode_usart(char *src, size_t srclen);
void cobs_decode_incremental_initialize(struct cobs_decode_state *state);
int cobs_decode_incremental(struct cobs_decode_state *state, char *dst, size_t dstlen, char src);
#endif//__COBS_H__

52
gm_platform/fw/global.h Normal file
View file

@ -0,0 +1,52 @@
/* Megumin LED display firmware
* Copyright (C) 2018 Sebastian Götte <code@jaseg.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GLOBAL_H__
#define __GLOBAL_H__
/* Workaround for sub-par ST libraries */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#include <stm32f0xx.h>
#include <stm32f0xx_ll_utils.h>
#include <stm32f0xx_ll_spi.h>
#pragma GCC diagnostic pop
#include <system_stm32f0xx.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
/* Microcontroller part number: STM32F030F4P6 */
/* Things used for module status reporting. */
#define FIRMWARE_VERSION 1
#define HARDWARE_VERSION 0
#define TS_CAL1 (*(uint16_t *)0x1FFFF7B8)
#define VREFINT_CAL (*(uint16_t *)0x1FFFF7BA)
#define ADC_BUFSIZE 1024
extern volatile unsigned int sys_time;
extern volatile unsigned int sys_time_seconds;
#define UNUSED(var) ((void)var)
#endif/*__GLOBAL_H__*/

BIN
gm_platform/fw/main.bin Executable file

Binary file not shown.

175
gm_platform/fw/main.c Normal file
View file

@ -0,0 +1,175 @@
/* Megumin LED display firmware
* Copyright (C) 2018 Sebastian Götte <code@jaseg.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "global.h"
#include "adc.h"
#include "serial.h"
volatile unsigned int sys_time_seconds = 0;
void update_leds() {
}
volatile union {
struct {
unsigned int usb, ocxo, error, _nc1, _nc2, _nc3, pps, sd_card;
};
unsigned int arr[0];
} leds;
int main(void) {
RCC->CR |= RCC_CR_HSEON;
while (!(RCC->CR&RCC_CR_HSERDY));
RCC->CFGR &= ~RCC_CFGR_PLLMUL_Msk & ~RCC_CFGR_SW_Msk & ~RCC_CFGR_PPRE_Msk & ~RCC_CFGR_HPRE_Msk;
RCC->CFGR |= ((6-2)<<RCC_CFGR_PLLMUL_Pos) | RCC_CFGR_PLLSRC_HSE_PREDIV; /* PLL x6 -> 48.0MHz */
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR&RCC_CR_PLLRDY));
RCC->CFGR |= (2<<RCC_CFGR_SW_Pos);
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock/10); /* 100ms interval */
NVIC_EnableIRQ(SysTick_IRQn);
NVIC_SetPriority(SysTick_IRQn, 3<<5);
/* Turn on lots of neat things */
RCC->AHBENR |= RCC_AHBENR_DMAEN | RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_FLITFEN;
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN | RCC_APB2ENR_ADCEN | RCC_APB2ENR_SPI1EN | RCC_APB2ENR_DBGMCUEN |\
RCC_APB2ENR_TIM1EN | RCC_APB2ENR_TIM16EN | RCC_APB2ENR_USART1EN;
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
GPIOA->MODER |=
(3<<GPIO_MODER_MODER2_Pos) /* PA2 - LINE_MEAS */
| (1<<GPIO_MODER_MODER3_Pos) /* PA3 - LED_STB */
| (1<<GPIO_MODER_MODER4_Pos) /* PA4 - SD_CS */
| (2<<GPIO_MODER_MODER5_Pos) /* PA5 - SCK */
| (2<<GPIO_MODER_MODER6_Pos) /* PA6 - MISO */
| (2<<GPIO_MODER_MODER7_Pos) /* PA7 - MOSI */
| (2<<GPIO_MODER_MODER9_Pos) /* PA9 - HOST_RX */
| (2<<GPIO_MODER_MODER10_Pos);/* PA10 - HOST_TX */
/* Set shift register IO GPIO output speed */
GPIOA->OSPEEDR |=
(2<<GPIO_OSPEEDR_OSPEEDR3_Pos) /* LED_STB */
| (2<<GPIO_OSPEEDR_OSPEEDR4_Pos) /* SD_CS */
| (2<<GPIO_OSPEEDR_OSPEEDR5_Pos) /* SCK */
| (2<<GPIO_OSPEEDR_OSPEEDR7_Pos) /* MOSI */
| (2<<GPIO_OSPEEDR_OSPEEDR9_Pos); /* HOST_RX */
GPIOA->AFR[0] = (0<<GPIO_AFRL_AFRL5_Pos) | (0<<GPIO_AFRL_AFRL6_Pos) | (0<<GPIO_AFRL_AFRL7_Pos);
GPIOA->AFR[1] = (1<<8) | (1<<4);
GPIOB->MODER |=
(0<<GPIO_MODER_MODER1_Pos); /* PB0 - LINE_POL */
SPI1->CR1 =
SPI_CR1_SSM
| SPI_CR1_SSI
| (4<<SPI_CR1_BR_Pos) /* /32 ~1.5MHz */
| SPI_CR1_MSTR;
SPI1->CR2 = (7<<SPI_CR2_DS_Pos);
SPI1->CR1 |= SPI_CR1_SPE;
NVIC_EnableIRQ(SPI1_IRQn);
NVIC_SetPriority(SPI1_IRQn, 2<<5);
TIM16->CR2 = 0;
TIM16->DIER = TIM_DIER_UIE;
TIM16->PSC = 48-1; /* 1us */
TIM16->ARR = 1000-1; /* 1ms */
TIM16->CR1 = TIM_CR1_CEN;
NVIC_EnableIRQ(TIM16_IRQn);
NVIC_SetPriority(TIM16_IRQn, 2<<5);
adc_configure_scope_mode(1000000);
usart_dma_init();
while (42) {
char *data = "FOOBAR\n";
usart_send_packet((uint8_t*)data, 8);
for (int i=0; i<100000; i++);
//int pol = GPIOB->IDR & (1<<1); /* Sample current polarity */
//leds.error = pol ? 100 : 0;
//for (int i=0; i<10000; i++) ;
//leds.error = 100;
}
}
void SPI1_IRQHandler(void) {
if (SPI1->SR & SPI_SR_TXE) {
/* LED_STB */
GPIOA->BSRR = 1<<3;
SPI1->CR2 &= ~SPI_CR2_TXEIE;
}
}
void TIM16_IRQHandler(void) {
static int leds_update_counter = 0;
if (TIM16->SR & TIM_SR_UIF) {
TIM16->SR &= ~TIM_SR_UIF;
uint8_t bits = 0, mask = 1;
for (size_t i=0; i<sizeof(leds)/sizeof(leds.arr[0]); i++) {
if (leds.arr[i]) {
leds.arr[i]--;
bits |= mask;
}
mask <<= 1;
}
if (leds_update_counter++ == 10) {
leds_update_counter = 0;
/* Workaround for SPI hardware bug: Even if configured to 8-bit mode, the SPI will do a 16-bit transfer if the
* data register is accessed through a 16-bit write. Unfortunately, the STMCube register defs define DR as an
* uint16_t, so we have to do some magic here to force an 8-bit write. */
*((volatile uint8_t*)&(SPI1->DR)) = bits;
SPI1->CR2 |= SPI_CR2_TXEIE;
GPIOA->BRR = 1<<3;
}
}
}
void NMI_Handler(void) {
asm volatile ("bkpt");
}
void HardFault_Handler(void) __attribute__((naked));
void HardFault_Handler() {
asm volatile ("bkpt");
}
void SVC_Handler(void) {
asm volatile ("bkpt");
}
void PendSV_Handler(void) {
asm volatile ("bkpt");
}
void SysTick_Handler(void) {
static int n = 0;
if (n++ == 10) {
n = 0;
sys_time_seconds++;
leds.pps = 100; /* ms */
}
}

162
gm_platform/fw/main.c.bak Normal file
View file

@ -0,0 +1,162 @@
/* Megumin LED display firmware
* Copyright (C) 2018 Sebastian Götte <code@jaseg.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "global.h"
#include "adc.h"
volatile unsigned int sys_time = 0;
volatile unsigned int sys_time_seconds = 0;
void TIM1_BRK_UP_TRG_COM_Handler() {
TIM1->SR &= ~TIM_SR_UIF_Msk;
}
int main(void) {
RCC->CR |= RCC_CR_HSEON;
while (!(RCC->CR&RCC_CR_HSERDY));
RCC->CFGR &= ~RCC_CFGR_PLLMUL_Msk & ~RCC_CFGR_SW_Msk & ~RCC_CFGR_PPRE_Msk & ~RCC_CFGR_HPRE_Msk;
RCC->CFGR |= ((6-2)<<RCC_CFGR_PLLMUL_Pos) | RCC_CFGR_PLLSRC_HSE_PREDIV; /* PLL x6 -> 48.0MHz */
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR&RCC_CR_PLLRDY));
RCC->CFGR |= (2<<RCC_CFGR_SW_Pos);
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock/1000); /* 1ms interval */
/* Turn on lots of neat things */
RCC->AHBENR |= RCC_AHBENR_DMAEN | RCC_AHBENR_GPIOAEN | RCC_AHBENR_FLITFEN;
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN | RCC_APB2ENR_ADCEN| RCC_APB2ENR_DBGMCUEN | RCC_APB2ENR_TIM1EN | RCC_APB2ENR_TIM1EN;;
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
GPIOA->MODER |=
(3<<GPIO_MODER_MODER0_Pos) /* PA0 - Vmeas_A to ADC */
| (3<<GPIO_MODER_MODER1_Pos) /* PA1 - Vmeas_B to ADC */
| (1<<GPIO_MODER_MODER2_Pos) /* PA2 - LOAD */
| (1<<GPIO_MODER_MODER3_Pos) /* PA3 - CH0 */
| (1<<GPIO_MODER_MODER4_Pos) /* PA4 - CH3 */
| (0<<GPIO_MODER_MODER5_Pos) /* PA5 - TP1 */
| (1<<GPIO_MODER_MODER6_Pos) /* PA6 - CH2 */
| (1<<GPIO_MODER_MODER7_Pos) /* PA7 - CH1 */
| (0<<GPIO_MODER_MODER9_Pos) /* PA9 - TP2 */
| (0<<GPIO_MODER_MODER10_Pos);/* PA10 - TP3 */
/* Set shift register IO GPIO output speed */
GPIOA->OSPEEDR |=
(2<<GPIO_OSPEEDR_OSPEEDR2_Pos) /* LOAD */
| (2<<GPIO_OSPEEDR_OSPEEDR3_Pos) /* CH0 */
| (2<<GPIO_OSPEEDR_OSPEEDR4_Pos) /* CH3 */
| (2<<GPIO_OSPEEDR_OSPEEDR6_Pos) /* CH2 */
| (2<<GPIO_OSPEEDR_OSPEEDR7_Pos); /* CH1 */
/* Setup CC1 and CC2. CC2 generates the LED drivers' STROBE, CC1 triggers the IRQ handler */
TIM1->BDTR = TIM_BDTR_MOE;
TIM1->CCMR2 = (6<<TIM_CCMR2_OC4M_Pos); /* PWM Mode 1 */
TIM1->CCER = TIM_CCER_CC4E;
TIM1->CCR4 = 1;
TIM1->DIER = TIM_DIER_UIE;
TIM1->PSC = SystemCoreClock/500000 - 1; /* 0.5us/tick */
TIM1->ARR = 25-1;
/* Preload all values */
TIM1->EGR |= TIM_EGR_UG;
TIM1->CR1 = TIM_CR1_ARPE;
/* And... go! */
TIM1->CR1 |= TIM_CR1_CEN;
void set_outputs(uint8_t val) {
int a=!!(val&1), b=!!(val&2), c=!!(val&4), d=!!(val&8);
GPIOA->ODR &= ~(!a<<3 | !b<<7 | c<<6 | d<<4);
GPIOA->ODR |= a<<3 | b<<7 | !c<<6 | !d<<4;
}
set_outputs(0);
adc_init();
uint8_t out_state = 0x01;
#define DEBOUNCE 100
int debounce_ctr = 0;
int val_last = 0;
int ctr = 0;
#define RESET 1000
int reset_ctr = 0;
while (42) {
#define FOO 500000
if (reset_ctr)
reset_ctr--;
else
set_outputs(0);
if (debounce_ctr) {
debounce_ctr--;
} else {
int val = !!(GPIOA->IDR & 1);
debounce_ctr = DEBOUNCE;
if (val != val_last) {
if (val)
set_outputs(out_state & 0xf);
else
set_outputs(out_state >> 4);
reset_ctr = RESET;
val_last = val;
ctr++;
if (ctr == 100) {
ctr = 0;
out_state = out_state<<1 | out_state>>7;
}
}
}
/*
for (int i=0; i<FOO; i++) ;
set_outputs(0x1);
for (int i=0; i<FOO; i++) ;
set_outputs(0x2);
for (int i=0; i<FOO; i++) ;
set_outputs(0x4);
for (int i=0; i<FOO; i++) ;
set_outputs(0x8);
*/
//for (int i=0; i<8*FOO; i++) ;
//GPIOA->ODR ^= 4;
}
}
void NMI_Handler(void) {
}
void HardFault_Handler(void) __attribute__((naked));
void HardFault_Handler() {
asm volatile ("bkpt");
}
void SVC_Handler(void) {
}
void PendSV_Handler(void) {
}
void SysTick_Handler(void) {
static int n = 0;
sys_time++;
if (n++ == 1000) {
n = 0;
sys_time_seconds++;
}
}

BIN
gm_platform/fw/main.elf Executable file

Binary file not shown.

414
gm_platform/fw/main.hex Normal file
View file

@ -0,0 +1,414 @@
:020000040800F2
:100000000010002095180008B1040008BD04000885
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000C104000803
:100030000000000000000000CD040008D904000802
:10004000E118000800000000E1180008E1180008AD
:10005000E1180008E1180008E1180008E11800089C
:1000600000000000930700085D0A0008E11800087E
:10007000E1180008E1180008E1180008000000007D
:10008000E11800080000000000000000E11800086E
:1000900000000000F5030008E1180008E11800085E
:1000A00000000000C903000800000000E11800087B
:1000B0000000000000000000000000000000000040
:1000C00080B582B000AF0200FB1D1A70FB1D1B78CB
:1000D0001A001F231A40044B012191400A001A60A4
:1000E000C046BD4602B080BD00E100E090B583B0DF
:1000F00000AF02003960FB1D1A70FB1D1B787F2BBF
:1001000032D92F4AFB1D1B7819000F230B40083BE7
:100110009B0806339B00D31804331B68FA1D127822
:10012000110003220A40D200FF2191400A00D2436D
:100130001A4011003B689B01FF221A40FB1D1B78EF
:10014000180003230340DB009A401D48FB1D1B7869
:100150001C000F232340083B9B080A4306339B00E7
:10016000C31804331A6027E0164AFB1D1B785BB2E4
:100170009B08C0339B009B58FA1D12781100032284
:100180000A40D200FF2191400A00D2431A401100D8
:100190003B689B01FF221A40FB1D1B7818000323BC
:1001A0000340DB009A400748FB1D1B785BB29B08AD
:1001B0000A43C0339B001A50C046BD4603B090BDF1
:1001C00000ED00E000E100E080B582B000AF7860B3
:1001D0007B685A1E80235B049A4201D3012310E0FE
:1001E0000A4B7A68013A5A6001235B4203211800E6
:1001F000FFF77CFF054B00229A60044B07221A6030
:1002000000231800BD4602B080BDC04610E000E0EB
:1002100080B500AFC046BD4680BD80B582B000AF9E
:100220005B4B1A685A4B802149020A431A60C04648
:10023000574B1A6880239B021340F9D0544B5A68DD
:10024000534B54490A405A60514B5A68504B8821CD
:1002500049030A435A604E4B1A684D4B80214904AA
:100260000A431A60C0464A4B1A6880239B04134015
:10027000F9D0474B5A68464B02210A435A6000F0B6
:1002800011FE454B1B680A21180001F08DF903008F
:100290001800FFF799FF01235B421800FFF710FFDA
:1002A00001235B4260211800FFF720FF384B5A6999
:1002B000374B3A490A435A61354B9A69344B3849AE
:1002C0000A439A61324BDA69314B02210A43DA61FF
:1002D0009023DB051A689023DB0532490A431A6034
:1002E0009023DB059A689023DB052F490A439A6027
:1002F0009023DB0500221A629023DB05882252003E
:100300005A622A4A294B12681A60294BC922920064
:100310001A60274BE022D2005A60254B1A68244B02
:1003200040210A431A601920FFF7CAFE4021192014
:10033000FFF7DCFE1F4B00225A601E4B0122DA60E1
:100340001C4B2F229A621B4B1B4ADA62194B01226B
:100350001A601520FFF7B4FE40211520FFF7C6FEF6
:10036000164B180000F05AF900F0BEFA144B3B602F
:100370003B680821180000F091FB00237B6002E03D
:100380007B6801337B607B680E4A9342F8DDEDE7C2
:10039000001002400CF8C3FF00000020110006000E
:1003A000015A420070A92800808A08000004004811
:1003B0000030014000440140E703000040420F00CC
:1003C000E41800089F86010080B500AF084B9B68C9
:1003D0000222134009D09023DB0508229A61044BC6
:1003E0005A68034B80218A435A60C046BD4680BD8F
:1003F0000030014080B582B000AF284B1B6901225C
:10040000134047D0254B1A69244B01218A431A61B6
:10041000FB1D00221A70BB1D01221A7000233B60D5
:100420001DE01F4B3A689200D358002B0FD01C4B95
:100430003A689200D358591E194B3A689200D1502D
:10044000FB1DF91DBA1D097812780A431A70BA1DEE
:10045000BB1D1B78DB1813703B6801333B603B68A6
:10046000072BDED90F4B1B68591C0E4A11600A2B53
:1004700010D10C4B00221A600B4AFB1D1B78137025
:100480000A4B5A68094B80210A435A609023DB05C6
:1004900008229A62C046BD4602B080BD00440140B9
:1004A000A8000020980000200C30014000300140DE
:1004B00080B500AF00BEC046BD4680BD00BEC04690
:1004C00080B500AF00BEC046BD4680BD80B500AF60
:1004D00000BEC046BD4680BD80B500AF0A4B1B685C
:1004E000591C094A11600A2B0AD1074B00221A60D5
:1004F000064B1B685A1C054B1A60054B64229A6117
:10050000C046BD4680BDC0469C000020940000202F
:10051000A800002080B582B000AF0200FB1D1A7059
:10052000FB1D1B781A001F231A40044B0121914028
:100530000A001A60C046BD4602B080BD00E100E07E
:1005400090B583B000AF02003960FB1D1A70FB1D2F
:100550001B787F2B32D92F4AFB1D1B7819000F23E4
:100560000B40083B9B0806339B00D31804331B68E1
:10057000FA1D1278110003220A40D200FF21914097
:100580000A00D2431A4011003B689B01FF221A4027
:10059000FB1D1B78180003230340DB009A401D4815
:1005A000FB1D1B781C000F232340083B9B080A43BC
:1005B00006339B00C31804331A6027E0164AFB1D5C
:1005C0001B785BB29B08C0339B009B58FA1D1278C6
:1005D000110003220A40D200FF2191400A00D243B9
:1005E0001A4011003B689B01FF221A40FB1D1B783B
:1005F000180003230340DB009A400748FB1D1B78CB
:100600005BB29B080A43C0339B001A50C046BD46EC
:1006100003B090BD00ED00E000E100E080B584B0E3
:1006200000AF78608023DB00180000F04BF8214B0E
:10063000802212061A611F4B07225A611D4B1E4A67
:10064000DA601C4B04229A621A4B9A68194B80217B
:1006500009060A439A60C046164B9B68002BFBDBD9
:10066000144B9A68134B01210A439A60114B9A6804
:10067000104B04210A439A607B68104A934206DDBE
:100680007B68FA21180001F019F8030000E0062346
:10069000FB60FA6880235B029A4201DB084BFB6037
:1006A000FB6819000C2000F03DF8C046BD4604B0C0
:1006B00080BDC0460024014043080000DC05000066
:1006C000FFFF000080B582B000AF7860114B124A86
:1006D0009A60104B114ADA600E4B7A685A600D4BE3
:1006E00000221A600B4B1A680A4B0D490A431A6024
:1006F0000920FFF70FFF40210920FFF721FF054BDD
:100700001A68044B01210A431A60C046BD4602B074
:1007100080BDC0460800024040240140C8000020BF
:10072000A205000080B582B000AF78603960154B3B
:10073000802212025A64134BC022D201DA61114B9B
:10074000802252011A620F4B01221A647B685A1EE2
:100750000C4B9A623B685A1E0A4BDA62094B5A6983
:10076000084B01210A435A61064B80221A60054B4F
:100770001A68044B01210A431A60C046BD4602B004
:1007800080BDC046002C014080B500AFC046BD46CC
:1007900080BD80B500AF054B5A68044B01210A4368
:1007A0005A60FFF7F1FFC046BD4680BD0000024021
:1007B00080B582B000AF0200FB1D1A70FB1D1B78D4
:1007C0001A001F231A40044B012191400A001A60AD
:1007D000C046BD4602B080BD00E100E080B582B0F9
:1007E00000AF0200FB1D1A70FB1D1B781A001F23AF
:1007F0001340054901229A40130080228B50C046C5
:10080000BD4602B080BDC04600E100E090B583B0B7
:1008100000AF02003960FB1D1A70FB1D1B787F2B97
:1008200032D92F4AFB1D1B7819000F230B40083BC0
:100830009B0806339B00D31804331B68FA1D1278FB
:10084000110003220A40D200FF2191400A00D24346
:100850001A4011003B689B01FF221A40FB1D1B78C8
:10086000180003230340DB009A401D48FB1D1B7842
:100870001C000F232340083B9B080A4306339B00C0
:10088000C31804331A6027E0164AFB1D1B785BB2BD
:100890009B08C0339B009B58FA1D1278110003225D
:1008A0000A40D200FF2191400A00D2431A401100B1
:1008B0003B689B01FF221A40FB1D1B781800032395
:1008C0000340DB009A400748FB1D1B785BB29B0886
:1008D0000A43C0339B001A50C046BD4603B090BDCA
:1008E00000ED00E000E100E080B500AF174B012211
:1008F00052421A60154B00225A60144B00229A6033
:10090000134B144A9A60124B92221A600A20FFF786
:100910004FFF20210A20FFF779FF0F4B0F4A1A6083
:100920000D4B3022DA600C4BC02292025A600A4B07
:100930009A68094B80210A439A60074B1A68064B54
:1009400001210A431A60C046BD4680BDC808002088
:100950001C00024028380140003801402C200000D3
:1009600080B584B000AF194BBB60BB685B687B602F
:10097000BB689B687A689A4205D2BB689A687B68B4
:10098000D31AFB6004E07B6880225200D31AFB601C
:10099000BB687A681A607A68FB68D318FF221A402D
:1009A000BB685A60BB680C331A007B68D218084BCE
:1009B000DA60074BFA685A60054B1A68044B01214C
:1009C0000A431A60C046BD4604B080BDC808002076
:1009D0001C00024080B582B000AF78600A00FB1CAA
:1009E0001A700A20FFF7FAFE7B689A687B681B681A
:1009F0009A4205D10A20FFF7DBFE10235B4211E08B
:100A00007B689B687A68D318FA1C12781A737B6823
:100A10009B680133FF221A407B689A600A20FFF727
:100A2000C7FE00231800BD4602B080BD80B582B06D
:100A300000AF0200FB1D1A70C046FB1D1A78064B62
:100A400011001800FFF7C6FF03001033F5D0C046B1
:100A5000C046BD4602B080BDC808002080B500AFCA
:100A60000B4B5A680A4B20210A435A60094B1A68FB
:100A7000084B01218A431A60074B9A68064B5B6852
:100A80009A4201D0FFF76CFFC046BD4680BDC0460C
:100A9000000002401C000240C808002080B582B05F
:100AA00000AF786039603A687B681100180000F088
:100AB00070F8054B1B680122134001D1FFF750FF6E
:100AC000C046BD4602B080BD1C00024080B588B063
:100AD00000AFF860B9607A603B60BA6880235B025F
:100AE0009A4202D23B68FE2B02D901235B424CE0C2
:100AF0003B680233BA689A4202D201235B4244E067
:100B00000023FB6136E0FB69002B0FD0FB69013B42
:100B10007A68D3181B78002B08D0FB69013B7A68F0
:100B2000D2181B23FB1812781A7019E0FB697B613D
:100B300002E07B6901337B617A693B689A4205D2A6
:100B40007A687B69D3181B78002BF2D17B69DAB203
:100B5000FB69DBB2D31ADAB21B23FB1801321A701D
:100B6000FA68FB69D3181B22BA1812781A70FB694D
:100B70000133FB61FA693B689A42C4D9FA68FB69A0
:100B8000D31800221A703B6802331800BD4608B023
:100B900080BD80B586B000AF786039603B68FE2BC1
:100BA00002D901235B4240E000237B6135E07B6991
:100BB000002B0FD07B69013B7A68D3181B78002B80
:100BC00008D07B69013B7A68D2181323FB1812788E
:100BD0001A7019E07B69FB6002E0FB680133FB607F
:100BE000FA683B689A4205D27A68FB68D3181B788A
:100BF000002BF2D1FB68DAB27B69DBB2D31ADAB22E
:100C00001323FB1801321A701323FB181B781800EA
:100C1000FFF70CFF7B6901337B617A693B689A427D
:100C2000C5D90020FFF702FF00231800BD4606B01B
:100C300080BD80B588B000AFF860B9607A603B6075
:100C4000BA6880235B029A4204D23A6880235B022E
:100C50009A4202D301235B4252E03B68002B02D14F
:100C600001235B424CE0BA683B689A4202D20123FE
:100C70005B4245E00123FB617B681B78BB61BB697C
:100C8000002B24D102235B423AE0BB69013BBB61EC
:100C9000BB69002B09D17A68FB69D3181B78BB614B
:100CA0001723FB1800221A7006E07A68FB69D21835
:100CB0001723FB1812781A70FB69013BFA68D318E6
:100CC0001722BA1812781A70FB690133FB61FA69AE
:100CD0003B689A4205D27A68FB69D3181B78002BCF
:100CE000D3D1FA693B689A4202D102235B4207E002
:100CF000BB69012B02D003235B4201E0FB69013B8E
:100D00001800BD4608B080BD80B582B000AF7860E5
:100D10007B6800221A607B6800225A60C046BD468C
:100D200002B080BD80B588B000AFF860B9607A606D
:100D30001A00FB1C1A70FB681B68002B0ED1FB1CF1
:100D40001B78002B54D0FB1C1A78FB685A60FB6898
:100D50001B685A1CFB681A60002350E0FB1C1B78C0
:100D6000002B0DD1FB685B68012B39D1FB681B6838
:100D7000013B7B61FB681800FFF7C6FF7B693EE023
:100D8000FB685B685A1EFB685A60FB685B68002B57
:100D900008D1FB1C1A78FB685A601F23FB1800223D
:100DA0001A7004E01F23FB18FA1C12781A70FB68F3
:100DB0001B68013BBB61BA697B689A4202D302237C
:100DC0005B421CE0BA68BB69D3181F22BA181278BC
:100DD0001A70FB681B685A1CFB681A6000230EE03F
:100DE000C046FB681800FFF78FFF01235B4206E057
:100DF000C046FB681800FFF787FF03235B4218001B
:100E0000BD4608B080BD0419000800000020940011
:100E1000002094000020D4090020000080B500AF1D
:100E20001A4B1A68194B01210A431A60174B5A686A
:100E3000164B17490A405A60144B1A68134B154950
:100E40000A401A60114B1A68104B13490A401A6085
:100E50000E4B5A680D4B11490A405A600B4BDA6A27
:100E60000A4B0F218A43DA62084B1A6B074B0C4975
:100E70000A401A63054B5A6B044B01218A435A639B
:100E8000024B00229A60C046BD4680BD0010024061
:100E90000CB8FF08FFFFF6FEFFFFFBFFFFFFC0FFE0
:100EA000ECFEFFFF80B584B000AF0023FB600023A1
:100EB000BB6000237B6000233B60314B5B680C22EE
:100EC0001340FB60FB68082B11D0FB68082B41D84E
:100ED000FB68002B03D0FB68042B04D03AE0294BBD
:100EE000294A1A603AE0274B274A1A6036E0244B19
:100EF0005A68F0239B031340BB60214B5A68802340
:100F00005B0213407B60BB689B0C0233BB601C4BD5
:100F1000DB6A0F22134001333B607A6880235B0257
:100F20009A420AD13968184800F03EFB03001A00C3
:100F3000BB685A43134B1A6010E0B9680A005201AB
:100F4000521A93019B1ADB005B181B021A000D4B0F
:100F50001A6003E00B4B0C4A1A60C046084B5B68F2
:100F60001B090F221340094AD35CFB60054B1A682A
:100F7000FB68DA40034B1A60C046BD4604B080BD32
:100F8000001002400000002000127A00EC18000857
:100F900080B500AF044B1A68034B8021C9020A4395
:100FA0001A60C046BD4680BD0010024080B500AF4B
:100FB000044B1A68034B04490A401A60C046BD46F8
:100FC00080BDC04600100240FFFFFBFF80B500AFB0
:100FD000044B1A68034B802149020A431A60C04639
:100FE000BD4680BD0010024080B500AF064B1A68B8
:100FF00080239B021340054A944663445A4253415E
:10100000DBB21800BD4680BD001002400000FEFFAC
:1010100080B500AF044B1A68034B01210A431A60E4
:10102000C046BD4680BDC0460010024080B500AF3E
:10103000054B1B6802221340023B5A425341DBB26C
:101040001800BD4680BDC0460010024080B582B089
:1010500000AF7860064B5B68032293431900044B92
:101060007A680A435A60C046BD4602B080BDC04699
:101070000010024080B500AF034B5B680C221340A8
:101080001800BD4680BDC0460010024080B582B049
:1010900000AF7860064B5B68F02293431900044B65
:1010A0007A680A435A60C046BD4602B080BDC04659
:1010B0000010024080B582B000AF7860064B5B68DC
:1010C000064A13401900044B7A680A435A60C04626
:1010D000BD4602B080BDC04600100240FFF8FFFFD1
:1010E00080B500AF044B1A68034B802149040A43C2
:1010F0001A60C046BD4680BD0010024080B500AFFA
:10110000074B1A6880239B041340FE221206944664
:1011100063445A425341DBB21800BD4680BDC0460D
:101120000010024080B582B000AF786039600E4B8D
:101130005B680E4A134019007A6880235B021A40EC
:101140003B681A43084B0A435A60074BDB6A0F227D
:10115000934319007B680F221A40034B0A43DA625B
:10116000C046BD4602B080BD00100240FFFFC2FF76
:1011700080B582B000AF786039603968786800F077
:1011800013FA03001A00064B013A5A60044B00227E
:101190009A60034B05221A60C046BD4602B080BD6E
:1011A00010E000E080B582B000AF7860064B1B68AD
:1011B000012293431900044B7A680A431A60C0461F
:1011C000BD4602B080BDC0460020024080B500AFE1
:1011D000034B1B68012213401800BD4680BDC0466A
:1011E0000020024080B582B000AF7860FA239A00F8
:1011F0007B6811001800FFF7BBFFC046BD4602B078
:1012000080BD80B584B000AF78600E4B1B68FB607A
:10121000FB687B6801330CD07B6801337B6008E09E
:10122000084B1A6880235B02134002D07B68013BA5
:101230007B607B68002BF3D1C046C046BD4604B03E
:1012400080BDC04610E000E080B582B000AF78609D
:10125000034B7A681A60C046BD4602B080BDC046E6
:101260000000002090B585B000AF786039600F2392
:10127000FB1801221A700023BB6000F0D4F80300B1
:10128000012B28D17B6801225A607B68174A19001C
:10129000100000F0ABF80300BB60FFF7C7FE0300CF
:1012A000012B07D0FFF7B4FEC046FFF7BFFE0300D7
:1012B000012BFAD17B681B6819000020FFF732FF71
:1012C0000F23FC183A68BB681100180000F0BEF844
:1012D0000300237003E00F23FB1800221A700F2372
:1012E000FB181B781800BD4605B090BD00127A00AF
:1012F00090B587B000AFF860B9607A603B601723A3
:10130000FB1801221A7000233B6100F08CF80300E7
:10131000012B32D17A68FB681100180000F066F8E2
:1013200003003B61FFF760FE0300012B0FD0BB6899
:10133000012B02D1FFF72CFE01E0FFF737FEFFF78C
:1013400045FEC046FFF750FE0300012BFAD17B6833
:101350005B68802252021A437B681B6819001000E8
:10136000FFF7E0FE1723FC183A683B6911001800EC
:1013700000F06CF80300237003E01723FB18002231
:101380001A701723FB181B781800BD4607B090BDD4
:1013900080B584B000AF78600F217B1801221A70ED
:1013A0000023BB607B68002B03D17B1800221A70DE
:1013B00013E07B680C4A934201D90123BB60BB68F0
:1013C0001800FFF7EFFEFFF701FF0200BB68934232
:1013D00003D00F23FB1800221A700F23FB181B7871
:1013E0001800BD4604B080BD00366E0180B584B0E3
:1013F00000AF786039600023FB603B685B680133B5
:101400001900786800F0D0F8030019003B681B68E9
:101410009B0C0F22134002334B43FB60FB68180008
:10142000BD4604B080BD80B582B000AFFB1D012277
:101430001A70FFF763FE031E02D0FB1D00221A7014
:10144000FB1D1B781800BD4602B080BD90B585B06D
:1014500000AF786039600F203B1801221A7000231A
:10146000BB602E4B1A683B681B681B090F210B40A1
:101470002B49CB5C9A401300BB60BA687B689A42E8
:1014800006D23C187B681800FFF782FF0300237028
:101490000F23FB181B78012B1AD1FFF721FEC04642
:1014A000FFF72CFE0300012BFAD13B681B681800E4
:1014B000FFF7ECFD0220FFF7C9FDC046FFF7DAFD9C
:1014C0000300082BFAD13B685B681800FFF7F2FDB8
:1014D000BA687B689A4207D90F23FC187B6818000A
:1014E000FFF756FF030023700F23FB181B78012B17
:1014F0000CD13B681B681B090F221340084AD35CC0
:101500001A007B68D3401800FFF79EFE0F23FB18DC
:101510001B781800BD4605B090BDC04600000020F5
:10152000EC18000880B500AFC046BD4680BD80B550
:1015300086B000AFF860B9607A60FA687B68D3184B
:101540003B61FB687B6106E0BB68DAB27B691A70BD
:101550007B6901337B617A693B699A42F4D3FB680A
:101560001800BD4606B080BD80B584B000AF78607D
:101570007B68FB60C0467B685A1C7A601B78002B36
:10158000F9D17A68FB68D31A013B1800BD4604B054
:1015900080BD80B582B000AF0200FB1D1A70C0464E
:1015A000BD4602B080BD0000002243088B4274D3C8
:1015B00003098B425FD3030A8B4244D3030B8B4254
:1015C00028D3030C8B420DD3FF22090212BA030C5D
:1015D0008B4202D31212090265D0030B8B4219D33E
:1015E00000E0090AC30B8B4201D3CB03C01A52415E
:1015F000830B8B4201D38B03C01A5241430B8B42A6
:1016000001D34B03C01A5241030B8B4201D30B038E
:10161000C01A5241C30A8B4201D3CB02C01A5241B5
:10162000830A8B4201D38B02C01A5241430A8B4278
:1016300001D34B02C01A5241030A8B4201D30B0261
:10164000C01A5241CDD2C3098B4201D3CB01C01A7B
:10165000524183098B4201D38B01C01A5241430985
:101660008B4201D34B01C01A524103098B4201D373
:101670000B01C01A5241C3088B4201D3CB00C01AE0
:10168000524183088B4201D38B00C01A5241430858
:101690008B4201D34B00C01A5241411A00D201467D
:1016A000524110467047FFE701B5002000F0F0F806
:1016B00002BDC0460029F7D076E7704703460B43CA
:1016C0007FD4002243088B4274D303098B425FD33B
:1016D000030A8B4244D3030B8B4228D3030C8B4267
:1016E0000DD3FF22090212BA030C8B4202D312124D
:1016F000090265D0030B8B4219D300E0090AC30B22
:101700008B4201D3CB03C01A5241830B8B4201D3CE
:101710008B03C01A5241430B8B4201D34B03C01AB7
:101720005241030B8B4201D30B03C01A5241C30A2F
:101730008B4201D3CB02C01A5241830A8B4201D3A0
:101740008B02C01A5241430A8B4201D34B02C01A8A
:101750005241030A8B4201D30B02C01A5241CDD22F
:10176000C3098B4201D3CB01C01A524183098B427A
:1017700001D38B01C01A524143098B4201D34B0163
:10178000C01A524103098B4201D30B01C01A5241C6
:10179000C3088B4201D3CB00C01A524183088B424D
:1017A00001D38B00C01A524143088B4201D34B0036
:1017B000C01A5241411A00D20146524110467047A8
:1017C0005DE0CA0F00D04942031000D340425340AD
:1017D00000229C4603098B422DD3030A8B4212D36D
:1017E000FC22890112BA030A8B420CD3890192119F
:1017F0008B4208D3890192118B4204D389013AD0DC
:10180000921100E08909C3098B4201D3CB01C01AB0
:10181000524183098B4201D38B01C01A52414309C3
:101820008B4201D34B01C01A524103098B4201D3B1
:101830000B01C01A5241C3088B4201D3CB00C01A1E
:10184000524183088B4201D38B00C01A5241D9D236
:1018500043088B4201D34B00C01A5241411A00D2B7
:101860000146634652415B10104601D34042002BB3
:1018700000D54942704763465B1000D3404201B532
:10188000002000F005F802BD0029F8D016E77047E7
:101890007047C0460C488546002103E00B4B5B585F
:1018A000435004310A480B4B42189A42F6D30A4A75
:1018B00002E0002313600432084B9A42F9D3FFF789
:1018C000ADFAFEF7AAFCFEE700100020041900089C
:1018D000000000209400002094000020D409002083
:1018E000FEE70000464F4F4241520A000000000050
:1018F00000000000010203040607080900000000C0
:0419000001020304D9
:1019040000127A000004004000200040002800403B
:10191400002C0040003000400054004000700040A3
:101924000000014000040140002401400827014058
:1019340008270140002C01400030014000380140DC
:1019440000440140004801400058014000000240AA
:10195400080002401C0002403000024044000240E3
:10196400580002400020024000F8FF1F001002400F
:10197400003002400000004800040048000800480D
:10198400000C00480014004800ED00E010E000E006
:0419940000E100E08E
:040000050800189542
:00000001FF

4459
gm_platform/fw/main.lst Normal file

File diff suppressed because it is too large Load diff

457
gm_platform/fw/main.map Normal file
View file

@ -0,0 +1,457 @@
Archive member included to satisfy reference by file (symbol)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
/tmp/cchCmUnQ.o (__aeabi_uidiv)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
/tmp/cczzmF2c.o (__aeabi_idiv)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) (__aeabi_idiv0)
Allocating common symbols
Common symbol size file
usart_tx_buf 0x10c /tmp/cc4OHQ7z.o
leds 0x20 /tmp/cchCmUnQ.o
adc_buf 0x800 /tmp/cczzmF2c.o
Memory Configuration
Name Origin Length Attributes
FLASH 0x0000000008000000 0x0000000000003c00 xr
CONFIGFLASH 0x0000000008003c00 0x0000000000000400 rw
RAM 0x0000000020000000 0x0000000000001000 xrw
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
LOAD /home/user/resource/STM32CubeF0/Drivers/CMSIS/Lib/GCC/libarm_cortexM0l_math.a
LOAD /tmp/cchCmUnQ.o
LOAD /tmp/cczzmF2c.o
LOAD /tmp/cc4OHQ7z.o
LOAD /tmp/cc0OqFzX.o
LOAD /tmp/ccTaPb5k.o
LOAD /tmp/cc6XVkRI.o
LOAD /tmp/ccvZIDd7.o
LOAD /tmp/ccTEVTRv.o
LOAD /tmp/ccvICuLU.o
LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
0x0000000020001000 _estack = 0x20001000
.isr_vector 0x0000000008000000 0xc0
0x0000000008000000 . = ALIGN (0x4)
*(.isr_vector)
.isr_vector 0x0000000008000000 0xc0 /tmp/ccTaPb5k.o
0x0000000008000000 g_pfnVectors
0x00000000080000c0 . = ALIGN (0x4)
.text 0x00000000080000c0 0x1844
0x00000000080000c0 . = ALIGN (0x4)
*(.text)
.text 0x00000000080000c0 0x454 /tmp/cchCmUnQ.o
0x0000000008000210 update_leds
0x000000000800021a main
0x00000000080003c8 SPI1_IRQHandler
0x00000000080003f4 TIM16_IRQHandler
0x00000000080004b0 NMI_Handler
0x00000000080004bc HardFault_Handler
0x00000000080004c0 SVC_Handler
0x00000000080004cc PendSV_Handler
0x00000000080004d8 SysTick_Handler
.text 0x0000000008000514 0x29c /tmp/cczzmF2c.o
0x000000000800061c adc_configure_scope_mode
0x0000000008000792 DMA1_Channel1_IRQHandler
.text 0x00000000080007b0 0x31c /tmp/cc4OHQ7z.o
0x00000000080008e8 usart_dma_init
0x00000000080009d4 usart_dma_fifo_push
0x0000000008000a2c usart_putc
0x0000000008000a5c DMA1_Channel2_3_IRQHandler
0x0000000008000a9c usart_send_packet
.text 0x0000000008000acc 0x33a /tmp/cc0OqFzX.o
0x0000000008000acc cobs_encode
0x0000000008000b92 cobs_encode_usart
0x0000000008000c32 cobs_decode
0x0000000008000d08 cobs_decode_incremental_initialize
0x0000000008000d24 cobs_decode_incremental
.text 0x0000000008000e06 0x14 /tmp/ccTaPb5k.o
*fill* 0x0000000008000e1a 0x2
.text 0x0000000008000e1c 0x174 /tmp/cc6XVkRI.o
0x0000000008000e1c SystemInit
0x0000000008000ea4 SystemCoreClockUpdate
.text 0x0000000008000f90 0x594 /tmp/ccvZIDd7.o
0x00000000080011e4 LL_Init1msTick
0x0000000008001202 LL_mDelay
0x0000000008001248 LL_SetSystemCoreClock
0x0000000008001264 LL_PLL_ConfigSystemClock_HSI
0x00000000080012f0 LL_PLL_ConfigSystemClock_HSE
.text 0x0000000008001524 0x82 /tmp/ccTEVTRv.o
0x0000000008001524 __sinit
0x000000000800152e memset
0x0000000008001568 strlen
0x0000000008001592 __assert_func
.text 0x00000000080015a6 0x0 /tmp/ccvICuLU.o
*fill* 0x00000000080015a6 0x2
.text 0x00000000080015a8 0x114 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
0x00000000080015a8 __udivsi3
0x00000000080015a8 __aeabi_uidiv
0x00000000080016b4 __aeabi_uidivmod
.text 0x00000000080016bc 0x1d4 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
0x00000000080016bc __aeabi_idiv
0x00000000080016bc __divsi3
0x0000000008001888 __aeabi_idivmod
.text 0x0000000008001890 0x4 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
0x0000000008001890 __aeabi_ldiv0
0x0000000008001890 __aeabi_idiv0
*(.text.*)
.text.Reset_Handler
0x0000000008001894 0x4c /tmp/ccTaPb5k.o
0x0000000008001894 Reset_Handler
.text.Default_Handler
0x00000000080018e0 0x2 /tmp/ccTaPb5k.o
0x00000000080018e0 TIM1_CC_IRQHandler
0x00000000080018e0 I2C1_IRQHandler
0x00000000080018e0 EXTI2_3_IRQHandler
0x00000000080018e0 ADC1_IRQHandler
0x00000000080018e0 TIM17_IRQHandler
0x00000000080018e0 RTC_IRQHandler
0x00000000080018e0 TIM3_IRQHandler
0x00000000080018e0 EXTI4_15_IRQHandler
0x00000000080018e0 RCC_IRQHandler
0x00000000080018e0 Default_Handler
0x00000000080018e0 TIM14_IRQHandler
0x00000000080018e0 DMA1_Channel4_5_IRQHandler
0x00000000080018e0 EXTI0_1_IRQHandler
0x00000000080018e0 WWDG_IRQHandler
0x00000000080018e0 FLASH_IRQHandler
0x00000000080018e0 USART1_IRQHandler
0x00000000080018e0 TIM1_BRK_UP_TRG_COM_IRQHandler
*(.rodata)
*fill* 0x00000000080018e2 0x2
.rodata 0x00000000080018e4 0x8 /tmp/cchCmUnQ.o
.rodata 0x00000000080018ec 0x18 /tmp/cc6XVkRI.o
0x00000000080018ec AHBPrescTable
0x00000000080018fc APBPrescTable
*(.rodata*)
*(.glue_7)
.glue_7 0x0000000008001904 0x0 linker stubs
*(.glue_7t)
.glue_7t 0x0000000008001904 0x0 linker stubs
*(.source_tarball)
*(.init)
*(.fini)
*(.source_tarball)
0x0000000008001904 . = ALIGN (0x4)
0x0000000008001904 _etext = .
0x0000000008001904 _sidata = _etext
.vfp11_veneer 0x0000000008001904 0x0
.vfp11_veneer 0x0000000008001904 0x0 linker stubs
.v4_bx 0x0000000008001904 0x0
.v4_bx 0x0000000008001904 0x0 linker stubs
.iplt 0x0000000008001904 0x0
.iplt 0x0000000008001904 0x0 /tmp/cchCmUnQ.o
.rel.dyn 0x0000000008001904 0x0
.rel.iplt 0x0000000008001904 0x0 /tmp/cchCmUnQ.o
.data 0x0000000020000000 0x94 load address 0x0000000008001904
0x0000000020000000 . = ALIGN (0x4)
0x0000000020000000 _sdata = .
0x0000000020000000 _data = .
*(.data)
.data 0x0000000020000000 0x0 /tmp/cchCmUnQ.o
.data 0x0000000020000000 0x0 /tmp/cczzmF2c.o
.data 0x0000000020000000 0x0 /tmp/cc4OHQ7z.o
.data 0x0000000020000000 0x0 /tmp/cc0OqFzX.o
.data 0x0000000020000000 0x0 /tmp/ccTaPb5k.o
.data 0x0000000020000000 0x4 /tmp/cc6XVkRI.o
0x0000000020000000 SystemCoreClock
.data 0x0000000020000004 0x0 /tmp/ccvZIDd7.o
.data 0x0000000020000004 0x0 /tmp/ccTEVTRv.o
.data 0x0000000020000004 0x90 /tmp/ccvICuLU.o
0x0000000020000004 tim3
0x0000000020000008 tim14
0x000000002000000c rtc
0x0000000020000010 wwdg
0x0000000020000014 iwdg
0x0000000020000018 i2c1
0x000000002000001c pwr
0x0000000020000020 syscfg
0x0000000020000024 exti
0x0000000020000028 adc1
0x000000002000002c adc1_common
0x0000000020000030 adc
0x0000000020000034 tim1
0x0000000020000038 spi1
0x000000002000003c usart1
0x0000000020000040 tim16
0x0000000020000044 tim17
0x0000000020000048 dbgmcu
0x000000002000004c dma1
0x0000000020000050 dma1_channel1
0x0000000020000054 dma1_channel2
0x0000000020000058 dma1_channel3
0x000000002000005c dma1_channel4
0x0000000020000060 dma1_channel5
0x0000000020000064 flash
0x0000000020000068 ob
0x000000002000006c rcc
0x0000000020000070 crc
0x0000000020000074 gpioa
0x0000000020000078 gpiob
0x000000002000007c gpioc
0x0000000020000080 gpiod
0x0000000020000084 gpiof
0x0000000020000088 scb
0x000000002000008c systick
0x0000000020000090 nvic
.data 0x0000000020000094 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.data 0x0000000020000094 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.data 0x0000000020000094 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
*(.data.*)
*(.RAMtext)
0x0000000020000094 . = ALIGN (0x4)
0x0000000020000094 _edata = .
.igot.plt 0x0000000020000094 0x0 load address 0x0000000008001998
.igot.plt 0x0000000020000094 0x0 /tmp/cchCmUnQ.o
.bss 0x0000000020000094 0x940 load address 0x0000000008001998
0x0000000020000094 . = ALIGN (0x4)
0x0000000020000094 _sbss = .
0x0000000020000094 _bss = .
*(.bss)
.bss 0x0000000020000094 0xc /tmp/cchCmUnQ.o
0x0000000020000094 sys_time_seconds
.bss 0x00000000200000a0 0x0 /tmp/cczzmF2c.o
.bss 0x00000000200000a0 0x0 /tmp/cc4OHQ7z.o
.bss 0x00000000200000a0 0x0 /tmp/cc0OqFzX.o
.bss 0x00000000200000a0 0x0 /tmp/ccTaPb5k.o
.bss 0x00000000200000a0 0x0 /tmp/cc6XVkRI.o
.bss 0x00000000200000a0 0x0 /tmp/ccvZIDd7.o
.bss 0x00000000200000a0 0x8 /tmp/ccTEVTRv.o
0x00000000200000a0 __errno
0x00000000200000a4 _impure_ptr
.bss 0x00000000200000a8 0x0 /tmp/ccvICuLU.o
.bss 0x00000000200000a8 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.bss 0x00000000200000a8 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.bss 0x00000000200000a8 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
*(.bss.*)
*(COMMON)
COMMON 0x00000000200000a8 0x20 /tmp/cchCmUnQ.o
0x00000000200000a8 leds
COMMON 0x00000000200000c8 0x800 /tmp/cczzmF2c.o
0x00000000200000c8 adc_buf
COMMON 0x00000000200008c8 0x10c /tmp/cc4OHQ7z.o
0x00000000200008c8 usart_tx_buf
0x00000000200009d4 . = ALIGN (0x4)
0x00000000200009d4 _ebss = .
[!provide] PROVIDE (end = _ebss)
[!provide] PROVIDE (_end = _ebss)
0x00000000200009d4 __exidx_start = .
0x00000000200009d4 __exidx_end = .
.stab
*(.stab)
.stabstr
*(.stabstr)
.stab.excl
*(.stab.excl)
.stab.exclstr
*(.stab.exclstr)
.stab.index
*(.stab.index)
.stab.indexstr
*(.stab.indexstr)
.comment 0x0000000000000000 0x21
*(.comment)
.comment 0x0000000000000000 0x21 /tmp/cchCmUnQ.o
0x22 (size before relaxing)
.comment 0x0000000000000021 0x22 /tmp/cczzmF2c.o
.comment 0x0000000000000021 0x22 /tmp/cc4OHQ7z.o
.comment 0x0000000000000021 0x22 /tmp/cc0OqFzX.o
.comment 0x0000000000000021 0x22 /tmp/cc6XVkRI.o
.comment 0x0000000000000021 0x22 /tmp/ccvZIDd7.o
.comment 0x0000000000000021 0x22 /tmp/ccTEVTRv.o
.comment 0x0000000000000021 0x22 /tmp/ccvICuLU.o
.ARM.attributes
0x0000000000000000 0x2f
.ARM.attributes
0x0000000000000000 0x2b /tmp/cchCmUnQ.o
.ARM.attributes
0x000000000000002b 0x2b /tmp/cczzmF2c.o
.ARM.attributes
0x0000000000000056 0x2b /tmp/cc4OHQ7z.o
.ARM.attributes
0x0000000000000081 0x2b /tmp/cc0OqFzX.o
.ARM.attributes
0x00000000000000ac 0x21 /tmp/ccTaPb5k.o
.ARM.attributes
0x00000000000000cd 0x2b /tmp/cc6XVkRI.o
.ARM.attributes
0x00000000000000f8 0x2b /tmp/ccvZIDd7.o
.ARM.attributes
0x0000000000000123 0x2b /tmp/ccTEVTRv.o
.ARM.attributes
0x000000000000014e 0x31 /tmp/ccvICuLU.o
.ARM.attributes
0x000000000000017f 0x1e /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.ARM.attributes
0x000000000000019d 0x1e /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.ARM.attributes
0x00000000000001bb 0x1e /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug
*(.debug)
.line
*(.line)
.debug_srcinfo
*(.debug_srcinfo)
.debug_sfnames
*(.debug_sfnames)
.debug_aranges 0x0000000000000000 0x180
*(.debug_aranges)
.debug_aranges
0x0000000000000000 0x20 /tmp/cchCmUnQ.o
.debug_aranges
0x0000000000000020 0x20 /tmp/cczzmF2c.o
.debug_aranges
0x0000000000000040 0x20 /tmp/cc4OHQ7z.o
.debug_aranges
0x0000000000000060 0x20 /tmp/cc0OqFzX.o
.debug_aranges
0x0000000000000080 0x28 /tmp/ccTaPb5k.o
.debug_aranges
0x00000000000000a8 0x20 /tmp/cc6XVkRI.o
.debug_aranges
0x00000000000000c8 0x20 /tmp/ccvZIDd7.o
.debug_aranges
0x00000000000000e8 0x20 /tmp/ccTEVTRv.o
.debug_aranges
0x0000000000000108 0x18 /tmp/ccvICuLU.o
.debug_aranges
0x0000000000000120 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_aranges
0x0000000000000140 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_aranges
0x0000000000000160 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_pubnames
*(.debug_pubnames)
.debug_info 0x0000000000000000 0x5d8a
*(.debug_info .gnu.linkonce.wi.*)
.debug_info 0x0000000000000000 0x136b /tmp/cchCmUnQ.o
.debug_info 0x000000000000136b 0x105f /tmp/cczzmF2c.o
.debug_info 0x00000000000023ca 0x1019 /tmp/cc4OHQ7z.o
.debug_info 0x00000000000033e3 0xcb1 /tmp/cc0OqFzX.o
.debug_info 0x0000000000004094 0x22 /tmp/ccTaPb5k.o
.debug_info 0x00000000000040b6 0x263 /tmp/cc6XVkRI.o
.debug_info 0x0000000000004319 0x795 /tmp/ccvZIDd7.o
.debug_info 0x0000000000004aae 0x1e9 /tmp/ccTEVTRv.o
.debug_info 0x0000000000004c97 0x1081 /tmp/ccvICuLU.o
.debug_info 0x0000000000005d18 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_info 0x0000000000005d3e 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_info 0x0000000000005d64 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_abbrev 0x0000000000000000 0x1204
*(.debug_abbrev)
.debug_abbrev 0x0000000000000000 0x357 /tmp/cchCmUnQ.o
.debug_abbrev 0x0000000000000357 0x320 /tmp/cczzmF2c.o
.debug_abbrev 0x0000000000000677 0x319 /tmp/cc4OHQ7z.o
.debug_abbrev 0x0000000000000990 0x287 /tmp/cc0OqFzX.o
.debug_abbrev 0x0000000000000c17 0x12 /tmp/ccTaPb5k.o
.debug_abbrev 0x0000000000000c29 0x113 /tmp/cc6XVkRI.o
.debug_abbrev 0x0000000000000d3c 0x23c /tmp/ccvZIDd7.o
.debug_abbrev 0x0000000000000f78 0x117 /tmp/ccTEVTRv.o
.debug_abbrev 0x000000000000108f 0x139 /tmp/ccvICuLU.o
.debug_abbrev 0x00000000000011c8 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_abbrev 0x00000000000011dc 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_abbrev 0x00000000000011f0 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_line 0x0000000000000000 0x17b1
*(.debug_line)
.debug_line 0x0000000000000000 0x3ec /tmp/cchCmUnQ.o
.debug_line 0x00000000000003ec 0x33d /tmp/cczzmF2c.o
.debug_line 0x0000000000000729 0x36e /tmp/cc4OHQ7z.o
.debug_line 0x0000000000000a97 0x2f9 /tmp/cc0OqFzX.o
.debug_line 0x0000000000000d90 0x77 /tmp/ccTaPb5k.o
.debug_line 0x0000000000000e07 0x1ab /tmp/cc6XVkRI.o
.debug_line 0x0000000000000fb2 0x466 /tmp/ccvZIDd7.o
.debug_line 0x0000000000001418 0xf4 /tmp/ccTEVTRv.o
.debug_line 0x000000000000150c 0x148 /tmp/ccvICuLU.o
.debug_line 0x0000000000001654 0x76 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_line 0x00000000000016ca 0x7d /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_line 0x0000000000001747 0x6a /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_frame 0x0000000000000000 0x848
*(.debug_frame)
.debug_frame 0x0000000000000000 0x168 /tmp/cchCmUnQ.o
.debug_frame 0x0000000000000168 0xe8 /tmp/cczzmF2c.o
.debug_frame 0x0000000000000250 0x128 /tmp/cc4OHQ7z.o
.debug_frame 0x0000000000000378 0xb0 /tmp/cc0OqFzX.o
.debug_frame 0x0000000000000428 0x4c /tmp/cc6XVkRI.o
.debug_frame 0x0000000000000474 0x308 /tmp/ccvZIDd7.o
.debug_frame 0x000000000000077c 0x8c /tmp/ccTEVTRv.o
.debug_frame 0x0000000000000808 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_frame 0x0000000000000828 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_str 0x0000000000000000 0x12b2
*(.debug_str)
.debug_str 0x0000000000000000 0x965 /tmp/cchCmUnQ.o
0xa11 (size before relaxing)
.debug_str 0x0000000000000965 0xdf /tmp/cczzmF2c.o
0x8fc (size before relaxing)
.debug_str 0x0000000000000a44 0xa7 /tmp/cc4OHQ7z.o
0x904 (size before relaxing)
.debug_str 0x0000000000000aeb 0xa2 /tmp/cc0OqFzX.o
0x658 (size before relaxing)
.debug_str 0x0000000000000b8d 0x22 /tmp/ccTaPb5k.o
0x57 (size before relaxing)
.debug_str 0x0000000000000baf 0x53 /tmp/cc6XVkRI.o
0x219 (size before relaxing)
.debug_str 0x0000000000000c02 0x3ae /tmp/ccvZIDd7.o
0x5bf (size before relaxing)
.debug_str 0x0000000000000fb0 0x39 /tmp/ccTEVTRv.o
0x1b7 (size before relaxing)
.debug_str 0x0000000000000fe9 0x227 /tmp/ccvICuLU.o
0x5ca (size before relaxing)
.debug_str 0x0000000000001210 0xa2 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
0xae (size before relaxing)
.debug_str 0x00000000000012b2 0xae /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_str 0x00000000000012b2 0xae /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_loc
*(.debug_loc)
.debug_macinfo
*(.debug_macinfo)
.debug_weaknames
*(.debug_weaknames)
.debug_funcnames
*(.debug_funcnames)
.debug_typenames
*(.debug_typenames)
.debug_varnames
*(.debug_varnames)
OUTPUT(main.elf elf32-littlearm)
.debug_ranges 0x0000000000000000 0x38
.debug_ranges 0x0000000000000000 0x18 /tmp/cc0OqFzX.o
.debug_ranges 0x0000000000000018 0x20 /tmp/ccTaPb5k.o

View file

@ -0,0 +1,17 @@
telnet_port 4445
gdb_port 3334
tcl_port 6667
source [find interface/stlink-v2.cfg]
#interface jlink
#interface stlink-v2
#adapter_khz 10000
#transport select swd
#source /usr/share/openocd/scripts/target/stm32f0x.cfg
source [find target/stm32f0x_stlink.cfg]
init
arm semihosting enable
#flash bank sysflash.alias stm32f0x 0x00000000 0 0 0 $_TARGETNAME

View file

@ -0,0 +1,46 @@
#include "packet_interface.h"
#include "cobs.h"
void usart2_isr(void) {
TRACING_SET(TR_HOST_IF_USART_IRQ);
static struct cobs_decode_state host_cobs_state = {0};
if (USART2_SR & USART_SR_ORE) { /* Overrun handling */
LOG_PRINTF("USART2 data register overrun\n");
/* Clear interrupt flag */
(void)USART2_DR; /* FIXME make sure this read is not optimized out */
host_packet_length = -1;
TRACING_CLEAR(TR_HOST_IF_USART_IRQ);
return;
}
uint8_t data = USART2_DR; /* This automatically acknowledges the IRQ */
if (host_packet_length) {
LOG_PRINTF("USART2 COBS buffer overrun\n");
host_packet_length = -1;
TRACING_CLEAR(TR_HOST_IF_USART_IRQ);
return;
}
ssize_t rv = cobs_decode_incremental(&host_cobs_state, (char *)host_packet_buf, sizeof(host_packet_buf), data);
if (rv == -2) {
LOG_PRINTF("Host interface COBS packet too large\n");
host_packet_length = -1;
} else if (rv == -3) {
LOG_PRINTF("Got double null byte from host\n");
} else if (rv < 0) {
LOG_PRINTF("Host interface COBS framing error\n");
host_packet_length = -1;
} else if (rv > 0) {
host_packet_length = rv;
} /* else just return and wait for next byte */
TRACING_CLEAR(TR_HOST_IF_USART_IRQ);
}
void send_packet(struct dma_usart_file *f, const uint8_t *data, size_t len) {
/* ignore return value as putf is blocking and always succeeds */
(void)cobs_encode_incremental(f, putf, (char *)data, len);
flush(f);
}

View file

@ -0,0 +1,6 @@
#ifndef __PACKET_INTERFACE_H__
#define __PACKET_INTERFACE_H__
void send_packet(struct dma_usart_file *f, const uint8_t *data, size_t len);
#endif

12
gm_platform/fw/scope.gdb Normal file
View file

@ -0,0 +1,12 @@
target remote 192.168.178.103:3334
set pagination off
file main.elf
load
break gdb_dump
command 1
dump binary value /tmp/scope_dump.bin adc_buf
continue
end
continue

139
gm_platform/fw/serial.c Normal file
View file

@ -0,0 +1,139 @@
/*
* This file is part of the libusbhost library
* hosted at http://github.com/libusbhost/libusbhost
*
* Copyright (C) 2015 Amir Hammad <amir.hammad@hotmail.com>
*
*
* libusbhost is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "global.h"
#include "serial.h"
#include "cobs.h"
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
volatile struct dma_tx_buf usart_tx_buf;
static void usart_schedule_dma();
void usart_dma_init() {
usart_tx_buf.xfr_start = -1,
usart_tx_buf.xfr_end = 0,
usart_tx_buf.wr_pos = 0,
/* Configure DMA 1 Channel 2 to handle uart transmission */
DMA1_Channel2->CPAR = (unsigned int)&(USART1->TDR);
DMA1_Channel2->CCR = (0<<DMA_CCR_PL_Pos)
| DMA_CCR_DIR
| (0<<DMA_CCR_MSIZE_Pos) /* 8 bit */
| (0<<DMA_CCR_PSIZE_Pos) /* 8 bit */
| DMA_CCR_MINC
| DMA_CCR_TCIE; /* Enable transfer complete interrupt. */
/* triggered on transfer completion. We use this to process the ADC data */
NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
NVIC_SetPriority(DMA1_Channel2_3_IRQn, 1<<5);
USART1->CR1 = /* 8-bit -> M1, M0 clear */
/* OVER8 clear. Use default 16x oversampling */
/* CMIF clear */
USART_CR1_MME
/* WAKE clear */
/* PCE, PS clear */
| USART_CR1_RXNEIE /* Enable receive interrupt */
/* other interrupts clear */
| USART_CR1_TE
| USART_CR1_RE;
/* Set divider for 1MBd @48MHz system clock. */
USART1->BRR = 48;
USART1->CR2 = USART_CR2_TXINV | USART_CR2_RXINV;
USART1->CR3 |= USART_CR3_DMAT; /* TX DMA enable */
/* Enable receive interrupt */
//NVIC_EnableIRQ(USART1_IRQn);
//NVIC_SetPriority(USART1_IRQn, 1);
/* And... go! */
USART1->CR1 |= USART_CR1_UE;
}
void usart_schedule_dma() {
/* This function is only called when the DMA channel is disabled. This means we don't have to guard it in IRQ
* disables. */
volatile struct dma_tx_buf *buf = &usart_tx_buf;
size_t xfr_len, xfr_start = buf->xfr_end;
if (buf->wr_pos > xfr_start) /* no wraparound */
xfr_len = buf->wr_pos - xfr_start;
else /* wraparound */
xfr_len = sizeof(buf->data) - xfr_start; /* schedule transfer until end of buffer */
buf->xfr_start = xfr_start;
buf->xfr_end = (xfr_start + xfr_len) % sizeof(buf->data); /* handle wraparound */
/* initiate transmission of new buffer */
DMA1_Channel2->CMAR = (uint32_t)(buf->data + xfr_start);
DMA1_Channel2->CNDTR = xfr_len;
DMA1_Channel2->CCR |= DMA_CCR_EN;
}
int usart_dma_fifo_push(volatile struct dma_tx_buf *buf, char c) {
/* This function must be guarded by IRQ disable since the IRQ may schedule a new transfer and charge pos/start. */
NVIC_DisableIRQ(DMA1_Channel2_3_IRQn);
if (buf->wr_pos == buf->xfr_start) {
NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
return -EBUSY;
}
buf->data[buf->wr_pos] = c;
buf->wr_pos = (buf->wr_pos + 1) % sizeof(buf->data);
NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
return 0;
}
void usart_putc(char c) {
/* push char to fifo, busy-loop if stalled to wait for USART to empty fifo via DMA */
while (usart_dma_fifo_push(&usart_tx_buf, c) == -EBUSY) {
/* idle */
}
}
void DMA1_Channel2_3_IRQHandler(void) {
/* Transfer complete */
DMA1->IFCR |= DMA_IFCR_CTCIF2;
DMA1_Channel2->CCR &= ~DMA_CCR_EN;
if (usart_tx_buf.wr_pos != usart_tx_buf.xfr_end) /* buffer not empty */
usart_schedule_dma();
}
void usart_send_packet(const uint8_t *data, size_t len) {
/* ignore return value as putf is blocking and always succeeds */
(void)cobs_encode_usart((char *)data, len);
/* If the DMA stream is idle right now, schedule a transfer */
if (!(DMA1_Channel2->CCR & DMA_CCR_EN))
usart_schedule_dma();
}

44
gm_platform/fw/serial.h Normal file
View file

@ -0,0 +1,44 @@
/*
* This file is part of the libusbhost library
* hosted at http://github.com/libusbhost/libusbhost
*
* Copyright (C) 2015 Amir Hammad <amir.hammad@hotmail.com>
*
*
* libusbhost is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef __SERIAL_H__
#define __SERIAL_H__
#include <stdint.h>
#include <stdarg.h>
#include <errno.h>
struct dma_tx_buf {
size_t xfr_start; /* Start index of running DMA transfer */
size_t xfr_end; /* End index of running DMA transfer plus one */
size_t wr_pos; /* Next index to be written */
uint8_t data[256];
};
extern volatile struct dma_tx_buf usart_tx_buf;
void usart_dma_init(void);
int usart_dma_fifo_push(volatile struct dma_tx_buf *buf, char c);
void usart_putc(char c);
void usart_send_packet(const uint8_t *data, size_t len);
#endif // __SERIAL_H__

View file

@ -0,0 +1,273 @@
/**
******************************************************************************
* @file startup_stm32f030x6.s
* copied from: STM32Cube/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc
* @author MCD Application Team
* @version V2.3.1
* @date 04-November-2016
* @brief STM32F030x4/STM32F030x6 devices vector table for Atollic TrueSTUDIO toolchain.
* This module performs:
* - Set the initial SP
* - Set the initial PC == Reset_Handler,
* - Set the vector table entries with the exceptions ISR address
* - Branches to main in the C library (which eventually
* calls main()).
* After Reset the Cortex-M0 processor is in Thread mode,
* priority is Privileged, and the Stack is set to Main.
******************************************************************************
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
.syntax unified
.cpu cortex-m0
.fpu softvfp
.thumb
.global g_pfnVectors
.global Default_Handler
/* start address for the initialization values of the .data section.
defined in linker script */
.word _sidata
/* start address for the .data section. defined in linker script */
.word _sdata
/* end address for the .data section. defined in linker script */
.word _edata
/* start address for the .bss section. defined in linker script */
.word _sbss
/* end address for the .bss section. defined in linker script */
.word _ebss
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
ldr r0, =_estack
mov sp, r0 /* set stack pointer */
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit
CopyDataInit:
ldr r3, =_sidata
ldr r3, [r3, r1]
str r3, [r0, r1]
adds r1, r1, #4
LoopCopyDataInit:
ldr r0, =_sdata
ldr r3, =_edata
adds r2, r0, r1
cmp r2, r3
bcc CopyDataInit
ldr r2, =_sbss
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2]
adds r2, r2, #4
LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
// bl __libc_init_array
/* Call the application's entry point.*/
bl main
LoopForever:
b LoopForever
.size Reset_Handler, .-Reset_Handler
/**
* @brief This is the code that gets called when the processor receives an
* unexpected interrupt. This simply enters an infinite loop, preserving
* the system state for examination by a debugger.
*
* @param None
* @retval : None
*/
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop
.size Default_Handler, .-Default_Handler
/******************************************************************************
*
* The minimal vector table for a Cortex M0. Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
******************************************************************************/
.section .isr_vector,"a",%progbits
.type g_pfnVectors, %object
.size g_pfnVectors, .-g_pfnVectors
g_pfnVectors:
.word _estack
.word Reset_Handler
.word NMI_Handler
.word HardFault_Handler
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word SVC_Handler
.word 0
.word 0
.word PendSV_Handler
.word SysTick_Handler
.word WWDG_IRQHandler /* Window WatchDog */
.word 0 /* Reserved */
.word RTC_IRQHandler /* RTC through the EXTI line */
.word FLASH_IRQHandler /* FLASH */
.word RCC_IRQHandler /* RCC */
.word EXTI0_1_IRQHandler /* EXTI Line 0 and 1 */
.word EXTI2_3_IRQHandler /* EXTI Line 2 and 3 */
.word EXTI4_15_IRQHandler /* EXTI Line 4 to 15 */
.word 0 /* Reserved */
.word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */
.word DMA1_Channel2_3_IRQHandler /* DMA1 Channel 2 and Channel 3 */
.word DMA1_Channel4_5_IRQHandler /* DMA1 Channel 4 and Channel 5 */
.word ADC1_IRQHandler /* ADC1 */
.word TIM1_BRK_UP_TRG_COM_IRQHandler /* TIM1 Break, Update, Trigger and Commutation */
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
.word 0 /* Reserved */
.word TIM3_IRQHandler /* TIM3 */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word TIM14_IRQHandler /* TIM14 */
.word 0 /* Reserved */
.word TIM16_IRQHandler /* TIM16 */
.word TIM17_IRQHandler /* TIM17 */
.word I2C1_IRQHandler /* I2C1 */
.word 0 /* Reserved */
.word SPI1_IRQHandler /* SPI1 */
.word 0 /* Reserved */
.word USART1_IRQHandler /* USART1 */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word 0 /* Reserved */
/*******************************************************************************
*
* Provide weak aliases for each Exception handler to the Default_Handler.
* As they are weak aliases, any function with the same name will override
* this definition.
*
*******************************************************************************/
.weak NMI_Handler
.thumb_set NMI_Handler,Default_Handler
.weak HardFault_Handler
.thumb_set HardFault_Handler,Default_Handler
.weak SVC_Handler
.thumb_set SVC_Handler,Default_Handler
.weak PendSV_Handler
.thumb_set PendSV_Handler,Default_Handler
.weak SysTick_Handler
.thumb_set SysTick_Handler,Default_Handler
.weak WWDG_IRQHandler
.thumb_set WWDG_IRQHandler,Default_Handler
.weak RTC_IRQHandler
.thumb_set RTC_IRQHandler,Default_Handler
.weak FLASH_IRQHandler
.thumb_set FLASH_IRQHandler,Default_Handler
.weak RCC_IRQHandler
.thumb_set RCC_IRQHandler,Default_Handler
.weak EXTI0_1_IRQHandler
.thumb_set EXTI0_1_IRQHandler,Default_Handler
.weak EXTI2_3_IRQHandler
.thumb_set EXTI2_3_IRQHandler,Default_Handler
.weak EXTI4_15_IRQHandler
.thumb_set EXTI4_15_IRQHandler,Default_Handler
.weak DMA1_Channel1_IRQHandler
.thumb_set DMA1_Channel1_IRQHandler,Default_Handler
.weak DMA1_Channel2_3_IRQHandler
.thumb_set DMA1_Channel2_3_IRQHandler,Default_Handler
.weak DMA1_Channel4_5_IRQHandler
.thumb_set DMA1_Channel4_5_IRQHandler,Default_Handler
.weak ADC1_IRQHandler
.thumb_set ADC1_IRQHandler,Default_Handler
.weak TIM1_BRK_UP_TRG_COM_IRQHandler
.thumb_set TIM1_BRK_UP_TRG_COM_IRQHandler,Default_Handler
.weak TIM1_CC_IRQHandler
.thumb_set TIM1_CC_IRQHandler,Default_Handler
.weak TIM3_IRQHandler
.thumb_set TIM3_IRQHandler,Default_Handler
.weak TIM14_IRQHandler
.thumb_set TIM14_IRQHandler,Default_Handler
.weak TIM16_IRQHandler
.thumb_set TIM16_IRQHandler,Default_Handler
.weak TIM17_IRQHandler
.thumb_set TIM17_IRQHandler,Default_Handler
.weak I2C1_IRQHandler
.thumb_set I2C1_IRQHandler,Default_Handler
.weak SPI1_IRQHandler
.thumb_set SPI1_IRQHandler,Default_Handler
.weak USART1_IRQHandler
.thumb_set USART1_IRQHandler,Default_Handler
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View file

@ -0,0 +1,136 @@
ENTRY(Reset_Handler)
MEMORY {
FLASH (rx): ORIGIN = 0x08000000, LENGTH = 0x3C00
CONFIGFLASH (rw): ORIGIN = 0x08003C00, LENGTH = 0x400
RAM (xrw): ORIGIN = 0x20000000, LENGTH = 4K
}
/* highest address of the user mode stack */
_estack = 0x20001000;
SECTIONS {
/* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */
.isr_vector : {
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH
/* the program code is stored in the .text section, which goes to Flash */
.text : {
. = ALIGN(4);
*(.text) /* normal code */
*(.text.*) /* -ffunction-sections code */
*(.rodata) /* read-only data (constants) */
*(.rodata*) /* -fdata-sections read only data */
*(.glue_7) /* TBD - needed ? */
*(.glue_7t) /* TBD - needed ? */
*(.source_tarball)
/* Necessary KEEP sections (see http://sourceware.org/ml/newlib/2005/msg00255.html) */
KEEP (*(.init))
KEEP (*(.fini))
KEEP (*(.source_tarball))
. = ALIGN(4);
_etext = .;
/* This is used by the startup in order to initialize the .data section */
_sidata = _etext;
} >FLASH
/*
.configflash : {
. = ALIGN(0x400);
*(.configdata)
_econfig = .;
} >FLASH
*/
/* This is the initialized data section
The program executes knowing that the data is in the RAM
but the loader puts the initial values in the FLASH (inidata).
It is one task of the startup to copy the initial values from FLASH to RAM. */
.data : AT ( _sidata ) {
. = ALIGN(4);
/* This is used by the startup in order to initialize the .data secion */
_sdata = . ;
_data = . ;
*(.data)
*(.data.*)
*(.RAMtext)
. = ALIGN(4);
/* This is used by the startup in order to initialize the .data secion */
_edata = . ;
} >RAM
/* This is the uninitialized data section */
.bss : {
. = ALIGN(4);
/* This is used by the startup in order to initialize the .bss secion */
_sbss = .;
_bss = .;
*(.bss)
*(.bss.*) /* patched by elias - allows the use of -fdata-sections */
*(COMMON)
. = ALIGN(4);
/* This is used by the startup in order to initialize the .bss secion */
_ebss = . ;
} >RAM
PROVIDE ( end = _ebss);
PROVIDE (_end = _ebss);
__exidx_start = .;
__exidx_end = .;
/* after that it's only debugging information. */
/* remove the debugging information from the standard libraries */
/* /DISCARD/ : {
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}*/
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
}

View file

@ -0,0 +1,336 @@
/**
******************************************************************************
* @file system_stm32f0xx.c
* copied from: STM32Cube/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates
* @author MCD Application Team
* @version V2.3.1
* @date 04-November-2016
* @brief CMSIS Cortex-M0 Device Peripheral Access Layer System Source File.
*
* 1. This file provides two functions and one global variable to be called from
* user application:
* - SystemInit(): This function is called at startup just after reset and
* before branch to main program. This call is made inside
* the "startup_stm32f0xx.s" file.
*
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
* by the user application to setup the SysTick
* timer or configure other parameters.
*
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
* be called whenever the core clock is changed
* during program execution.
*
* 2. After each device reset the HSI (8 MHz) is used as system clock source.
* Then SystemInit() function is called, in "startup_stm32f0xx.s" file, to
* configure the system clock before to branch to main program.
*
* 3. This file configures the system clock as follows:
*=============================================================================
* Supported STM32F0xx device
*-----------------------------------------------------------------------------
* System Clock source | HSI
*-----------------------------------------------------------------------------
* SYSCLK(Hz) | 8000000
*-----------------------------------------------------------------------------
* HCLK(Hz) | 8000000
*-----------------------------------------------------------------------------
* AHB Prescaler | 1
*-----------------------------------------------------------------------------
* APB1 Prescaler | 1
*-----------------------------------------------------------------------------
*=============================================================================
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/** @addtogroup CMSIS
* @{
*/
/** @addtogroup stm32f0xx_system
* @{
*/
/** @addtogroup STM32F0xx_System_Private_Includes
* @{
*/
#include "stm32f0xx.h"
/**
* @}
*/
/** @addtogroup STM32F0xx_System_Private_TypesDefinitions
* @{
*/
/**
* @}
*/
/** @addtogroup STM32F0xx_System_Private_Defines
* @{
*/
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz.
This value can be provided and adapted by the user application. */
#endif /* HSE_VALUE */
#if !defined (HSI_VALUE)
#define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz.
This value can be provided and adapted by the user application. */
#endif /* HSI_VALUE */
#if !defined (HSI48_VALUE)
#define HSI48_VALUE ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz.
This value can be provided and adapted by the user application. */
#endif /* HSI48_VALUE */
/**
* @}
*/
/** @addtogroup STM32F0xx_System_Private_Macros
* @{
*/
/**
* @}
*/
/** @addtogroup STM32F0xx_System_Private_Variables
* @{
*/
/* This variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
Note: If you use this function to configure the system clock there is no need to
call the 2 first functions listed above, since SystemCoreClock variable is
updated automatically.
*/
uint32_t SystemCoreClock = 8000000;
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
/**
* @}
*/
/** @addtogroup STM32F0xx_System_Private_FunctionPrototypes
* @{
*/
/**
* @}
*/
/** @addtogroup STM32F0xx_System_Private_Functions
* @{
*/
/**
* @brief Setup the microcontroller system.
* Initialize the default HSI clock source, vector table location and the PLL configuration is reset.
* @param None
* @retval None
*/
void SystemInit(void)
{
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001U;
#if defined (STM32F051x8) || defined (STM32F058x8)
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
RCC->CFGR &= (uint32_t)0xF8FFB80CU;
#else
/* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE, MCOSEL[2:0], MCOPRE[2:0] and PLLNODIV bits */
RCC->CFGR &= (uint32_t)0x08FFB80CU;
#endif /* STM32F051x8 or STM32F058x8 */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFFU;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFFU;
/* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
RCC->CFGR &= (uint32_t)0xFFC0FFFFU;
/* Reset PREDIV[3:0] bits */
RCC->CFGR2 &= (uint32_t)0xFFFFFFF0U;
#if defined (STM32F072xB) || defined (STM32F078xx)
/* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFCFE2CU;
#elif defined (STM32F071xB)
/* Reset USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFFCEACU;
#elif defined (STM32F091xC) || defined (STM32F098xx)
/* Reset USART3SW[1:0], USART2SW[1:0], USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFF0FEACU;
#elif defined (STM32F030x6) || defined (STM32F030x8) || defined (STM32F031x6) || defined (STM32F038xx) || defined (STM32F030xC)
/* Reset USART1SW[1:0], I2C1SW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFFFEECU;
#elif defined (STM32F051x8) || defined (STM32F058xx)
/* Reset USART1SW[1:0], I2C1SW, CECSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFFFEACU;
#elif defined (STM32F042x6) || defined (STM32F048xx)
/* Reset USART1SW[1:0], I2C1SW, CECSW, USBSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFFFE2CU;
#elif defined (STM32F070x6) || defined (STM32F070xB)
/* Reset USART1SW[1:0], I2C1SW, USBSW and ADCSW bits */
RCC->CFGR3 &= (uint32_t)0xFFFFFE6CU;
/* Set default USB clock to PLLCLK, since there is no HSI48 */
RCC->CFGR3 |= (uint32_t)0x00000080U;
#else
#warning "No target selected"
#endif
/* Reset HSI14 bit */
RCC->CR2 &= (uint32_t)0xFFFFFFFEU;
/* Disable all interrupts */
RCC->CIR = 0x00000000U;
}
/**
* @brief Update SystemCoreClock variable according to Clock Register Values.
* The SystemCoreClock variable contains the core clock (HCLK), it can
* be used by the user application to setup the SysTick timer or configure
* other parameters.
*
* @note Each time the core clock (HCLK) changes, this function must be called
* to update SystemCoreClock variable value. Otherwise, any configuration
* based on this variable will be incorrect.
*
* @note - The system frequency computed by this function is not the real
* frequency in the chip. It is calculated based on the predefined
* constant and the selected clock source:
*
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
*
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
*
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
* or HSI_VALUE(*) multiplied/divided by the PLL factors.
*
* (*) HSI_VALUE is a constant defined in stm32f0xx_hal.h file (default value
* 8 MHz) but the real value may vary depending on the variations
* in voltage and temperature.
*
* (**) HSE_VALUE is a constant defined in stm32f0xx_hal.h file (default value
* 8 MHz), user has to ensure that HSE_VALUE is same as the real
* frequency of the crystal used. Otherwise, this function may
* have wrong result.
*
* - The result of this function could be not correct when using fractional
* value for HSE crystal.
*
* @param None
* @retval None
*/
void SystemCoreClockUpdate (void)
{
uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0;
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & RCC_CFGR_SWS;
switch (tmp)
{
case RCC_CFGR_SWS_HSI: /* HSI used as system clock */
SystemCoreClock = HSI_VALUE;
break;
case RCC_CFGR_SWS_HSE: /* HSE used as system clock */
SystemCoreClock = HSE_VALUE;
break;
case RCC_CFGR_SWS_PLL: /* PLL used as system clock */
/* Get PLL clock source and multiplication factor ----------------------*/
pllmull = RCC->CFGR & RCC_CFGR_PLLMUL;
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
pllmull = ( pllmull >> 18) + 2;
predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1;
if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV)
{
/* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */
SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull;
}
#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx)
else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV)
{
/* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */
SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull;
}
#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */
else
{
#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) \
|| defined(STM32F078xx) || defined(STM32F071xB) || defined(STM32F072xB) \
|| defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC)
/* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */
SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull;
#else
/* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */
SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 ||
STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB ||
STM32F091xC || STM32F098xx || STM32F030xC */
}
break;
default: /* HSI used as system clock */
SystemCoreClock = HSI_VALUE;
break;
}
/* Compute HCLK clock frequency ----------------*/
/* Get HCLK prescaler */
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
/* HCLK clock frequency */
SystemCoreClock >>= tmp;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View file

@ -0,0 +1,30 @@
#!/usr/bin/env python3
import re
import os
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('cmsis_device_header', nargs='+', type=argparse.FileType('rb'))
args = parser.parse_args()
print('#ifndef __GENERATED_CMSIS_HEADER_EXPORTS__')
print('#define __GENERATED_CMSIS_HEADER_EXPORTS__')
print()
for header in args.cmsis_device_header:
lines = header.readlines()
name = os.path.basename(header.name)
print('#include <{}>'.format(name))
print()
print('/* {} */'.format(name))
for l in lines:
match = re.match(b'^#define (\w+)\s+\W*(\w+_TypeDef|\w+_Type).*$', l)
if match:
inst, typedef = match.groups()
inst, typedef = inst.decode(), typedef.decode()
print('{} *{} = {};'.format(typedef, inst.lower(), inst))
print()
print('#endif//__GENERATED_CMSIS_HEADER_EXPORTS__')

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

View file

@ -0,0 +1,636 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg30061"
inkscape:version="0.92.4 (unknown)"
sodipodi:docname="case_label.svg">
<defs
id="defs30055">
<clipPath
id="clipPath32902"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32900"
d="M 0,0 H 382.677 V 134.646 H 0 Z" />
</clipPath>
<clipPath
id="clipPath32940"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32938"
d="M 0,0 H 382.677 V 134.646 H 0 Z" />
</clipPath>
<clipPath
id="clipPath32958"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32956"
d="M 0,0 H 382.677 V 134.646 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.3003694"
inkscape:cx="370.0435"
inkscape:cy="789.27304"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1030"
inkscape:window-x="0"
inkscape:window-y="50"
inkscape:window-maximized="0"
showguides="false"
inkscape:snap-global="false" />
<metadata
id="metadata30058">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ff9900;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect30606-2"
width="69.900002"
height="99.900002"
x="29.174892"
y="-151.87256"
transform="rotate(90)" />
<path
inkscape:connector-curvature="0"
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 146.92279,43.12507 H 122.92271 V 29.124893 H 80.922687 V 43.12507 H 56.922603 v 131.99969 h 24.000084 v 14.00018 h 42.000023 v -14.00018 h 24.00008 z"
id="rect30606-0" />
<rect
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#bfbfbf;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect30606-5"
width="158"
height="88"
x="30.124813"
y="-145.92256"
rx="2.5"
ry="2.5"
transform="rotate(90)" />
<rect
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.09999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect30606"
width="158"
height="88"
x="30.124817"
y="-145.92256"
rx="2.5"
ry="2.5"
transform="rotate(90)" />
<flowRoot
xml:space="preserve"
id="flowRoot30813-3"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-31.788989,29.337233)"><flowRegion
id="flowRegion30815-7"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"><rect
id="rect30817-5"
width="188.21428"
height="113.21429"
x="479.28571"
y="293.23398"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'" /></flowRegion><flowPara
id="flowPara30821-9"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'">Power</flowPara></flowRoot> <circle
style="opacity:1;vector-effect:none;fill:#cc0000;fill-opacity:1;stroke:none;stroke-width:0.09999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path30688-2-0"
cx="109.12482"
cy="-120.62611"
r="5"
transform="rotate(90)" />
<circle
style="opacity:1;vector-effect:none;fill:#cc0000;fill-opacity:1;stroke:none;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path30688"
cx="-123.18111"
cy="120.62611"
r="3.5999999"
transform="rotate(-90)" />
<circle
style="opacity:1;vector-effect:none;fill:#00cc00;fill-opacity:1;stroke:none;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path30688-1-8"
cx="-133.85524"
cy="120.63043"
r="3.6000004"
transform="rotate(-90)" />
<circle
style="opacity:1;vector-effect:none;fill:#00cc00;fill-opacity:1;stroke:none;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path30688-1-7"
cx="-144.52936"
cy="120.63043"
r="3.6000004"
transform="rotate(-90)" />
<circle
style="opacity:1;vector-effect:none;fill:#00cc00;fill-opacity:1;stroke:none;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path30688-1-9"
cx="-155.20348"
cy="120.63043"
r="3.6000004"
transform="rotate(-90)" />
<circle
style="opacity:1;vector-effect:none;fill:#00cc00;fill-opacity:1;stroke:none;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path30688-1-2"
cx="-165.87759"
cy="120.63043"
r="3.6000004"
transform="rotate(-90)" />
<flowRoot
xml:space="preserve"
id="flowRoot30813"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-29.742602,43.393528)"><flowRegion
id="flowRegion30815"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"><rect
id="rect30817"
width="188.21428"
height="113.21429"
x="479.28571"
y="293.23398"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'" /></flowRegion><flowPara
id="flowPara30821"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'">Error</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot30813-3-2"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-28.348517,85.640493)"><flowRegion
id="flowRegion30815-7-2"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"><rect
id="rect30817-5-8"
width="188.21428"
height="113.21429"
x="479.28571"
y="293.23398"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'" /></flowRegion><flowPara
id="flowPara30821-9-9"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'">1pps</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot30813-3-2-7"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-33.107792,75.496203)"><flowRegion
id="flowRegion30815-7-2-3"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"><rect
id="rect30817-5-8-6"
width="188.21428"
height="113.21429"
x="479.28571"
y="293.23398"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'" /></flowRegion><flowPara
id="flowPara30821-9-9-1"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'">SD Card</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot30813-3-2-7-2"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-27.321107,64.734772)"><flowRegion
id="flowRegion30815-7-2-3-9"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"><rect
id="rect30817-5-8-6-3"
width="188.21428"
height="113.21429"
x="479.28571"
y="293.23398"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'" /></flowRegion><flowPara
id="flowPara30821-9-9-1-1"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'">USB</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot30813-3-2-7-2-9"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-38.239262,54.238465)"><flowRegion
id="flowRegion30815-7-2-3-9-4"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"><rect
id="rect30817-5-8-6-3-7"
width="188.21428"
height="113.21429"
x="479.28571"
y="293.23398"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'" /></flowRegion><flowPara
id="flowPara30821-9-9-1-1-8">OCXO Lock</flowPara></flowRoot> <flowRoot
transform="matrix(0.21068575,0,0,0.21068575,159.96044,-443.75581)"
style="font-style:normal;font-weight:normal;font-size:26.79082298px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#404040;fill-opacity:1;stroke:none;stroke-width:1.25581968px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4703"
xml:space="preserve"><flowRegion
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:0.10406005px"
id="flowRegion4705"><rect
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:1.25581968px"
y="2403.8843"
x="-438.99573"
height="1421.0145"
width="3218.6084"
id="rect4707" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.79082298px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold';fill:#404040;fill-opacity:1;stroke-width:1.25581968px"
id="flowPara4711">Grid Measurement Platform</flowPara></flowRoot> <flowRoot
transform="matrix(0.21068575,0,0,0.21068575,159.79926,-436.66485)"
style="font-style:normal;font-weight:normal;font-size:26.79082298px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#404040;fill-opacity:1;stroke:none;stroke-width:1.25581968px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4703-3"
xml:space="preserve"><flowRegion
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:0.10406005px"
id="flowRegion4705-6"><rect
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:1.25581968px"
y="2403.8843"
x="-438.99573"
height="1421.0145"
width="3218.6084"
id="rect4707-7" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:26.79082298px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';fill:#404040;fill-opacity:1;stroke-width:1.25581968px"
id="flowPara4711-5">Frequency Recorder v0.1</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 108.32738,109.10123 h 5.11686"
id="path32464"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 108.32738,123.18111 h 5.11686"
id="path32464-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 108.32738,133.85524 h 5.11686"
id="path32464-4"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 108.32738,144.52936 h 5.11686"
id="path32464-43"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 108.32738,155.20348 h 5.11686"
id="path32464-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 108.32738,165.87759 h 5.11686"
id="path32464-78"
inkscape:connector-curvature="0" />
<flowRoot
transform="matrix(0.12486648,0,0,0.12486648,122.24337,-222.31832)"
style="font-style:normal;font-weight:normal;font-size:22.60192108px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#404040;fill-opacity:1;stroke:none;stroke-width:2.11892986px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4703-3-6"
xml:space="preserve"><flowRegion
style="font-size:22.60192108px;fill:#404040;fill-opacity:1;stroke-width:0.17557929px"
id="flowRegion4705-6-8"><rect
style="font-size:22.60192108px;fill:#404040;fill-opacity:1;stroke-width:2.11892986px"
y="2403.8843"
x="-438.99573"
height="1421.0145"
width="3218.6084"
id="rect4707-7-8" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:22.60192108px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';fill:#404040;fill-opacity:1;stroke-width:2.11892986px"
id="flowPara4711-5-4">master@jaseg.de</flowPara></flowRoot> <g
id="g32629"
transform="translate(-62.290318,1.6200773)">
<circle
r="2.95"
cy="121.56103"
cx="182.91643"
id="path32538"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
id="g32576">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 184.85051,114.69284 v 9.86819"
id="path32555"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 179.91642,119.62693 h 9.86819"
id="path32555-1"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g32635"
transform="translate(-50.998711,-24.406418)">
<circle
r="4"
cy="133.53123"
cx="171.62482"
id="path32538-3"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="fill:none;stroke:#000000;stroke-width:0.1249138;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.80055208,0,0,0.80055208,23.642356,37.76364)"
id="g32576-4">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1249138;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 184.85051,114.69284 v 9.86819"
id="path32555-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1249138;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 179.91642,119.62693 h 9.86819"
id="path32555-1-2"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(-62.285992,12.294211)"
id="g32629-6">
<circle
r="2.95"
cy="121.56103"
cx="182.91643"
id="path32538-8"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
id="g32576-9">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 184.85051,114.69284 v 9.86819"
id="path32555-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 179.91642,119.62693 h 9.86819"
id="path32555-1-6"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(-62.285992,22.968329)"
id="g32629-64">
<circle
r="2.95"
cy="121.56103"
cx="182.91643"
id="path32538-9"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
id="g32576-5">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 184.85051,114.69284 v 9.86819"
id="path32555-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 179.91642,119.62693 h 9.86819"
id="path32555-1-4"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(-62.285992,33.642447)"
id="g32629-8">
<circle
r="2.95"
cy="121.56103"
cx="182.91643"
id="path32538-7"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
id="g32576-1">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 184.85051,114.69284 v 9.86819"
id="path32555-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 179.91642,119.62693 h 9.86819"
id="path32555-1-27"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="translate(-62.285992,44.316565)"
id="g32629-5">
<circle
r="2.95"
cy="121.56103"
cx="182.91643"
id="path32538-94"
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
id="g32576-90">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 184.85051,114.69284 v 9.86819"
id="path32555-91"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 179.91642,119.62693 h 9.86819"
id="path32555-1-7"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="matrix(0.11623658,0,0,-0.11623658,79.67495,58.481293)"
inkscape:label="002_Logo_1c"
id="g32894"
style="stroke-width:3.03499794">
<g
id="g32896"
style="stroke-width:3.03499794">
<g
clip-path="url(#clipPath32902)"
id="g32898"
style="stroke-width:3.03499794">
<g
transform="translate(103.5419,75.0928)"
id="g32904"
style="stroke-width:3.03499794">
<path
inkscape:connector-curvature="0"
id="path32906"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 0,0 H -1.087 L -5.856,12.265 H -6.543 L -11.502,0 h -0.992 v -0.725 h 3.643 V 0 h -1.583 l 1.393,3.433 4.883,-0.019 1.335,-3.433 H -4.349 V -0.725 H 0 Z m -8.679,4.33 2.155,5.36 2.041,-5.36 z M 8.03,1.202 H 7.344 V 0.038 H 4.139 V 7.325 H 5.57 V 8.088 H 1.259 V 7.325 h 1.43 V -0.019 H 1.259 V -0.725 H 8.03 Z M 16.137,1.049 H 15.431 V 0.038 H 12.188 V 3.376 H 14.63 V 2.422 h 0.706 V 5.074 L 14.63,5.055 V 4.139 h -2.442 v 3.186 h 3.129 V 6.333 h 0.686 V 8.469 H 15.298 V 8.088 H 9.308 V 7.382 h 1.431 V -0.019 H 9.308 v -0.706 h 6.829 z m 10.338,-1.068 h -1.03 l -2.937,3.987 2.823,3.357 h 1.03 V 8.088 H 23.29 V 7.325 h 1.087 L 22.069,4.559 20.028,7.325 h 1.125 V 8.088 H 17.415 V 7.325 h 1.011 l 2.785,-3.777 -2.995,-3.567 h -0.954 v -0.706 h 3.071 v 0.706 H 19.17 l 2.479,2.976 2.213,-2.976 h -1.164 v -0.706 h 3.777 z m 9.232,0 h -0.801 l -3.51,8.393 H 30.9 l -3.662,-8.393 h -0.725 v -0.706 h 2.671 v 0.706 h -1.088 l 0.916,2.079 h 3.471 l 0.859,-2.079 h -0.839 v -0.706 h 3.204 z m -6.371,2.823 1.45,3.357 1.392,-3.357 z M 45.53,7.325 h 1.431 V 8.088 H 43.127 V 7.325 h 1.45 V 1.869 l -5.36,6.219 H 36.756 V 7.325 h 1.335 l 0.382,-0.496 v -6.848 h -1.431 v -0.706 h 3.834 v 0.706 h -1.45 v 5.627 l 5.532,-6.485 h 0.572 z m 3.567,-8.05 h 4.521 c 2.632,0 4.616,1.889 4.616,4.406 0,2.461 -2.022,4.407 -4.616,4.407 H 49.097 V 7.382 h 1.431 v -7.401 h -1.431 z m 2.881,0.763 v 7.287 h 1.506 c 1.755,0 3.11,-1.603 3.11,-3.663 0,-2.06 -1.355,-3.624 -3.129,-3.624 z M 67.104,1.049 H 66.398 V 0.038 h -3.243 v 3.338 h 2.442 V 2.422 h 0.705 V 5.074 L 65.597,5.055 V 4.139 h -2.442 v 3.186 h 3.128 V 6.333 H 66.97 V 8.469 H 66.264 V 8.088 H 60.275 V 7.382 h 1.43 v -7.401 h -1.43 v -0.706 h 6.829 z m 10.929,-1.068 h -0.534 c -0.42,0 -0.763,0.229 -1.106,0.706 l -1.774,2.594 c 1.259,0.229 2.041,1.163 2.041,2.441 0,1.545 -0.992,2.366 -2.842,2.366 H 69.316 V 7.325 h 1.431 v -7.344 h -1.431 v -0.706 h 4.311 v 0.706 h -1.431 v 3.166 h 0.935 l 2.041,-3.071 c 0.477,-0.725 0.629,-0.801 1.469,-0.801 h 1.392 z m -5.837,7.344 h 1.336 c 0.991,0 1.526,-0.592 1.526,-1.66 0,-1.049 -0.592,-1.755 -1.507,-1.755 h -1.355 z m 18.712,0 h 0.801 V 8.088 H 88.944 V 7.325 h 1.087 l -2.404,-5.894 -2.46,5.894 h 1.201 v 0.763 h -3.7 V 7.325 h 0.935 l 3.433,-8.279 h 0.458 z m 6.142,-8.298 c 2.404,0 4.502,2.175 4.502,4.673 0,2.461 -2.098,4.617 -4.502,4.617 -2.441,0 -4.54,-2.137 -4.54,-4.617 0,-2.517 2.099,-4.673 4.54,-4.673 m -0.019,8.488 c 1.602,0 2.899,-1.697 2.899,-3.834 0,-2.155 -1.278,-3.853 -2.899,-3.853 -1.602,0 -2.88,1.717 -2.88,3.872 0,2.118 1.278,3.815 2.88,3.815 m 15.26,-0.19 h 1.43 v 0.763 h -3.834 V 7.325 h 1.45 V 1.869 l -5.36,6.219 h -2.461 V 7.325 h 1.336 l 0.381,-0.496 v -6.848 h -1.431 v -0.706 h 3.834 v 0.706 h -1.449 v 5.627 l 5.531,-6.485 h 0.573 z m 21.516,-7.344 h -1.45 v 11.178 h 1.45 v 0.705 h -4.54 v -0.705 h 1.431 V 6.085 h -7.153 v 5.074 h 1.43 v 0.705 h -4.54 v -0.705 h 1.431 V -0.019 h -1.431 v -0.706 h 4.54 v 0.706 h -1.43 v 5.245 h 7.153 v -5.245 h -1.431 v -0.706 h 4.54 z m 12.112,8.107 h -3.834 V 7.325 h 1.431 V 2.556 c 0,-1.545 -1.031,-2.651 -2.461,-2.651 -1.393,0 -2.327,1.068 -2.327,2.632 v 4.788 h 1.449 v 0.763 h -4.329 V 7.325 h 1.449 V 2.136 c 0,-1.793 1.488,-3.109 3.529,-3.109 2.174,0 3.662,1.412 3.662,3.472 v 4.826 h 1.431 z m 13.734,-8.107 h -1.431 v 7.344 h 1.431 v 0.763 h -2.976 l -3.071,-6.448 -3.014,6.448 h -2.861 V 7.325 h 1.43 v -7.344 h -1.43 v -0.706 h 3.834 v 0.706 h -1.431 V 5.97 l 3.186,-6.828 3.452,7.21 v -6.371 h -1.43 v -0.706 h 4.311 z m 7.286,-0.706 c 1.812,0 2.861,0.839 2.861,2.308 0,1.431 -1.049,2.289 -2.88,2.346 1.392,0 2.403,0.821 2.403,1.965 0,1.335 -1.03,2.194 -2.651,2.194 h -4.654 V 7.382 h 1.43 v -7.401 h -1.43 v -0.706 z m -2.041,4.197 h 1.373 c 1.259,0 1.889,-0.611 1.889,-1.793 0,-1.088 -0.649,-1.641 -1.908,-1.641 h -1.354 z m 0,3.853 h 1.354 c 0.935,0 1.431,-0.534 1.431,-1.488 0,-0.973 -0.611,-1.602 -1.564,-1.602 h -1.221 z m 11.158,-8.298 c 2.404,0 4.502,2.175 4.502,4.673 0,2.461 -2.098,4.617 -4.502,4.617 -2.441,0 -4.539,-2.137 -4.539,-4.617 0,-2.517 2.098,-4.673 4.539,-4.673 m -0.019,8.488 c 1.602,0 2.9,-1.697 2.9,-3.834 0,-2.155 -1.278,-3.853 -2.9,-3.853 -1.602,0 -2.88,1.717 -2.88,3.872 0,2.118 1.278,3.815 2.88,3.815 M 189.37,1.202 h -0.687 V 0.038 h -3.204 v 7.287 h 1.431 v 0.763 h -4.311 V 7.325 h 1.43 v -7.344 h -1.43 v -0.706 h 6.771 z m 1.278,-1.927 h 4.521 c 2.632,0 4.616,1.889 4.616,4.406 0,2.461 -2.022,4.407 -4.616,4.407 h -4.521 V 7.382 h 1.431 v -7.401 h -1.431 z m 2.88,0.763 v 7.287 h 1.507 c 1.755,0 3.109,-1.603 3.109,-3.663 0,-2.06 -1.354,-3.624 -3.128,-3.624 z m 13.6,-0.057 h -1.621 v 7.344 h 2.785 V 6.256 h 0.706 v 2.213 h -0.706 V 8.088 h -7.02 v 0.381 h -0.686 V 6.256 h 0.686 v 1.069 h 2.785 v -7.344 h -1.621 v -0.706 h 4.692 z" />
</g>
<g
transform="translate(104.5316,31.5149)"
id="g32908"
style="stroke-width:3.03499794">
<path
inkscape:connector-curvature="0"
id="path32910"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 0,0 V 10.487 H -1.981 V 0.604 c 0,-1.981 -0.145,-2.537 -0.919,-3.383 -0.797,-0.894 -1.957,-1.377 -3.334,-1.377 -1.378,0 -2.538,0.483 -3.335,1.377 -0.773,0.846 -0.918,1.402 -0.918,3.383 v 9.883 h -1.982 V 0 c 0,-2.078 0.532,-3.359 1.861,-4.446 1.184,-0.967 2.682,-1.474 4.398,-1.474 1.715,0 3.189,0.507 4.374,1.474 C -0.507,-3.359 0,-2.126 0,0 M 17.93,-5.606 V 10.487 H 15.948 V -3.021 c -0.048,0.097 -0.072,0.194 -0.096,0.242 -0.169,0.459 -0.194,0.483 -0.29,0.725 -0.073,0.145 -0.145,0.29 -0.218,0.387 L 7.443,10.487 H 4.857 V -5.461 H 6.838 V 8.361 C 6.935,8.047 6.983,7.926 7.08,7.757 7.104,7.66 7.177,7.563 7.273,7.394 7.394,7.153 7.515,6.959 7.588,6.839 l 8.046,-12.445 z m 18.606,8.192 c 0,4.591 -3.359,7.901 -8.022,7.901 H 23.197 V -5.461 h 5.292 c 2.779,0 4.447,0.652 5.897,2.32 1.377,1.57 2.15,3.648 2.15,5.727 M 34.458,2.61 c 0,-1.74 -0.797,-3.722 -1.957,-4.954 -1.015,-1.039 -2.199,-1.45 -4.302,-1.45 h -3.02 V 8.82 h 3.02 c 3.601,0 6.259,-2.658 6.259,-6.21 m 24.213,-7.467 v 6.524 h -1.982 v -5.316 c -1.28,-0.266 -1.836,-0.338 -2.634,-0.338 -3.987,0 -6.935,2.827 -6.935,6.669 0,1.571 0.58,3.093 1.571,4.253 1.232,1.426 2.682,2.03 4.929,2.03 1.281,0 2.538,-0.242 3.456,-0.628 0.193,-0.097 0.459,-0.218 0.846,-0.435 l 0.749,1.643 c -0.87,0.483 -1.233,0.652 -1.933,0.846 -0.846,0.217 -2.175,0.362 -3.311,0.362 -4.857,0 -8.433,-3.48 -8.433,-8.216 0,-4.712 3.697,-8.312 8.506,-8.312 1.329,0 2.923,0.193 4.011,0.531 0.266,0.073 0.652,0.194 1.16,0.387 M 72.71,-5.461 v 1.667 h -7.201 v 5.63 h 5.775 V 3.504 H 65.509 V 8.82 h 6.984 v 1.667 H 63.528 V -5.461 Z M 85.517,9.424 c -0.894,0.532 -1.281,0.725 -1.933,0.943 -0.822,0.265 -1.764,0.386 -2.683,0.386 -3.165,0 -5.267,-1.691 -5.267,-4.229 0,-1.643 1.014,-2.899 3.407,-4.18 1.498,-0.822 2.392,-1.281 2.658,-1.426 0.628,-0.362 1.087,-0.821 1.353,-1.305 0.169,-0.29 0.242,-0.676 0.242,-1.135 0,-1.523 -1.136,-2.417 -3.021,-2.417 -0.821,0 -1.595,0.145 -2.295,0.411 -0.556,0.217 -0.943,0.435 -1.837,1.039 L 75.126,-4.06 c 1.039,-0.7 1.45,-0.942 2.054,-1.184 0.846,-0.338 1.861,-0.531 2.948,-0.531 3.214,0 5.244,1.715 5.244,4.446 0,1.16 -0.459,2.247 -1.233,2.9 -0.579,0.507 -1.425,1.039 -2.513,1.619 -3.238,1.715 -3.938,2.319 -3.938,3.504 0,1.353 1.232,2.247 3.044,2.247 0.629,0 1.595,-0.145 2.199,-0.338 0.508,-0.17 0.846,-0.339 1.668,-0.822 z M 98.638,-5.461 v 1.667 h -7.201 v 5.63 h 5.775 V 3.504 H 91.437 V 8.82 h 6.984 v 1.667 H 89.456 V -5.461 Z m 12.952,0 v 1.667 h -7.129 V 10.487 H 102.48 V -5.461 Z m 11.961,0 v 1.667 h -7.128 v 14.281 h -1.982 V -5.461 Z m 11.816,14.885 c -0.894,0.532 -1.28,0.725 -1.933,0.943 -0.821,0.265 -1.764,0.386 -2.682,0.386 -3.166,0 -5.268,-1.691 -5.268,-4.229 0,-1.643 1.015,-2.899 3.407,-4.18 1.498,-0.822 2.392,-1.281 2.658,-1.426 0.629,-0.362 1.088,-0.821 1.354,-1.305 0.169,-0.29 0.241,-0.676 0.241,-1.135 0,-1.523 -1.136,-2.417 -3.02,-2.417 -0.822,0 -1.595,0.145 -2.296,0.411 -0.556,0.217 -0.942,0.435 -1.837,1.039 l -1.014,-1.571 c 1.039,-0.7 1.449,-0.942 2.054,-1.184 0.845,-0.338 1.86,-0.531 2.948,-0.531 3.213,0 5.243,1.715 5.243,4.446 0,1.16 -0.459,2.247 -1.232,2.9 -0.58,0.507 -1.426,1.039 -2.513,1.619 -3.238,1.715 -3.939,2.319 -3.939,3.504 0,1.353 1.232,2.247 3.045,2.247 0.628,0 1.595,-0.145 2.199,-0.338 0.507,-0.17 0.845,-0.339 1.667,-0.822 z m 15.369,-0.169 c -0.798,0.556 -1.136,0.749 -1.837,0.991 -0.942,0.362 -1.957,0.531 -2.996,0.531 -4.567,0 -8.023,-3.528 -8.023,-8.191 0,-4.906 3.407,-8.361 8.216,-8.361 0.749,0 1.402,0.072 2.199,0.266 0.798,0.193 1.184,0.338 2.151,0.773 l -0.556,1.546 c -1.281,-0.531 -2.32,-0.749 -3.673,-0.749 -3.745,0 -6.186,2.634 -6.186,6.645 0,3.649 2.416,6.259 5.799,6.259 1.547,0 2.707,-0.362 3.915,-1.208 z m 16.552,-14.716 v 15.948 h -1.981 V 3.649 h -9.4 v 6.838 h -1.982 V -5.461 h 1.982 v 7.297 h 9.4 v -7.297 z m 16.819,0 -5.921,16.407 h -2.126 l -5.945,-16.407 h 2.127 l 1.643,4.712 h 6.452 l 1.643,-4.712 z m -4.398,6.524 h -5.196 l 2.61,7.298 z m 16.189,7.757 v 1.667 h -8.965 V -5.461 h 1.982 v 7.128 h 5.775 v 1.692 h -5.775 V 8.82 Z m 13.822,0 v 1.667 H 197.106 V 8.82 h 5.317 V -5.461 h 1.981 V 8.82 Z" />
</g>
<path
inkscape:connector-curvature="0"
id="path32912"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 93.997,65.686 H 92.016 V 49.738 h 1.981 z m 18.341,-16.094 v 16.094 h -1.982 V 52.178 c -0.048,0.096 -0.072,0.193 -0.096,0.241 -0.17,0.46 -0.194,0.484 -0.29,0.725 -0.073,0.145 -0.145,0.29 -0.218,0.387 L 101.85,65.686 H 99.265 V 49.737 h 1.981 v 13.822 c 0.097,-0.314 0.145,-0.435 0.242,-0.604 0.024,-0.097 0.097,-0.193 0.193,-0.362 0.121,-0.242 0.242,-0.435 0.314,-0.556 l 8.047,-12.445 z m 14.232,15.03 c -0.894,0.532 -1.28,0.725 -1.933,0.943 -0.821,0.266 -1.764,0.387 -2.682,0.387 -3.166,0 -5.268,-1.692 -5.268,-4.229 0,-1.643 1.015,-2.9 3.407,-4.181 1.498,-0.821 2.392,-1.28 2.658,-1.425 0.629,-0.363 1.088,-0.822 1.353,-1.305 0.17,-0.29 0.242,-0.677 0.242,-1.136 0,-1.522 -1.136,-2.416 -3.02,-2.416 -0.822,0 -1.595,0.145 -2.296,0.41 -0.556,0.218 -0.942,0.435 -1.837,1.039 l -1.014,-1.57 c 1.039,-0.701 1.449,-0.943 2.054,-1.184 0.845,-0.339 1.86,-0.532 2.948,-0.532 3.213,0 5.243,1.716 5.243,4.446 0,1.16 -0.459,2.248 -1.232,2.9 -0.58,0.508 -1.426,1.039 -2.513,1.619 -3.238,1.716 -3.939,2.32 -3.939,3.504 0,1.353 1.232,2.247 3.045,2.247 0.628,0 1.595,-0.145 2.199,-0.338 0.507,-0.169 0.845,-0.338 1.667,-0.822 z m 14.112,-0.604 v 1.668 h -12.614 v -1.668 h 5.317 V 49.737 h 1.981 v 14.281 z m 4.833,1.668 h -1.981 V 49.738 h 1.981 z m 15.44,-1.668 v 1.668 h -12.613 v -1.668 h 5.316 V 49.737 h 1.981 v 14.281 z m 14.91,-8.82 v 10.488 h -1.982 v -9.884 c 0,-1.981 -0.145,-2.537 -0.918,-3.383 -0.798,-0.894 -1.957,-1.377 -3.335,-1.377 -1.377,0 -2.537,0.483 -3.335,1.377 -0.773,0.846 -0.918,1.402 -0.918,3.383 v 9.884 h -1.981 V 55.198 c 0,-2.078 0.531,-3.358 1.86,-4.446 1.184,-0.966 2.683,-1.474 4.398,-1.474 1.716,0 3.19,0.508 4.374,1.474 1.329,1.088 1.837,2.32 1.837,4.446 m 15.03,8.82 v 1.668 h -12.614 v -1.668 h 5.316 V 49.737 h 1.982 v 14.281 z m 17.857,0 v 1.668 h -8.965 V 49.737 h 1.981 v 7.129 h 5.776 v 1.691 h -5.776 v 5.461 z m 13.29,4.132 c 0,0.677 -0.532,1.209 -1.208,1.209 -0.677,0 -1.208,-0.532 -1.208,-1.209 0,-0.676 0.531,-1.208 1.208,-1.208 0.676,0 1.208,0.532 1.208,1.208 m -4.881,0 c 0,0.677 -0.532,1.209 -1.208,1.209 -0.677,0 -1.209,-0.532 -1.209,-1.209 0,-0.676 0.532,-1.208 1.209,-1.208 0.676,0 1.208,0.532 1.208,1.208 m 7.297,-12.952 v 10.488 h -1.981 v -9.884 c 0,-1.981 -0.145,-2.537 -0.918,-3.383 -0.798,-0.894 -1.958,-1.377 -3.335,-1.377 -1.377,0 -2.537,0.483 -3.335,1.377 -0.773,0.846 -0.918,1.402 -0.918,3.383 v 9.884 H 211.99 V 55.198 c 0,-2.078 0.531,-3.358 1.86,-4.446 1.184,-0.966 2.682,-1.474 4.398,-1.474 1.716,0 3.19,0.508 4.374,1.474 1.329,1.088 1.836,2.32 1.836,4.446 m 15.635,-5.461 -4.712,7.129 c 1.184,0.266 1.764,0.555 2.416,1.208 0.894,0.846 1.402,2.054 1.402,3.31 0,1.209 -0.484,2.369 -1.257,3.118 -0.918,0.894 -1.836,1.184 -3.77,1.184 h -4.857 V 49.737 h 1.982 v 6.839 h 2.126 l 4.398,-6.839 z m -3.021,11.623 c 0,-2.054 -1.087,-3.117 -3.19,-3.117 h -2.585 v 5.775 h 2.585 c 1.426,0 1.837,-0.072 2.32,-0.459 0.58,-0.459 0.87,-1.184 0.87,-2.199 m 14.378,4.326 h -1.981 V 49.738 h 1.981 z m 18.34,-16.094 v 16.094 h -1.981 V 52.178 c -0.048,0.096 -0.073,0.193 -0.097,0.241 -0.169,0.46 -0.193,0.484 -0.29,0.725 -0.072,0.145 -0.145,0.29 -0.217,0.387 l -7.902,12.155 h -2.586 V 49.737 h 1.982 v 13.822 c 0.097,-0.314 0.145,-0.435 0.242,-0.604 0.024,-0.097 0.096,-0.193 0.193,-0.362 0.121,-0.242 0.242,-0.435 0.314,-0.556 l 8.047,-12.445 z m 15.441,14.426 v 1.668 h -12.614 v -1.668 h 5.316 V 49.737 h 1.982 v 14.281 z m 12.034,-14.281 v 1.668 h -7.201 v 5.63 h 5.775 v 1.667 h -5.775 v 5.316 h 6.983 v 1.668 h -8.965 V 49.737 Z m 14.619,0 -4.712,7.129 c 1.184,0.266 1.764,0.555 2.416,1.208 0.894,0.846 1.402,2.054 1.402,3.31 0,1.209 -0.484,2.369 -1.257,3.118 -0.918,0.894 -1.836,1.184 -3.769,1.184 h -4.858 V 49.737 h 1.982 v 6.839 h 2.126 l 4.398,-6.839 z m -3.021,11.623 c 0,-2.054 -1.087,-3.117 -3.189,-3.117 h -2.586 v 5.775 h 2.586 c 1.425,0 1.836,-0.072 2.319,-0.459 0.58,-0.459 0.87,-1.184 0.87,-2.199 M 328.291,49.592 V 65.686 H 326.31 V 52.178 c -0.048,0.096 -0.073,0.193 -0.097,0.241 -0.169,0.46 -0.193,0.484 -0.29,0.725 -0.072,0.145 -0.145,0.29 -0.217,0.387 l -7.902,12.155 h -2.586 V 49.737 h 1.982 v 13.822 c 0.097,-0.314 0.145,-0.435 0.242,-0.604 0.024,-0.097 0.096,-0.193 0.193,-0.362 0.121,-0.242 0.242,-0.435 0.314,-0.556 l 8.047,-12.445 z m 14.45,0.145 v 1.668 h -7.201 v 5.63 h 5.776 v 1.667 h -5.776 v 5.316 h 6.984 v 1.668 h -8.965 V 49.737 Z m 14.015,14.281 v 1.668 h -12.613 v -1.668 h 5.316 V 49.737 h 1.981 v 14.281 z" />
<g
transform="translate(26.0438,59.5232)"
id="g32914"
style="stroke-width:3.03499794">
<path
inkscape:connector-curvature="0"
id="path32916"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 0,0 c 0,-0.006 -0.001,-0.012 -0.001,-0.019 0,-18.626 9.962,-33.839 27.075,-33.839 17.099,0 27.075,15.213 27.075,33.839 0,0.007 -10e-4,0.013 -10e-4,0.019 z" />
</g>
</g>
</g>
<path
inkscape:connector-curvature="0"
id="path32918"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 44.569,50.357 h 17.077 v 2.049 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32920"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 44.569,54.484 h 17.077 v 2.049 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32922"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 44.569,37.975 h 17.077 v 2.049 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32924"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 44.569,42.103 h 17.077 v 2.049 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32926"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 44.569,46.23 h 17.077 v 2.049 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32928"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 44.569,29.721 H 61.646 V 31.77 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32930"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 44.569,33.848 h 17.077 v 2.049 H 44.569 Z" />
<path
inkscape:connector-curvature="0"
id="path32932"
style="fill:#a7a5a6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 80.204,61.599 H 54.161 v 26.043 h 26.043 z" />
<g
id="g32934"
style="stroke-width:3.03499794">
<g
clip-path="url(#clipPath32940)"
id="g32936"
style="stroke-width:3.03499794">
<g
transform="translate(60.3389,74.6067)"
id="g32942"
style="stroke-width:3.03499794">
<path
inkscape:connector-curvature="0"
id="path32944"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 0,0 c 0,3.802 3.07,6.872 6.843,6.872 3.802,0 6.844,-3.07 6.844,-6.872 0,-3.774 -3.042,-6.843 -6.844,-6.843 C 3.07,-6.843 0,-3.774 0,0 m 11.828,0 c 0,2.76 -2.225,4.985 -4.985,4.985 C 4.112,4.985 1.859,2.76 1.859,0 c 0,-2.732 2.253,-4.957 4.984,-4.957 2.76,0 4.985,2.225 4.985,4.957" />
</g>
</g>
</g>
<path
inkscape:connector-curvature="0"
id="path32946"
style="fill:#656263;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 52.086,61.599 H 26.043 v 26.043 h 26.043 z" />
<g
transform="translate(35.5144,69.5322)"
id="g32948"
style="stroke-width:3.03499794">
<path
inkscape:connector-curvature="0"
id="path32950"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="M 0,0 H 2.577 V 10.177 H 0 V 11.15 H 7.1 V 10.177 H 4.55 V 0 H 7.1 V -0.973 H 0 Z" />
</g>
<g
id="g32952"
style="stroke-width:3.03499794">
<g
clip-path="url(#clipPath32958)"
id="g32954"
style="stroke-width:3.03499794">
<g
transform="translate(69.6443,104.3782)"
id="g32960"
style="stroke-width:3.03499794">
<path
inkscape:connector-curvature="0"
id="path32962"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 0,0 h -11.099 c -0.507,1.839 -1.833,4.224 -5.32,4.224 -3.486,0 -4.826,-2.385 -5.344,-4.224 H -32.874 V -2.135 H 0 Z" />
</g>
</g>
</g>
<path
inkscape:connector-curvature="0"
id="path32964"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 36.77,90.413 h 2.135 v 10.531 H 36.77 Z" />
<path
inkscape:connector-curvature="0"
id="path32966"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 42.107,90.413 h 2.135 v 10.531 h -2.135 z" />
<path
inkscape:connector-curvature="0"
id="path32968"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 47.444,90.413 h 2.135 v 10.531 h -2.135 z" />
<path
inkscape:connector-curvature="0"
id="path32970"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 56.836,90.413 h 2.135 v 10.531 h -2.135 z" />
<path
inkscape:connector-curvature="0"
id="path32972"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 62.173,90.413 h 2.135 v 10.531 h -2.135 z" />
<path
inkscape:connector-curvature="0"
id="path32974"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
d="m 67.51,90.413 h 2.135 v 10.531 H 67.51 Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

View file

@ -0,0 +1,573 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1080"
inkscape:version="0.92.4 (unknown)"
sodipodi:docname="case_label_print.svg">
<defs
id="defs1074">
<clipPath
id="clipPath32902"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32900"
d="M 0,0 H 382.677 V 134.646 H 0 Z" />
</clipPath>
<clipPath
id="clipPath32940"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32938"
d="M 0,0 H 382.677 V 134.646 H 0 Z" />
</clipPath>
<clipPath
id="clipPath32958"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path32956"
d="M 0,0 H 382.677 V 134.646 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="441.29108"
inkscape:cy="726.82755"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1030"
inkscape:window-x="0"
inkscape:window-y="50"
inkscape:window-maximized="0" />
<metadata
id="metadata1077">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g2017"
transform="rotate(-90,22.111604,129.74548)">
<rect
transform="rotate(90)"
ry="2.5"
rx="2.5"
y="-139.7619"
x="134.33328"
height="86"
width="156"
id="rect30606-3"
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.09999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-36.949646,132.54568)"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot30813-3"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"
id="flowRegion30815-7"><rect
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"
y="293.23398"
x="479.28571"
height="113.21429"
width="188.21428"
id="rect30817-5" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"
id="flowPara30821-9">Power</flowPara></flowRoot> <flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-34.903258,146.60198)"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot30813"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"
id="flowRegion30815"><rect
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"
y="293.23398"
x="479.28571"
height="113.21429"
width="188.21428"
id="rect30817" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold'"
id="flowPara30821">Error</flowPara></flowRoot> <flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-33.509174,188.84894)"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot30813-3-2"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowRegion30815-7-2"><rect
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
y="293.23398"
x="479.28571"
height="113.21429"
width="188.21428"
id="rect30817-5-8" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowPara30821-9-9">1pps</flowPara></flowRoot> <flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-38.268449,178.70466)"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot30813-3-2-7"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowRegion30815-7-2-3"><rect
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
y="293.23398"
x="479.28571"
height="113.21429"
width="188.21428"
id="rect30817-5-8-6" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowPara30821-9-9-1">SD Card</flowPara></flowRoot> <flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-32.481765,167.94322)"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot30813-3-2-7-2"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowRegion30815-7-2-3-9"><rect
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
y="293.23398"
x="479.28571"
height="113.21429"
width="188.21428"
id="rect30817-5-8-6-3" /></flowRegion><flowPara
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowPara30821-9-9-1-1">USB</flowPara></flowRoot> <flowRoot
transform="matrix(0.26458333,0,0,0.26458333,-43.399918,157.44692)"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:15px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot30813-3-2-7-2-9"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
id="flowRegion30815-7-2-3-9-4"><rect
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light'"
y="293.23398"
x="479.28571"
height="113.21429"
width="188.21428"
id="rect30817-5-8-6-3-7" /></flowRegion><flowPara
id="flowPara30821-9-9-1-1-8">OCXO Lock</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot4703"
style="font-style:normal;font-weight:normal;font-size:26.79082298px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#404040;fill-opacity:1;stroke:none;stroke-width:1.25581968px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.21068575,0,0,0.21068575,154.79978,-340.54735)"><flowRegion
id="flowRegion4705"
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:0.10406005px"><rect
id="rect4707"
width="3218.6084"
height="1421.0145"
x="-438.99573"
y="2403.8843"
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:1.25581968px" /></flowRegion><flowPara
id="flowPara4711"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:26.79082298px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Bold';fill:#404040;fill-opacity:1;stroke-width:1.25581968px">Grid Measurement Platform</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot4703-3"
style="font-style:normal;font-weight:normal;font-size:26.79082298px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#404040;fill-opacity:1;stroke:none;stroke-width:1.25581968px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.21068575,0,0,0.21068575,154.6386,-333.45638)"><flowRegion
id="flowRegion4705-6"
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:0.10406005px"><rect
id="rect4707-7"
width="3218.6084"
height="1421.0145"
x="-438.99573"
y="2403.8843"
style="font-size:26.79082298px;fill:#404040;fill-opacity:1;stroke-width:1.25581968px" /></flowRegion><flowPara
id="flowPara4711-5"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:26.79082298px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';fill:#404040;fill-opacity:1;stroke-width:1.25581968px">Frequency Recorder v0.1</flowPara></flowRoot> <path
inkscape:connector-curvature="0"
id="path32464"
d="m 103.16673,212.30968 h 5.11686"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32464-7"
d="m 103.16673,226.38956 h 5.11686"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32464-4"
d="m 103.16673,237.06369 h 5.11686"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32464-43"
d="m 103.16673,247.73781 h 5.11686"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32464-0"
d="m 103.16673,258.41193 h 5.11686"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32464-78"
d="m 103.16673,269.08604 h 5.11686"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<flowRoot
xml:space="preserve"
id="flowRoot4703-3-6"
style="font-style:normal;font-weight:normal;font-size:22.60192108px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#404040;fill-opacity:1;stroke:none;stroke-width:2.11892986px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.12486648,0,0,0.12486648,117.08272,-119.10986)"><flowRegion
id="flowRegion4705-6-8"
style="font-size:22.60192108px;fill:#404040;fill-opacity:1;stroke-width:0.17557929px"><rect
id="rect4707-7-8"
width="3218.6084"
height="1421.0145"
x="-438.99573"
y="2403.8843"
style="font-size:22.60192108px;fill:#404040;fill-opacity:1;stroke-width:2.11892986px" /></flowRegion><flowPara
id="flowPara4711-5-4"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:22.60192108px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro Light';fill:#404040;fill-opacity:1;stroke-width:2.11892986px">master@jaseg.de</flowPara></flowRoot> <g
transform="translate(-67.450979,104.82853)"
id="g32629">
<circle
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32538"
cx="182.91643"
cy="121.56103"
r="2.95" />
<g
id="g32576"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
id="path32555"
d="m 184.85051,114.69284 v 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32555-1"
d="m 179.91642,119.62693 h 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
transform="translate(-56.159369,78.802034)"
id="g32635">
<circle
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32538-3"
cx="171.62482"
cy="133.53123"
r="4" />
<g
id="g32576-4"
transform="matrix(0.80055208,0,0,0.80055208,23.642356,37.76364)"
style="fill:none;stroke:#000000;stroke-width:0.1249138;stroke-miterlimit:4;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
id="path32555-9"
d="m 184.85051,114.69284 v 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1249138;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32555-1-2"
d="m 179.91642,119.62693 h 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1249138;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
id="g32629-6"
transform="translate(-67.446649,115.50266)">
<circle
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32538-8"
cx="182.91643"
cy="121.56103"
r="2.95" />
<g
id="g32576-9"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
id="path32555-2"
d="m 184.85051,114.69284 v 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32555-1-6"
d="m 179.91642,119.62693 h 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
id="g32629-64"
transform="translate(-67.446649,126.17678)">
<circle
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32538-9"
cx="182.91643"
cy="121.56103"
r="2.95" />
<g
id="g32576-5"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
id="path32555-0"
d="m 184.85051,114.69284 v 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32555-1-4"
d="m 179.91642,119.62693 h 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
id="g32629-8"
transform="translate(-67.446649,136.8509)">
<circle
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32538-7"
cx="182.91643"
cy="121.56103"
r="2.95" />
<g
id="g32576-1"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
id="path32555-7"
d="m 184.85051,114.69284 v 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32555-1-27"
d="m 179.91642,119.62693 h 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
id="g32629-5"
transform="translate(-67.446649,147.52502)">
<circle
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path32538-94"
cx="182.91643"
cy="121.56103"
r="2.95" />
<g
id="g32576-90"
transform="matrix(0.60801424,0,0,0.60801424,70.524675,48.826151)"
style="stroke-width:0.16446982;stroke-miterlimit:4;stroke-dasharray:none">
<path
inkscape:connector-curvature="0"
id="path32555-91"
d="m 184.85051,114.69284 v 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path32555-1-7"
d="m 179.91642,119.62693 h 9.86819"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16446982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<g
style="stroke-width:3.03499794"
id="g32894"
inkscape:label="002_Logo_1c"
transform="matrix(0.11623658,0,0,-0.11623658,74.514296,161.68975)">
<g
style="stroke-width:3.03499794"
id="g32896">
<g
style="stroke-width:3.03499794"
id="g32898"
clip-path="url(#clipPath32902)">
<g
style="stroke-width:3.03499794"
id="g32904"
transform="translate(103.5419,75.0928)">
<path
d="M 0,0 H -1.087 L -5.856,12.265 H -6.543 L -11.502,0 h -0.992 v -0.725 h 3.643 V 0 h -1.583 l 1.393,3.433 4.883,-0.019 1.335,-3.433 H -4.349 V -0.725 H 0 Z m -8.679,4.33 2.155,5.36 2.041,-5.36 z M 8.03,1.202 H 7.344 V 0.038 H 4.139 V 7.325 H 5.57 V 8.088 H 1.259 V 7.325 h 1.43 V -0.019 H 1.259 V -0.725 H 8.03 Z M 16.137,1.049 H 15.431 V 0.038 H 12.188 V 3.376 H 14.63 V 2.422 h 0.706 V 5.074 L 14.63,5.055 V 4.139 h -2.442 v 3.186 h 3.129 V 6.333 h 0.686 V 8.469 H 15.298 V 8.088 H 9.308 V 7.382 h 1.431 V -0.019 H 9.308 v -0.706 h 6.829 z m 10.338,-1.068 h -1.03 l -2.937,3.987 2.823,3.357 h 1.03 V 8.088 H 23.29 V 7.325 h 1.087 L 22.069,4.559 20.028,7.325 h 1.125 V 8.088 H 17.415 V 7.325 h 1.011 l 2.785,-3.777 -2.995,-3.567 h -0.954 v -0.706 h 3.071 v 0.706 H 19.17 l 2.479,2.976 2.213,-2.976 h -1.164 v -0.706 h 3.777 z m 9.232,0 h -0.801 l -3.51,8.393 H 30.9 l -3.662,-8.393 h -0.725 v -0.706 h 2.671 v 0.706 h -1.088 l 0.916,2.079 h 3.471 l 0.859,-2.079 h -0.839 v -0.706 h 3.204 z m -6.371,2.823 1.45,3.357 1.392,-3.357 z M 45.53,7.325 h 1.431 V 8.088 H 43.127 V 7.325 h 1.45 V 1.869 l -5.36,6.219 H 36.756 V 7.325 h 1.335 l 0.382,-0.496 v -6.848 h -1.431 v -0.706 h 3.834 v 0.706 h -1.45 v 5.627 l 5.532,-6.485 h 0.572 z m 3.567,-8.05 h 4.521 c 2.632,0 4.616,1.889 4.616,4.406 0,2.461 -2.022,4.407 -4.616,4.407 H 49.097 V 7.382 h 1.431 v -7.401 h -1.431 z m 2.881,0.763 v 7.287 h 1.506 c 1.755,0 3.11,-1.603 3.11,-3.663 0,-2.06 -1.355,-3.624 -3.129,-3.624 z M 67.104,1.049 H 66.398 V 0.038 h -3.243 v 3.338 h 2.442 V 2.422 h 0.705 V 5.074 L 65.597,5.055 V 4.139 h -2.442 v 3.186 h 3.128 V 6.333 H 66.97 V 8.469 H 66.264 V 8.088 H 60.275 V 7.382 h 1.43 v -7.401 h -1.43 v -0.706 h 6.829 z m 10.929,-1.068 h -0.534 c -0.42,0 -0.763,0.229 -1.106,0.706 l -1.774,2.594 c 1.259,0.229 2.041,1.163 2.041,2.441 0,1.545 -0.992,2.366 -2.842,2.366 H 69.316 V 7.325 h 1.431 v -7.344 h -1.431 v -0.706 h 4.311 v 0.706 h -1.431 v 3.166 h 0.935 l 2.041,-3.071 c 0.477,-0.725 0.629,-0.801 1.469,-0.801 h 1.392 z m -5.837,7.344 h 1.336 c 0.991,0 1.526,-0.592 1.526,-1.66 0,-1.049 -0.592,-1.755 -1.507,-1.755 h -1.355 z m 18.712,0 h 0.801 V 8.088 H 88.944 V 7.325 h 1.087 l -2.404,-5.894 -2.46,5.894 h 1.201 v 0.763 h -3.7 V 7.325 h 0.935 l 3.433,-8.279 h 0.458 z m 6.142,-8.298 c 2.404,0 4.502,2.175 4.502,4.673 0,2.461 -2.098,4.617 -4.502,4.617 -2.441,0 -4.54,-2.137 -4.54,-4.617 0,-2.517 2.099,-4.673 4.54,-4.673 m -0.019,8.488 c 1.602,0 2.899,-1.697 2.899,-3.834 0,-2.155 -1.278,-3.853 -2.899,-3.853 -1.602,0 -2.88,1.717 -2.88,3.872 0,2.118 1.278,3.815 2.88,3.815 m 15.26,-0.19 h 1.43 v 0.763 h -3.834 V 7.325 h 1.45 V 1.869 l -5.36,6.219 h -2.461 V 7.325 h 1.336 l 0.381,-0.496 v -6.848 h -1.431 v -0.706 h 3.834 v 0.706 h -1.449 v 5.627 l 5.531,-6.485 h 0.573 z m 21.516,-7.344 h -1.45 v 11.178 h 1.45 v 0.705 h -4.54 v -0.705 h 1.431 V 6.085 h -7.153 v 5.074 h 1.43 v 0.705 h -4.54 v -0.705 h 1.431 V -0.019 h -1.431 v -0.706 h 4.54 v 0.706 h -1.43 v 5.245 h 7.153 v -5.245 h -1.431 v -0.706 h 4.54 z m 12.112,8.107 h -3.834 V 7.325 h 1.431 V 2.556 c 0,-1.545 -1.031,-2.651 -2.461,-2.651 -1.393,0 -2.327,1.068 -2.327,2.632 v 4.788 h 1.449 v 0.763 h -4.329 V 7.325 h 1.449 V 2.136 c 0,-1.793 1.488,-3.109 3.529,-3.109 2.174,0 3.662,1.412 3.662,3.472 v 4.826 h 1.431 z m 13.734,-8.107 h -1.431 v 7.344 h 1.431 v 0.763 h -2.976 l -3.071,-6.448 -3.014,6.448 h -2.861 V 7.325 h 1.43 v -7.344 h -1.43 v -0.706 h 3.834 v 0.706 h -1.431 V 5.97 l 3.186,-6.828 3.452,7.21 v -6.371 h -1.43 v -0.706 h 4.311 z m 7.286,-0.706 c 1.812,0 2.861,0.839 2.861,2.308 0,1.431 -1.049,2.289 -2.88,2.346 1.392,0 2.403,0.821 2.403,1.965 0,1.335 -1.03,2.194 -2.651,2.194 h -4.654 V 7.382 h 1.43 v -7.401 h -1.43 v -0.706 z m -2.041,4.197 h 1.373 c 1.259,0 1.889,-0.611 1.889,-1.793 0,-1.088 -0.649,-1.641 -1.908,-1.641 h -1.354 z m 0,3.853 h 1.354 c 0.935,0 1.431,-0.534 1.431,-1.488 0,-0.973 -0.611,-1.602 -1.564,-1.602 h -1.221 z m 11.158,-8.298 c 2.404,0 4.502,2.175 4.502,4.673 0,2.461 -2.098,4.617 -4.502,4.617 -2.441,0 -4.539,-2.137 -4.539,-4.617 0,-2.517 2.098,-4.673 4.539,-4.673 m -0.019,8.488 c 1.602,0 2.9,-1.697 2.9,-3.834 0,-2.155 -1.278,-3.853 -2.9,-3.853 -1.602,0 -2.88,1.717 -2.88,3.872 0,2.118 1.278,3.815 2.88,3.815 M 189.37,1.202 h -0.687 V 0.038 h -3.204 v 7.287 h 1.431 v 0.763 h -4.311 V 7.325 h 1.43 v -7.344 h -1.43 v -0.706 h 6.771 z m 1.278,-1.927 h 4.521 c 2.632,0 4.616,1.889 4.616,4.406 0,2.461 -2.022,4.407 -4.616,4.407 h -4.521 V 7.382 h 1.431 v -7.401 h -1.431 z m 2.88,0.763 v 7.287 h 1.507 c 1.755,0 3.109,-1.603 3.109,-3.663 0,-2.06 -1.354,-3.624 -3.128,-3.624 z m 13.6,-0.057 h -1.621 v 7.344 h 2.785 V 6.256 h 0.706 v 2.213 h -0.706 V 8.088 h -7.02 v 0.381 h -0.686 V 6.256 h 0.686 v 1.069 h 2.785 v -7.344 h -1.621 v -0.706 h 4.692 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32906"
inkscape:connector-curvature="0" />
</g>
<g
style="stroke-width:3.03499794"
id="g32908"
transform="translate(104.5316,31.5149)">
<path
d="M 0,0 V 10.487 H -1.981 V 0.604 c 0,-1.981 -0.145,-2.537 -0.919,-3.383 -0.797,-0.894 -1.957,-1.377 -3.334,-1.377 -1.378,0 -2.538,0.483 -3.335,1.377 -0.773,0.846 -0.918,1.402 -0.918,3.383 v 9.883 h -1.982 V 0 c 0,-2.078 0.532,-3.359 1.861,-4.446 1.184,-0.967 2.682,-1.474 4.398,-1.474 1.715,0 3.189,0.507 4.374,1.474 C -0.507,-3.359 0,-2.126 0,0 M 17.93,-5.606 V 10.487 H 15.948 V -3.021 c -0.048,0.097 -0.072,0.194 -0.096,0.242 -0.169,0.459 -0.194,0.483 -0.29,0.725 -0.073,0.145 -0.145,0.29 -0.218,0.387 L 7.443,10.487 H 4.857 V -5.461 H 6.838 V 8.361 C 6.935,8.047 6.983,7.926 7.08,7.757 7.104,7.66 7.177,7.563 7.273,7.394 7.394,7.153 7.515,6.959 7.588,6.839 l 8.046,-12.445 z m 18.606,8.192 c 0,4.591 -3.359,7.901 -8.022,7.901 H 23.197 V -5.461 h 5.292 c 2.779,0 4.447,0.652 5.897,2.32 1.377,1.57 2.15,3.648 2.15,5.727 M 34.458,2.61 c 0,-1.74 -0.797,-3.722 -1.957,-4.954 -1.015,-1.039 -2.199,-1.45 -4.302,-1.45 h -3.02 V 8.82 h 3.02 c 3.601,0 6.259,-2.658 6.259,-6.21 m 24.213,-7.467 v 6.524 h -1.982 v -5.316 c -1.28,-0.266 -1.836,-0.338 -2.634,-0.338 -3.987,0 -6.935,2.827 -6.935,6.669 0,1.571 0.58,3.093 1.571,4.253 1.232,1.426 2.682,2.03 4.929,2.03 1.281,0 2.538,-0.242 3.456,-0.628 0.193,-0.097 0.459,-0.218 0.846,-0.435 l 0.749,1.643 c -0.87,0.483 -1.233,0.652 -1.933,0.846 -0.846,0.217 -2.175,0.362 -3.311,0.362 -4.857,0 -8.433,-3.48 -8.433,-8.216 0,-4.712 3.697,-8.312 8.506,-8.312 1.329,0 2.923,0.193 4.011,0.531 0.266,0.073 0.652,0.194 1.16,0.387 M 72.71,-5.461 v 1.667 h -7.201 v 5.63 h 5.775 V 3.504 H 65.509 V 8.82 h 6.984 v 1.667 H 63.528 V -5.461 Z M 85.517,9.424 c -0.894,0.532 -1.281,0.725 -1.933,0.943 -0.822,0.265 -1.764,0.386 -2.683,0.386 -3.165,0 -5.267,-1.691 -5.267,-4.229 0,-1.643 1.014,-2.899 3.407,-4.18 1.498,-0.822 2.392,-1.281 2.658,-1.426 0.628,-0.362 1.087,-0.821 1.353,-1.305 0.169,-0.29 0.242,-0.676 0.242,-1.135 0,-1.523 -1.136,-2.417 -3.021,-2.417 -0.821,0 -1.595,0.145 -2.295,0.411 -0.556,0.217 -0.943,0.435 -1.837,1.039 L 75.126,-4.06 c 1.039,-0.7 1.45,-0.942 2.054,-1.184 0.846,-0.338 1.861,-0.531 2.948,-0.531 3.214,0 5.244,1.715 5.244,4.446 0,1.16 -0.459,2.247 -1.233,2.9 -0.579,0.507 -1.425,1.039 -2.513,1.619 -3.238,1.715 -3.938,2.319 -3.938,3.504 0,1.353 1.232,2.247 3.044,2.247 0.629,0 1.595,-0.145 2.199,-0.338 0.508,-0.17 0.846,-0.339 1.668,-0.822 z M 98.638,-5.461 v 1.667 h -7.201 v 5.63 h 5.775 V 3.504 H 91.437 V 8.82 h 6.984 v 1.667 H 89.456 V -5.461 Z m 12.952,0 v 1.667 h -7.129 V 10.487 H 102.48 V -5.461 Z m 11.961,0 v 1.667 h -7.128 v 14.281 h -1.982 V -5.461 Z m 11.816,14.885 c -0.894,0.532 -1.28,0.725 -1.933,0.943 -0.821,0.265 -1.764,0.386 -2.682,0.386 -3.166,0 -5.268,-1.691 -5.268,-4.229 0,-1.643 1.015,-2.899 3.407,-4.18 1.498,-0.822 2.392,-1.281 2.658,-1.426 0.629,-0.362 1.088,-0.821 1.354,-1.305 0.169,-0.29 0.241,-0.676 0.241,-1.135 0,-1.523 -1.136,-2.417 -3.02,-2.417 -0.822,0 -1.595,0.145 -2.296,0.411 -0.556,0.217 -0.942,0.435 -1.837,1.039 l -1.014,-1.571 c 1.039,-0.7 1.449,-0.942 2.054,-1.184 0.845,-0.338 1.86,-0.531 2.948,-0.531 3.213,0 5.243,1.715 5.243,4.446 0,1.16 -0.459,2.247 -1.232,2.9 -0.58,0.507 -1.426,1.039 -2.513,1.619 -3.238,1.715 -3.939,2.319 -3.939,3.504 0,1.353 1.232,2.247 3.045,2.247 0.628,0 1.595,-0.145 2.199,-0.338 0.507,-0.17 0.845,-0.339 1.667,-0.822 z m 15.369,-0.169 c -0.798,0.556 -1.136,0.749 -1.837,0.991 -0.942,0.362 -1.957,0.531 -2.996,0.531 -4.567,0 -8.023,-3.528 -8.023,-8.191 0,-4.906 3.407,-8.361 8.216,-8.361 0.749,0 1.402,0.072 2.199,0.266 0.798,0.193 1.184,0.338 2.151,0.773 l -0.556,1.546 c -1.281,-0.531 -2.32,-0.749 -3.673,-0.749 -3.745,0 -6.186,2.634 -6.186,6.645 0,3.649 2.416,6.259 5.799,6.259 1.547,0 2.707,-0.362 3.915,-1.208 z m 16.552,-14.716 v 15.948 h -1.981 V 3.649 h -9.4 v 6.838 h -1.982 V -5.461 h 1.982 v 7.297 h 9.4 v -7.297 z m 16.819,0 -5.921,16.407 h -2.126 l -5.945,-16.407 h 2.127 l 1.643,4.712 h 6.452 l 1.643,-4.712 z m -4.398,6.524 h -5.196 l 2.61,7.298 z m 16.189,7.757 v 1.667 h -8.965 V -5.461 h 1.982 v 7.128 h 5.775 v 1.692 h -5.775 V 8.82 Z m 13.822,0 v 1.667 H 197.106 V 8.82 h 5.317 V -5.461 h 1.981 V 8.82 Z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32910"
inkscape:connector-curvature="0" />
</g>
<path
d="M 93.997,65.686 H 92.016 V 49.738 h 1.981 z m 18.341,-16.094 v 16.094 h -1.982 V 52.178 c -0.048,0.096 -0.072,0.193 -0.096,0.241 -0.17,0.46 -0.194,0.484 -0.29,0.725 -0.073,0.145 -0.145,0.29 -0.218,0.387 L 101.85,65.686 H 99.265 V 49.737 h 1.981 v 13.822 c 0.097,-0.314 0.145,-0.435 0.242,-0.604 0.024,-0.097 0.097,-0.193 0.193,-0.362 0.121,-0.242 0.242,-0.435 0.314,-0.556 l 8.047,-12.445 z m 14.232,15.03 c -0.894,0.532 -1.28,0.725 -1.933,0.943 -0.821,0.266 -1.764,0.387 -2.682,0.387 -3.166,0 -5.268,-1.692 -5.268,-4.229 0,-1.643 1.015,-2.9 3.407,-4.181 1.498,-0.821 2.392,-1.28 2.658,-1.425 0.629,-0.363 1.088,-0.822 1.353,-1.305 0.17,-0.29 0.242,-0.677 0.242,-1.136 0,-1.522 -1.136,-2.416 -3.02,-2.416 -0.822,0 -1.595,0.145 -2.296,0.41 -0.556,0.218 -0.942,0.435 -1.837,1.039 l -1.014,-1.57 c 1.039,-0.701 1.449,-0.943 2.054,-1.184 0.845,-0.339 1.86,-0.532 2.948,-0.532 3.213,0 5.243,1.716 5.243,4.446 0,1.16 -0.459,2.248 -1.232,2.9 -0.58,0.508 -1.426,1.039 -2.513,1.619 -3.238,1.716 -3.939,2.32 -3.939,3.504 0,1.353 1.232,2.247 3.045,2.247 0.628,0 1.595,-0.145 2.199,-0.338 0.507,-0.169 0.845,-0.338 1.667,-0.822 z m 14.112,-0.604 v 1.668 h -12.614 v -1.668 h 5.317 V 49.737 h 1.981 v 14.281 z m 4.833,1.668 h -1.981 V 49.738 h 1.981 z m 15.44,-1.668 v 1.668 h -12.613 v -1.668 h 5.316 V 49.737 h 1.981 v 14.281 z m 14.91,-8.82 v 10.488 h -1.982 v -9.884 c 0,-1.981 -0.145,-2.537 -0.918,-3.383 -0.798,-0.894 -1.957,-1.377 -3.335,-1.377 -1.377,0 -2.537,0.483 -3.335,1.377 -0.773,0.846 -0.918,1.402 -0.918,3.383 v 9.884 h -1.981 V 55.198 c 0,-2.078 0.531,-3.358 1.86,-4.446 1.184,-0.966 2.683,-1.474 4.398,-1.474 1.716,0 3.19,0.508 4.374,1.474 1.329,1.088 1.837,2.32 1.837,4.446 m 15.03,8.82 v 1.668 h -12.614 v -1.668 h 5.316 V 49.737 h 1.982 v 14.281 z m 17.857,0 v 1.668 h -8.965 V 49.737 h 1.981 v 7.129 h 5.776 v 1.691 h -5.776 v 5.461 z m 13.29,4.132 c 0,0.677 -0.532,1.209 -1.208,1.209 -0.677,0 -1.208,-0.532 -1.208,-1.209 0,-0.676 0.531,-1.208 1.208,-1.208 0.676,0 1.208,0.532 1.208,1.208 m -4.881,0 c 0,0.677 -0.532,1.209 -1.208,1.209 -0.677,0 -1.209,-0.532 -1.209,-1.209 0,-0.676 0.532,-1.208 1.209,-1.208 0.676,0 1.208,0.532 1.208,1.208 m 7.297,-12.952 v 10.488 h -1.981 v -9.884 c 0,-1.981 -0.145,-2.537 -0.918,-3.383 -0.798,-0.894 -1.958,-1.377 -3.335,-1.377 -1.377,0 -2.537,0.483 -3.335,1.377 -0.773,0.846 -0.918,1.402 -0.918,3.383 v 9.884 H 211.99 V 55.198 c 0,-2.078 0.531,-3.358 1.86,-4.446 1.184,-0.966 2.682,-1.474 4.398,-1.474 1.716,0 3.19,0.508 4.374,1.474 1.329,1.088 1.836,2.32 1.836,4.446 m 15.635,-5.461 -4.712,7.129 c 1.184,0.266 1.764,0.555 2.416,1.208 0.894,0.846 1.402,2.054 1.402,3.31 0,1.209 -0.484,2.369 -1.257,3.118 -0.918,0.894 -1.836,1.184 -3.77,1.184 h -4.857 V 49.737 h 1.982 v 6.839 h 2.126 l 4.398,-6.839 z m -3.021,11.623 c 0,-2.054 -1.087,-3.117 -3.19,-3.117 h -2.585 v 5.775 h 2.585 c 1.426,0 1.837,-0.072 2.32,-0.459 0.58,-0.459 0.87,-1.184 0.87,-2.199 m 14.378,4.326 h -1.981 V 49.738 h 1.981 z m 18.34,-16.094 v 16.094 h -1.981 V 52.178 c -0.048,0.096 -0.073,0.193 -0.097,0.241 -0.169,0.46 -0.193,0.484 -0.29,0.725 -0.072,0.145 -0.145,0.29 -0.217,0.387 l -7.902,12.155 h -2.586 V 49.737 h 1.982 v 13.822 c 0.097,-0.314 0.145,-0.435 0.242,-0.604 0.024,-0.097 0.096,-0.193 0.193,-0.362 0.121,-0.242 0.242,-0.435 0.314,-0.556 l 8.047,-12.445 z m 15.441,14.426 v 1.668 h -12.614 v -1.668 h 5.316 V 49.737 h 1.982 v 14.281 z m 12.034,-14.281 v 1.668 h -7.201 v 5.63 h 5.775 v 1.667 h -5.775 v 5.316 h 6.983 v 1.668 h -8.965 V 49.737 Z m 14.619,0 -4.712,7.129 c 1.184,0.266 1.764,0.555 2.416,1.208 0.894,0.846 1.402,2.054 1.402,3.31 0,1.209 -0.484,2.369 -1.257,3.118 -0.918,0.894 -1.836,1.184 -3.769,1.184 h -4.858 V 49.737 h 1.982 v 6.839 h 2.126 l 4.398,-6.839 z m -3.021,11.623 c 0,-2.054 -1.087,-3.117 -3.189,-3.117 h -2.586 v 5.775 h 2.586 c 1.425,0 1.836,-0.072 2.319,-0.459 0.58,-0.459 0.87,-1.184 0.87,-2.199 M 328.291,49.592 V 65.686 H 326.31 V 52.178 c -0.048,0.096 -0.073,0.193 -0.097,0.241 -0.169,0.46 -0.193,0.484 -0.29,0.725 -0.072,0.145 -0.145,0.29 -0.217,0.387 l -7.902,12.155 h -2.586 V 49.737 h 1.982 v 13.822 c 0.097,-0.314 0.145,-0.435 0.242,-0.604 0.024,-0.097 0.096,-0.193 0.193,-0.362 0.121,-0.242 0.242,-0.435 0.314,-0.556 l 8.047,-12.445 z m 14.45,0.145 v 1.668 h -7.201 v 5.63 h 5.776 v 1.667 h -5.776 v 5.316 h 6.984 v 1.668 h -8.965 V 49.737 Z m 14.015,14.281 v 1.668 h -12.613 v -1.668 h 5.316 V 49.737 h 1.981 v 14.281 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32912"
inkscape:connector-curvature="0" />
<g
style="stroke-width:3.03499794"
id="g32914"
transform="translate(26.0438,59.5232)">
<path
d="m 0,0 c 0,-0.006 -0.001,-0.012 -0.001,-0.019 0,-18.626 9.962,-33.839 27.075,-33.839 17.099,0 27.075,15.213 27.075,33.839 0,0.007 -10e-4,0.013 -10e-4,0.019 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32916"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<path
d="m 44.569,50.357 h 17.077 v 2.049 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32918"
inkscape:connector-curvature="0" />
<path
d="m 44.569,54.484 h 17.077 v 2.049 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32920"
inkscape:connector-curvature="0" />
<path
d="m 44.569,37.975 h 17.077 v 2.049 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32922"
inkscape:connector-curvature="0" />
<path
d="m 44.569,42.103 h 17.077 v 2.049 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32924"
inkscape:connector-curvature="0" />
<path
d="m 44.569,46.23 h 17.077 v 2.049 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32926"
inkscape:connector-curvature="0" />
<path
d="M 44.569,29.721 H 61.646 V 31.77 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32928"
inkscape:connector-curvature="0" />
<path
d="m 44.569,33.848 h 17.077 v 2.049 H 44.569 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32930"
inkscape:connector-curvature="0" />
<path
d="M 80.204,61.599 H 54.161 v 26.043 h 26.043 z"
style="fill:#a7a5a6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32932"
inkscape:connector-curvature="0" />
<g
style="stroke-width:3.03499794"
id="g32934">
<g
style="stroke-width:3.03499794"
id="g32936"
clip-path="url(#clipPath32940)">
<g
style="stroke-width:3.03499794"
id="g32942"
transform="translate(60.3389,74.6067)">
<path
d="m 0,0 c 0,3.802 3.07,6.872 6.843,6.872 3.802,0 6.844,-3.07 6.844,-6.872 0,-3.774 -3.042,-6.843 -6.844,-6.843 C 3.07,-6.843 0,-3.774 0,0 m 11.828,0 c 0,2.76 -2.225,4.985 -4.985,4.985 C 4.112,4.985 1.859,2.76 1.859,0 c 0,-2.732 2.253,-4.957 4.984,-4.957 2.76,0 4.985,2.225 4.985,4.957"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32944"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<path
d="M 52.086,61.599 H 26.043 v 26.043 h 26.043 z"
style="fill:#656263;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32946"
inkscape:connector-curvature="0" />
<g
style="stroke-width:3.03499794"
id="g32948"
transform="translate(35.5144,69.5322)">
<path
d="M 0,0 H 2.577 V 10.177 H 0 V 11.15 H 7.1 V 10.177 H 4.55 V 0 H 7.1 V -0.973 H 0 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32950"
inkscape:connector-curvature="0" />
</g>
<g
style="stroke-width:3.03499794"
id="g32952">
<g
style="stroke-width:3.03499794"
id="g32954"
clip-path="url(#clipPath32958)">
<g
style="stroke-width:3.03499794"
id="g32960"
transform="translate(69.6443,104.3782)">
<path
d="m 0,0 h -11.099 c -0.507,1.839 -1.833,4.224 -5.32,4.224 -3.486,0 -4.826,-2.385 -5.344,-4.224 H -32.874 V -2.135 H 0 Z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32962"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<path
d="m 36.77,90.413 h 2.135 v 10.531 H 36.77 Z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32964"
inkscape:connector-curvature="0" />
<path
d="m 42.107,90.413 h 2.135 v 10.531 h -2.135 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32966"
inkscape:connector-curvature="0" />
<path
d="m 47.444,90.413 h 2.135 v 10.531 h -2.135 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32968"
inkscape:connector-curvature="0" />
<path
d="m 56.836,90.413 h 2.135 v 10.531 h -2.135 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32970"
inkscape:connector-curvature="0" />
<path
d="m 62.173,90.413 h 2.135 v 10.531 h -2.135 z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32972"
inkscape:connector-curvature="0" />
<path
d="m 67.51,90.413 h 2.135 v 10.531 H 67.51 Z"
style="fill:#918f90;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.03499794"
id="path32974"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -0,0 +1,70 @@
%PDF-1.5
%µí®û
4 0 obj
<< /Length 5 0 R
/Filter /FlateDecode
>>
stream
<EFBFBD><EFBFBD>1
A Eûœâ_À˜d';™Åj)¢"«…×w\ÙJYB~ áå)¤ÖLkDRŽ(9+WêI†Óz<C393>ù^p¾“°E“ZǃËÚÚî ,8RÂ
=t ÞY_hV6U¸²J<C2B2>¹q¸áµN¥Åí„ :úÀ̃›\<5C>…Kª#¸BÞ²ZùÊŒª¤Ó\©™ ó0nÅÿ<C3BF>œÙO®£'šPÍ
endstream
endobj
5 0 obj
156
endobj
3 0 obj
<<
/ExtGState <<
/a0 << /CA 1 /ca 1 >>
>>
>>
endobj
2 0 obj
<< /Type /Page % 1
/Parent 1 0 R
/MediaBox [ 0 0 595.275574 841.889771 ]
/Contents 4 0 R
/Group <<
/Type /Group
/S /Transparency
/I true
/CS /DeviceRGB
>>
/Resources 3 0 R
>>
endobj
1 0 obj
<< /Type /Pages
/Kids [ 2 0 R ]
/Count 1
>>
endobj
6 0 obj
<< /Producer (cairo 1.16.0 (https://cairographics.org))
/CreationDate (D:20200120124052+01'00)
>>
endobj
7 0 obj
<< /Type /Catalog
/Pages 1 0 R
>>
endobj
xref
0 8
0000000000 65535 f
0000000574 00000 n
0000000342 00000 n
0000000270 00000 n
0000000015 00000 n
0000000248 00000 n
0000000639 00000 n
0000000755 00000 n
trailer
<< /Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
807
%%EOF

View file

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
sodipodi:docname="case_side_iec_socket_helper.svg"
inkscape:version="0.92.4 (unknown)">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="1000.7521"
inkscape:cy="98.892257"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1030"
inkscape:window-x="0"
inkscape:window-y="50"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="opacity:0.48800001;vector-effect:none;fill:#99cc33;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815"
width="89.199997"
height="60.5"
x="-116.26517"
y="18.02976"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:0.48800001;vector-effect:none;fill:#cc0000;fill-opacity:1;stroke:none;stroke-width:1.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect819"
width="27.699999"
height="19.799999"
x="-85.515175"
y="25.02976"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815-2"
width="89.199997"
height="60.5"
x="60.400002"
y="18.02976"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect819-7"
width="27.699999"
height="19.799999"
x="91.149994"
y="25.02976"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815-2-0"
width="89.199997"
height="60.5"
x="60.400002"
y="145.02977"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect819-7-9"
width="27.699999"
height="19.799999"
x="91.149994"
y="152.02977"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815-2-0-3"
width="89.199997"
height="60.5"
x="60.400002"
y="205.52977"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815-2-6"
width="89.199997"
height="60.5"
x="60.400002"
y="78.529762"
rx="2.7755586e-17"
ry="2.7755586e-17" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -0,0 +1,69 @@
%PDF-1.5
%µí®û
4 0 obj
<< /Length 5 0 R
/Filter /FlateDecode
>>
stream
xœ•<EFBFBD>±
A Dû|Åü€q“Mnw¿@,NK±A°8-ü}s'Vj!!˜)f&!Õ„km¥W(M¯õó}ÂùN‰µfë,c/´Ý!q + <0C>)ñÒ¨<C392>"¬"hʵ9Ôãºb´­u¸<75>°AO1­ÑÙ)4e6sdg±Š®•Ÿ©7ÌÌØÛß0÷"ßa==ïˆ:À
endstream
endobj
5 0 obj
151
endobj
3 0 obj
<<
/ExtGState <<
/a0 << /CA 1 /ca 1 >>
>>
>>
endobj
2 0 obj
<< /Type /Page % 1
/Parent 1 0 R
/MediaBox [ 0 0 595.275574 841.889771 ]
/Contents 4 0 R
/Group <<
/Type /Group
/S /Transparency
/I true
/CS /DeviceRGB
>>
/Resources 3 0 R
>>
endobj
1 0 obj
<< /Type /Pages
/Kids [ 2 0 R ]
/Count 1
>>
endobj
6 0 obj
<< /Producer (cairo 1.16.0 (https://cairographics.org))
/CreationDate (D:20200120115845+01'00)
>>
endobj
7 0 obj
<< /Type /Catalog
/Pages 1 0 R
>>
endobj
xref
0 8
0000000000 65535 f
0000000569 00000 n
0000000337 00000 n
0000000265 00000 n
0000000015 00000 n
0000000243 00000 n
0000000634 00000 n
0000000750 00000 n
trailer
<< /Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
802
%%EOF

View file

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
sodipodi:docname="case_side_usb_socket_helper.svg"
inkscape:version="0.92.4 (unknown)">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="212.76193"
inkscape:cy="567.46698"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1030"
inkscape:window-x="0"
inkscape:window-y="50"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="opacity:0.48800001;vector-effect:none;fill:#99cc33;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815"
width="89.199997"
height="60.5"
x="-116.26517"
y="38.440475"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:0.48800001;vector-effect:none;fill:#99cc33;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect817"
width="36.285713"
height="6"
x="-89.808022"
y="89.940475"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:0.48800001;vector-effect:none;fill:#cc0000;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect819"
width="12.4"
height="10.6"
x="-77.865166"
y="77.440475"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:0.48800001;vector-effect:none;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect821"
width="44.979168"
height="1.6"
x="-94.154747"
y="88.340477"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:0.48800001;vector-effect:none;fill:#3366cc;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect823"
width="51.404762"
height="0.29999998"
x="-97.367546"
y="88.040474"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:0.48800001;vector-effect:none;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect821-3"
width="44.979168"
height="3"
x="-94.154747"
y="95.940483"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815-5"
width="89.199997"
height="60.5"
x="60.400002"
y="32.770832"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect819-6"
width="12.400001"
height="10.6"
x="98.799995"
y="71.770836"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect815-5-2"
width="89.199997"
height="60.5"
x="60.400002"
y="156.84088"
rx="2.7755586e-17"
ry="2.7755586e-17" />
<rect
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect819-6-9"
width="12.400002"
height="10.6"
x="98.799995"
y="195.84088"
rx="2.7755586e-17"
ry="2.7755586e-17" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

View file

@ -0,0 +1,24 @@
w_top = 24.5;
w_bottom = 25.3;
h = 21.5;
extra_w = 0.1;
wall_thickness = 2;
ledge_w = 3;
clamp_w = 20;
module shape() {
polygon([[0, 0], [-1.5, w_bottom/2], [0, w_bottom], [h, w_bottom - (w_bottom - w_top)/2], [h, (w_bottom-w_top)/2]]);
}
module segment(wall) {
linear_extrude(clamp_w)
difference() {
offset(wall + extra_w, $fn=32) shape();
offset(extra_w, $fn=32) shape();
mirror([1, 0]) translate([extra_w, ledge_w]) square([5*wall, w_bottom - 2*ledge_w]);
}
}
segment(wall_thickness);

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,61 @@
case_inside_h = 54.5;
case_standoff_h = 6.0;
pcb_h = 1.6;
switch_h = 12.2;
glue_h = 0.2;
tolerance = 0.7;
height = case_inside_h - case_standoff_h - pcb_h - switch_h - glue_h - tolerance + 2;
eps = 0.01;
base_w = 20;
base_h = base_w;
base_d = 6;
stem_w = 10;
stem_h = stem_w;
plunger_w = 20;
plunger_h = 25;
plunger_d = 3;
// cylinder chain parameters
c_h = 14;
c_w = base_w;
c_intersect = 1;
c_wall = 0.8;
module narf(w, h, d) {
translate([0, 0, 1])
minkowski(){
cube([w-2*d, h-2*d, eps], center=true);
cylinder(d, d, 0, $fn=32);
};
minkowski(){
cube([w-2*d, h-2*d, eps], center=true);
cylinder(1, d, d, $fn=32);
};
}
rotate ([0, 180, 0]) {
difference() {
union() {
narf(base_w, base_h, base_d);
translate([0, 0, height-c_h/2-plunger_d])
//cube([stem_w, stem_h, height], center=true);
for (i=[0:1]) {
rotate([0, 90, 0]) translate([i*(c_h - c_intersect), 0, -c_w/2]) cylinder(d=c_h, h=c_w, $fn=32);
}
translate([0, 0, height])
mirror([0, 0, 1])
narf(plunger_w, plunger_h, plunger_d);
}
translate([0, 0, height-c_h/2-plunger_d])
for (i=[0:1]) {
rotate([0, 90, 0]) translate([i*(c_h - c_intersect), 0, -c_w/2-eps]) cylinder(d=c_h - 2*c_wall, h=c_w+2*eps, $fn=32);
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,51 @@
Version 4
SHEET 1 880 680
WIRE 144 -96 0 -96
WIRE 320 -96 224 -96
WIRE 416 -96 320 -96
WIRE 544 -96 416 -96
WIRE 320 -64 320 -96
WIRE 416 -64 416 -96
WIRE 544 16 544 -96
WIRE 0 64 0 -96
WIRE 320 64 320 16
WIRE 0 240 0 144
WIRE 144 240 0 240
WIRE 320 240 320 144
WIRE 320 240 224 240
WIRE 416 240 416 16
WIRE 416 240 320 240
WIRE 544 240 544 80
WIRE 544 240 416 240
WIRE 320 304 320 240
FLAG 320 304 0
SYMBOL voltage 320 48 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V1
SYMATTR Value 12
SYMBOL Misc\\signal 0 48 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V2
SYMATTR Value PULSE(0 325 0 1n 1n .5u 1u)
SYMBOL res 240 -112 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R1
SYMATTR Value 66k
SYMBOL res 240 224 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R2
SYMATTR Value 66k
SYMBOL res 400 -80 R0
SYMATTR InstName R4
SYMATTR Value 470
SYMBOL res 304 -80 R0
SYMATTR InstName R3
SYMATTR Value 2k7
SYMBOL cap 528 16 R0
SYMATTR InstName C1
SYMATTR Value 100p
TEXT -32 328 Left 2 !.tran 100u

View file

@ -0,0 +1,92 @@
Version 4
SHEET 1 1364 680
WIRE 1360 -624 1008 -624
WIRE 1008 -544 1008 -624
WIRE 1008 -336 1008 -464
WIRE 144 -256 -64 -256
WIRE 640 -256 224 -256
WIRE 736 -256 640 -256
WIRE 848 -256 736 -256
WIRE 960 -256 848 -256
WIRE 640 -224 640 -256
WIRE 736 -224 736 -256
WIRE 848 -224 848 -256
WIRE 144 -96 0 -96
WIRE 320 -96 224 -96
WIRE 416 -96 320 -96
WIRE 320 -64 320 -96
WIRE 416 -64 416 -96
WIRE 320 48 320 16
WIRE 1360 48 1360 -624
WIRE 1360 48 320 48
WIRE 0 64 0 -96
WIRE 320 64 320 48
WIRE 416 224 416 16
WIRE 640 224 640 -160
WIRE 640 224 416 224
WIRE 736 224 736 -160
WIRE 736 224 640 224
WIRE 848 224 848 -160
WIRE 848 224 736 224
WIRE 1008 224 1008 -240
WIRE 1008 224 848 224
WIRE -64 240 -64 -256
WIRE 0 240 0 144
WIRE 0 240 -64 240
WIRE 144 240 0 240
WIRE 320 240 320 144
WIRE 320 240 224 240
WIRE 416 240 416 224
WIRE 416 240 320 240
WIRE 320 304 320 240
FLAG 320 304 0
SYMBOL voltage 320 48 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V1
SYMATTR Value 12
SYMBOL Misc\\signal 0 48 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V2
SYMATTR Value SINE(0 325 50)
SYMBOL res 240 -112 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R1
SYMATTR Value 660k
SYMBOL res 240 224 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R2
SYMATTR Value 660k
SYMBOL res 400 -80 R0
SYMATTR InstName R4
SYMATTR Value 4k7
SYMBOL res 304 -80 R0
SYMATTR InstName R3
SYMATTR Value 27k
SYMBOL res 240 -272 R90
WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2
SYMATTR InstName R5
SYMATTR Value 2Meg
SYMBOL zener 656 -160 R180
WINDOW 0 24 64 Left 2
WINDOW 3 24 0 Left 2
SYMATTR InstName D1
SYMATTR Value BZX84C12L
SYMBOL schottky 752 -160 R180
WINDOW 0 24 64 Left 2
WINDOW 3 24 0 Left 2
SYMATTR InstName D2
SYMBOL nmos 960 -336 R0
SYMATTR InstName M1
SYMATTR Value FDS2734
SYMBOL cap 832 -224 R0
SYMATTR InstName C1
SYMATTR Value 100p
SYMBOL res 992 -560 R0
SYMATTR InstName R6
SYMATTR Value 1k2
TEXT -34 328 Left 2 !.tran 1

View file

@ -3020,4 +3020,6 @@ F 5 "SDCIT/8GB" H 12700 7050 50 0001 C CNN "Reichelt"
1 12700 7050
1 0 0 -1
$EndComp
Text Notes 850 11050 0 50 ~ 0
TO-DO\n* Add adc buffer op amp\n* join input resistors, adjust divider\n* earth secondary side\n* add slots for large isolation barrier\n* add slots for small isolation barrier\n* fixup/remove ocxo footprint\n* fixup converter footprint, use smaller part? use 5V one and power raspi?\n* remove uart isolation?\n* fix fuse rating\n* remove one fuse\n* remove lid switches?\n* fixup incorrect bom items
$EndSCHEMATC

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 KiB

View file

@ -0,0 +1,31 @@
module base() { offset(5, $fn=32) square([24, 45], center=true); };
difference() {
union() {
linear_extrude(1) base();
translate([0, 0, 0.9999]) minkowski() {
linear_extrude(0.001) offset(-5) base();
cylinder(3, 5, 0, $fn=32);
}
}
for (i=[0,-1,1,-2,2]) {
translate([0, i*8, 0.7]) {
translate([-20, -2, 0]) {
cube ([40, 4, 1.5]);
}
translate([24/2, -2, 0]) {
cube ([40, 4, 10]);
}
translate([-24/2-40, -2, 0]) {
cube ([40, 4, 10]);
}
}
}
translate([0, 11, 5+0.7]) cube([24-10, 14, 10], center=true);
translate([0, -11, 5+0.7]) cube([24-10, 14, 10], center=true);
}

File diff suppressed because it is too large Load diff

BIN
ma/safety_reset.pdf Normal file

Binary file not shown.

BIN
project_proposal.pdf Normal file

Binary file not shown.

BIN
smart_reset_bom_v01.ods Normal file

Binary file not shown.

Binary file not shown.