board bringup: adc, usart working
111
gm_platform/fw/Makefile
Normal 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
125
gm_platform/fw/adc.c
Normal 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
|
|
@ -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
|
|
@ -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) {
|
||||
}
|
||||
48
gm_platform/fw/cmsis_exports.c
Normal 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
|
|
@ -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
|
|
@ -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
|
|
@ -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
175
gm_platform/fw/main.c
Normal 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
|
|
@ -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
414
gm_platform/fw/main.hex
Normal 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
457
gm_platform/fw/main.map
Normal 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
|
||||
17
gm_platform/fw/openocd.cfg
Normal 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
|
||||
46
gm_platform/fw/packet_interface.c
Normal 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);
|
||||
}
|
||||
|
||||
6
gm_platform/fw/packet_interface.h
Normal 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
|
|
@ -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
|
|
@ -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
|
|
@ -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__
|
||||
273
gm_platform/fw/startup_stm32f030x6.s
Normal 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****/
|
||||
|
||||
136
gm_platform/fw/stm32_flash.ld
Normal 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) }
|
||||
}
|
||||
336
gm_platform/fw/system_stm32f0xx.c
Normal 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>© 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****/
|
||||
|
||||
30
gm_platform/fw/tools/gen_cmsis_exports.py
Normal 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__')
|
||||
|
||||
BIN
gm_platform/platform/bottom_overlay.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
gm_platform/platform/case_label.pdf
Normal file
636
gm_platform/platform/case_label.svg
Normal 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 |
BIN
gm_platform/platform/case_label_print.pdf
Normal file
573
gm_platform/platform/case_label_print.svg
Normal 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 |
70
gm_platform/platform/case_side_iec_socket_helper.pdf
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
%PDF-1.5
|
||||
%µí®û
|
||||
4 0 obj
|
||||
<< /Length 5 0 R
|
||||
/Filter /FlateDecode
|
||||
>>
|
||||
stream
|
||||
xœ<EFBFBD><EFBFBD>1
|
||||
AEûœâ_À˜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
|
||||
128
gm_platform/platform/case_side_iec_socket_helper.svg
Normal 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 |
69
gm_platform/platform/case_side_usb_socket_helper.pdf
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
%PDF-1.5
|
||||
%µí®û
|
||||
4 0 obj
|
||||
<< /Length 5 0 R
|
||||
/Filter /FlateDecode
|
||||
>>
|
||||
stream
|
||||
xœ•<EFBFBD>±
|
||||
ADû|Åü€q“Mnw¿@,NK±A°8-ü}s'Vj!!˜0ó)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
|
||||
146
gm_platform/platform/case_side_usb_socket_helper.svg
Normal 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 |
24
gm_platform/platform/converter_clip.scad
Normal 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);
|
||||
1990
gm_platform/platform/converter_clip.stl
Normal file
BIN
gm_platform/platform/gerber_grid_meas_platform_v01.zip
Normal file
BIN
gm_platform/platform/hiig_logo_binary.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
2158
gm_platform/platform/lid_switch_plunger.stl
Normal file
61
gm_platform/platform/lid_switch_plunger_flex.scad
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
6078
gm_platform/platform/lid_switch_plunger_flex.stl
Normal file
51
gm_platform/platform/line_meas_divider.asc
Normal 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
|
||||
92
gm_platform/platform/line_pol_det.asc
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
BIN
gm_platform/platform/top_overlay.png
Normal file
|
After Width: | Height: | Size: 450 KiB |
31
gm_platform/platform/zip_tie_anchor.scad
Normal 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);
|
||||
}
|
||||