Compare commits
8 commits
main
...
OOmote-C++
Author | SHA1 | Date | |
---|---|---|---|
|
6719daa787 | ||
|
fb5f75da5a | ||
|
574e34fb96 | ||
|
7c9a0623fd | ||
|
59897369ec | ||
|
6a78c4cfa1 | ||
|
7a9ee138db | ||
|
f1ff9ed3d2 |
142 changed files with 72027 additions and 2959 deletions
7
.github/workflows/build-platformio.yml
vendored
7
.github/workflows/build-platformio.yml
vendored
|
@ -4,7 +4,10 @@ on: [push]
|
|||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ windows-latest, ubuntu-latest ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
@ -22,4 +25,4 @@ jobs:
|
|||
|
||||
- name: Build PlatformIO Project
|
||||
working-directory: ./Platformio
|
||||
run: pio run
|
||||
run: pio run --environment esp32
|
||||
|
|
29
.github/workflows/build-simulator-windows.yml
vendored
Normal file
29
.github/workflows/build-simulator-windows.yml
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
name: Windows Simulator Build
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
update: true
|
||||
install: >-
|
||||
mingw-w64-x86_64-gcc
|
||||
mingw-w64-x86_64-SDL2
|
||||
mingw-w64-x86_64-python
|
||||
python3-pip
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install Platform IOCore
|
||||
run: pip install --upgrade platformio
|
||||
|
||||
- name: Put MSYS2_MinGW64 on PATH
|
||||
# there is not yet an environment variable for this path from msys2/setup-msys2
|
||||
run: echo "${{ runner.temp }}/msys64/mingw64/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
|
||||
- name: Build PlatformIO Project 64 bit sim
|
||||
working-directory: ./Platformio
|
||||
run: pio run --environment x64_sim
|
45
.github/workflows/build-simulator.yml
vendored
45
.github/workflows/build-simulator.yml
vendored
|
@ -1,37 +1,28 @@
|
|||
name: Simulator Build
|
||||
name: Ubuntu Simulator Build
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build-x64:
|
||||
|
||||
runs-on: windows-latest
|
||||
build-ubuntu:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
- uses: actions/cache@v3
|
||||
with:
|
||||
msbuild-architecture: x64
|
||||
|
||||
# You can test your matrix by printing the current dotnet version
|
||||
- name: Build
|
||||
working-directory: ./LVGL Simulator
|
||||
run: MSBuild.exe ./LVGL.Simulator.sln -target:Build /p:Platform="x64"
|
||||
|
||||
build-x86:
|
||||
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
path: |
|
||||
~/.cache/pip
|
||||
~/.platformio/.cache
|
||||
key: ${{ runner.os }}-pio
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
msbuild-architecture: x86
|
||||
python-version: "3.9"
|
||||
- name: Install PlatformIO Core
|
||||
run: pip install --upgrade platformio
|
||||
|
||||
- name: Build
|
||||
working-directory: ./LVGL Simulator
|
||||
run: MSBuild.exe ./LVGL.Simulator.sln -target:Build /p:Platform="x86"
|
||||
- name: Install SDL2
|
||||
run : sudo apt-get update && sudo apt-get install -y libsdl2-dev
|
||||
|
||||
- name: Build PlatformIO Project 64 bit sim
|
||||
working-directory: ./Platformio
|
||||
run: pio run --environment x64_sim
|
1
LVGL Simulator/LVGL.Simulator/HardwareSimulator.cpp
Normal file
1
LVGL Simulator/LVGL.Simulator/HardwareSimulator.cpp
Normal file
|
@ -0,0 +1 @@
|
|||
#include "HardwareSimulator.hpp"
|
29
LVGL Simulator/LVGL.Simulator/HardwareSimulator.hpp
Normal file
29
LVGL Simulator/LVGL.Simulator/HardwareSimulator.hpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
#include "HardwareInterface.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
class HardwareSimulator : public HardwareInterface {
|
||||
public:
|
||||
HardwareSimulator() = default;
|
||||
|
||||
virtual void debugPrint(std::string message) override {
|
||||
std::cout << message;
|
||||
}
|
||||
|
||||
virtual void sendIR() override {}
|
||||
|
||||
virtual void MQTTPublish(const char *topic, const char *payload) override{
|
||||
|
||||
};
|
||||
|
||||
virtual void init() override { lv_init(); }
|
||||
|
||||
virtual batteryStatus getBatteryPercentage() {
|
||||
batteryStatus fakeStatus;
|
||||
fakeStatus.isCharging = false;
|
||||
fakeStatus.percentage = 100;
|
||||
fakeStatus.voltage = 4200;
|
||||
return fakeStatus;
|
||||
}
|
||||
};
|
|
@ -12,13 +12,17 @@
|
|||
#include <string>
|
||||
#include "resource.h"
|
||||
|
||||
#include "omoteconfig.h"
|
||||
#include "HardwareSimulator.hpp"
|
||||
#include "OmoteUI.hpp"
|
||||
|
||||
#if _MSC_VER >= 1200
|
||||
// Disable compilation warnings.
|
||||
// Disable compilation warnings.
|
||||
#pragma warning(push)
|
||||
// nonstandard extension used : bit field types other than int
|
||||
#pragma warning(disable:4214)
|
||||
#pragma warning(disable : 4214)
|
||||
// 'conversion' conversion from 'type1' to 'type2', possible loss of data
|
||||
#pragma warning(disable:4244)
|
||||
#pragma warning(disable : 4244)
|
||||
#endif
|
||||
|
||||
#include "lvgl/lvgl.h"
|
||||
|
@ -42,7 +46,6 @@ bool single_display_mode_initialization()
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
lv_win32_add_all_input_devices_to_group(NULL);
|
||||
|
||||
return true;
|
||||
|
@ -56,14 +59,10 @@ bool g_initialization_status = false;
|
|||
#define LVGL_SIMULATOR_MAXIMUM_DISPLAYS 16
|
||||
HWND g_display_window_handles[LVGL_SIMULATOR_MAXIMUM_DISPLAYS];
|
||||
|
||||
|
||||
#define screenWidth 240
|
||||
#define screenHeight 320
|
||||
|
||||
unsigned int __stdcall lv_win32_window_thread_entrypoint(
|
||||
void* raw_parameter)
|
||||
void *raw_parameter)
|
||||
{
|
||||
size_t display_id = *(size_t*)(raw_parameter);
|
||||
size_t display_id = *(size_t *)(raw_parameter);
|
||||
|
||||
HINSTANCE instance_handle = GetModuleHandleW(NULL);
|
||||
int show_window_mode = SW_SHOW;
|
||||
|
@ -138,8 +137,7 @@ bool multiple_display_mode_initialization()
|
|||
}
|
||||
}
|
||||
|
||||
lv_win32_window_context_t* context = (lv_win32_window_context_t*)(
|
||||
lv_win32_get_window_context(g_display_window_handles[0]));
|
||||
lv_win32_window_context_t *context = (lv_win32_window_context_t *)(lv_win32_get_window_context(g_display_window_handles[0]));
|
||||
if (context)
|
||||
{
|
||||
lv_win32_pointer_device_object = context->mouse_device_object;
|
||||
|
@ -152,730 +150,31 @@ bool multiple_display_mode_initialization()
|
|||
return true;
|
||||
}
|
||||
|
||||
lv_obj_t* panel;
|
||||
byte currentDevice = 4; // Current Device to control (allows switching mappings between devices)
|
||||
byte virtualKeyMapTechnisat[10] = { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x0 };
|
||||
bool wakeupByIMUEnabled = true;
|
||||
int backlight_brightness = 255;
|
||||
|
||||
lv_color_t color_primary = lv_color_hex(0x303030); // gray
|
||||
|
||||
|
||||
// Set the page indicator scroll position relative to the tabview scroll position
|
||||
static void store_scroll_value_event_cb(lv_event_t* e) {
|
||||
float bias = (150.0 + 8.0) / 240.0;
|
||||
int offset = 240 / 2 - 150 / 2 - 8 - 50 - 3;
|
||||
lv_obj_t* screen = lv_event_get_target(e);
|
||||
lv_obj_scroll_to_x(panel, lv_obj_get_scroll_x(screen) * bias - offset, LV_ANIM_OFF);
|
||||
}
|
||||
|
||||
// Update current device when the tabview page is changes
|
||||
static void tabview_device_event_cb(lv_event_t* e) {
|
||||
currentDevice = lv_tabview_get_tab_act(lv_event_get_target(e));
|
||||
}
|
||||
|
||||
// Backlight Slider Event handler
|
||||
static void bl_slider_event_cb(lv_event_t* e) {
|
||||
lv_obj_t* slider = lv_event_get_target(e);
|
||||
backlight_brightness = 255;//constrain(lv_slider_get_value(slider), 60, 255);
|
||||
}
|
||||
|
||||
// Apple Key Event handler
|
||||
static void appleKey_event_cb(lv_event_t* e) {
|
||||
}
|
||||
|
||||
// Wakeup by IMU Switch Event handler
|
||||
static void WakeEnableSetting_event_cb(lv_event_t* e) {
|
||||
wakeupByIMUEnabled = lv_obj_has_state(lv_event_get_target(e), LV_STATE_CHECKED);
|
||||
}
|
||||
|
||||
// Smart Home Toggle Event handler
|
||||
static void smartHomeToggle_event_cb(lv_event_t* e) {
|
||||
}
|
||||
|
||||
// Smart Home Toggle Event handler
|
||||
static void smartHomeSlider_event_cb(lv_event_t* e) {
|
||||
}
|
||||
|
||||
// Virtual Keypad Event handler
|
||||
static void virtualKeypad_event_cb(lv_event_t* e) {
|
||||
lv_obj_t* target = lv_event_get_target(e);
|
||||
lv_obj_t* cont = lv_event_get_current_target(e);
|
||||
if (target == cont) return;
|
||||
|
||||
char buffer[100];
|
||||
sprintf_s(buffer, "check it out: %d\n", virtualKeyMapTechnisat[(int)target->user_data]);
|
||||
OutputDebugStringA(buffer);
|
||||
}
|
||||
|
||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
||||
#endif
|
||||
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t gradientLeft_map[] = {
|
||||
0xfa, 0xf2, 0xea, 0xe2, 0xda, 0xd1, 0xc7, 0xbe, 0xb7, 0xae, 0xa6, 0x9e, 0x95, 0x8d, 0x84, 0x7d, 0x74, 0x6c, 0x62, 0x5a, 0x51, 0x48, 0x41, 0x38, 0x2f, 0x28, 0x1f, 0x17, 0x0f, 0x07,
|
||||
};
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t gradientRight_map[] = {
|
||||
0x07, 0x0f, 0x17, 0x1f, 0x28, 0x2f, 0x38, 0x41, 0x48, 0x51, 0x5a, 0x62, 0x6c, 0x74, 0x7d, 0x84, 0x8d, 0x95, 0x9e, 0xa6, 0xae, 0xb7, 0xbe, 0xc7, 0xd1, 0xda, 0xe2, 0xea, 0xf2, 0xfa,
|
||||
};
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t appleTvIcon_map[] = {
|
||||
/*Pixel format: Red: 5 bit, Green: 6 bit, Blue: 5 bit*/
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x55, 0xad, 0xdb, 0xde, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xad, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x21, 0x34, 0xa5, 0x55, 0xad, 0x55, 0xad, 0x55, 0xad, 0x55, 0xad, 0x55, 0xad, 0x55, 0xad, 0xcf, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x76, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x69, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0x8a, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xd6, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xad, 0x9a, 0xd6, 0xd7, 0xbd, 0x8e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x73, 0xd7, 0xbd, 0xbb, 0xde, 0x3c, 0xe7, 0xfc, 0xe6, 0x39, 0xce, 0x72, 0x94, 0xa7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x18, 0x8e, 0x73, 0xd7, 0xbd, 0x1c, 0xe7, 0x9e, 0xf7, 0xbe, 0xf7, 0x5d, 0xef, 0x9a, 0xd6, 0x34, 0xa5, 0x28, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0xfb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7a, 0xd6, 0x71, 0x8c, 0xa6, 0x31, 0x2d, 0x6b, 0xb6, 0xb5, 0x7d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xd7, 0xbd, 0xa3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0xe7, 0x49, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x38, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x69, 0x4a, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x59, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x14, 0xa5,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xef, 0x24, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x45, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xe7, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0xeb, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0xa5, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xdb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xde, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xe7, 0x39, 0x00, 0x00,
|
||||
0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xef, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xd6, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xd6, 0x3c, 0xe7, 0x3c, 0xe7, 0x3d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0x3c, 0xe7, 0x3c, 0xe7, 0x3c, 0xe7, 0x3c, 0xe7, 0x3c, 0xe7, 0x96, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xec, 0x62, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x71, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x31, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xd3, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xe4, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x55, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x76, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x34, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x28, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x92, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xae, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xf0, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x8a, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x28, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8a, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x45, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x75, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x59, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xf4, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x59, 0xce, 0x86, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x55, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0xa3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xa6, 0x31, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0xef, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xde, 0x00, 0x00, 0x29, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x51, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x39, 0xf3, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0x24, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x31, 0x29, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x9c, 0xbb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x39, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0xd3, 0x9c, 0x51, 0x8c, 0x34, 0xa5, 0x9a, 0xd6, 0xdf, 0xff, 0xf7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x31, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x62, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x79, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xe7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x51, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0xe7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x41, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0x39, 0xce, 0x72, 0x94, 0xcb, 0x5a, 0xa3, 0x18, 0x4d, 0x6b, 0x34, 0xa5, 0xfb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x72, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x7b, 0x3c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xef, 0xd7, 0xbd, 0xeb, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x73, 0xf8, 0xc5, 0xba, 0xd6, 0xd7, 0xbd, 0xf0, 0x83, 0xa3, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4a, 0xf3, 0x9c, 0xf8, 0xc5, 0x59, 0xce, 0x55, 0xad, 0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x73, 0x76, 0xb5, 0x39, 0xce, 0x7a, 0xd6, 0x39, 0xce, 0xd7, 0xbd, 0xd3, 0x9c, 0xec, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x4a, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x49, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t appleDisplayIcon_map[] = {
|
||||
0x23, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x3d,
|
||||
0xaa, 0xfd, 0xad, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0xa1, 0xf7, 0xd8,
|
||||
0xd0, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xd2, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xff,
|
||||
0xc6, 0xea, 0x2a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1f, 0xcc, 0xf6,
|
||||
0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x98,
|
||||
0x00, 0x44, 0x7b, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7d, 0x56, 0x03,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xb7, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc0, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xd3, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t appleBackIcon_map[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xbe, 0x94,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xe7, 0xff, 0xf0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfa, 0xff, 0xf5, 0x31,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xfc, 0xff, 0xea, 0x3e, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xee, 0xff, 0xe6, 0x48, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x00, 0x50, 0xed, 0xff, 0xe9, 0x39, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x55, 0xfc, 0xff, 0xe7, 0x25, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x59, 0xff, 0xff, 0xe0, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x5e, 0xf6, 0xff, 0xdb, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x64, 0xf4, 0xff, 0xd9, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x4d, 0xff, 0xff, 0xce, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x6b, 0xff, 0xff, 0x9e, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x9c, 0xff, 0xff, 0xa8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x04, 0x8f, 0xff, 0xff, 0xb5, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x03, 0x91, 0xff, 0xff, 0xba, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x93, 0xff, 0xff, 0xbb, 0x0a, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x00, 0x87, 0xfc, 0xff, 0xbf, 0x14, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfb, 0xff, 0xc5, 0x22, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x78, 0xff, 0xff, 0xca, 0x1e, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xff, 0xff, 0xd0, 0x11,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6e, 0xfb, 0xff, 0xcc,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xea, 0xca,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x28, 0x18,
|
||||
};
|
||||
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t high_brightness_map[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x5c, 0x8e, 0x04, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x04, 0x8e, 0x5c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x8c, 0xff, 0xa8, 0x01, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x01, 0xa8, 0xff, 0x8c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x04, 0xa9, 0xf5, 0x0d, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x0d, 0xf5, 0xa9, 0x04, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x42, 0xd4, 0xff, 0xff, 0xd4, 0x41, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xbd, 0xcc, 0xbd, 0x0d, 0x11, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x12, 0x0d, 0xbd, 0xcc, 0xbd,
|
||||
0xbd, 0xcc, 0xbd, 0x0d, 0x11, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x10, 0x0d, 0xbd, 0xcc, 0xbd,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x40, 0xd3, 0xff, 0xfe, 0xd2, 0x3f, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x04, 0xa9, 0xf5, 0x0d, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x0d, 0xf5, 0xa9, 0x04, 0x00, 0x00,
|
||||
0x00, 0x00, 0x8c, 0xff, 0xa8, 0x01, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x01, 0xa8, 0xff, 0x8c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x5c, 0x8e, 0x04, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x04, 0x8e, 0x5c, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t low_brightness_map[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x27, 0x72, 0x01, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x01, 0x72, 0x28, 0x00, 0x00,
|
||||
0x00, 0x00, 0x71, 0xf5, 0x0f, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x0d, 0xf5, 0x73, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x0b, 0x00, 0x42, 0xd4, 0xff, 0xff, 0xd4, 0x41, 0x00, 0x0a, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x42, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x40, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x00, 0x00, 0x00, 0x00,
|
||||
0x43, 0xbd, 0x0d, 0x11, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x12, 0x0d, 0xbc, 0x44,
|
||||
0x43, 0xbd, 0x0d, 0x11, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x11, 0x0d, 0xbc, 0x44,
|
||||
0x00, 0x00, 0x00, 0x00, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x41, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x0b, 0x00, 0x40, 0xd3, 0xfe, 0xff, 0xd2, 0x3f, 0x00, 0x0a, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x71, 0xf5, 0x0f, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x0d, 0xf5, 0x73, 0x00, 0x00,
|
||||
0x00, 0x00, 0x27, 0x72, 0x01, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x01, 0x72, 0x28, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST uint8_t lightbulb_map[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x1c, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x16, 0x95, 0xee, 0xff, 0xff, 0xee, 0x94, 0x15, 0x00, 0x00,
|
||||
0x00, 0x27, 0xe3, 0xff, 0xcc, 0x8d, 0x8d, 0xcd, 0xff, 0xe1, 0x26, 0x00,
|
||||
0x07, 0xd9, 0xfa, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xfa, 0xd7, 0x06,
|
||||
0x65, 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xff, 0x63,
|
||||
0xb1, 0xf8, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xf8, 0xaf,
|
||||
0xcc, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xcd,
|
||||
0xb1, 0xf5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xf1, 0xbd,
|
||||
0x73, 0xff, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xff, 0x74,
|
||||
0x0b, 0xd5, 0xfb, 0x40, 0x00, 0x00, 0x00, 0x00, 0x41, 0xfb, 0xd9, 0x0b,
|
||||
0x00, 0x24, 0xef, 0xdc, 0x01, 0x00, 0x00, 0x01, 0xdd, 0xee, 0x24, 0x00,
|
||||
0x00, 0x00, 0x83, 0xff, 0x30, 0x00, 0x00, 0x30, 0xff, 0x81, 0x00, 0x00,
|
||||
0x00, 0x00, 0x12, 0x6c, 0x06, 0x00, 0x00, 0x06, 0x6c, 0x12, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x25, 0xc7, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0x25, 0x00, 0x00,
|
||||
0x00, 0x00, 0x25, 0xc7, 0xcc, 0xcc, 0xcc, 0xcc, 0xc7, 0x25, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x1c, 0x76, 0x77, 0x77, 0x76, 0x1c, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x69, 0xff, 0xff, 0xff, 0xff, 0x69, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0x21, 0x22, 0x22, 0x21, 0x01, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
lv_init();
|
||||
auto hal = std::make_shared<HardwareSimulator>();
|
||||
hal->init();
|
||||
|
||||
auto ui = OmoteUI::getInstance(hal);
|
||||
|
||||
if (!single_display_mode_initialization())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// --- LVGL UI Configuration ---
|
||||
|
||||
// Set the background color
|
||||
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_black(), LV_PART_MAIN);
|
||||
|
||||
// Setup a scrollable tabview for devices and settings
|
||||
lv_obj_t* tabview;
|
||||
tabview = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, 0); // Hide tab labels by setting their height to 0
|
||||
lv_obj_set_style_bg_color(tabview, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_size(tabview, screenWidth, 270); // 270 = screenHeight(320) - panel(30) - statusbar(20)
|
||||
lv_obj_align(tabview, LV_ALIGN_TOP_MID, 0, 20);
|
||||
|
||||
// Add 4 tabs (names are irrelevant since the labels are hidden)
|
||||
lv_obj_t* tab1 = lv_tabview_add_tab(tabview, "Settings");
|
||||
lv_obj_t* tab2 = lv_tabview_add_tab(tabview, "Technisat");
|
||||
lv_obj_t* tab3 = lv_tabview_add_tab(tabview, "Apple TV");
|
||||
lv_obj_t* tab4 = lv_tabview_add_tab(tabview, "Smart Home");
|
||||
|
||||
// Configure number button grid
|
||||
static lv_coord_t col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; // equal x distribution
|
||||
static lv_coord_t row_dsc[] = { 52, 52, 52, 52, LV_GRID_TEMPLATE_LAST }; // manual y distribution to compress the grid a bit
|
||||
|
||||
// Create a container with grid for tab2
|
||||
lv_obj_set_style_pad_all(tab2, 0, LV_PART_MAIN);
|
||||
lv_obj_t* cont = lv_obj_create(tab2);
|
||||
lv_obj_set_style_shadow_width(cont, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(cont, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(cont, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_grid_column_dsc_array(cont, col_dsc, 0);
|
||||
lv_obj_set_style_grid_row_dsc_array(cont, row_dsc, 0);
|
||||
lv_obj_set_size(cont, 240, 270);
|
||||
lv_obj_set_layout(cont, LV_LAYOUT_GRID);
|
||||
lv_obj_align(cont, LV_ALIGN_TOP_MID, 0, 0);
|
||||
lv_obj_set_style_radius(cont, 0, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t* buttonLabel;
|
||||
lv_obj_t* obj;
|
||||
|
||||
// Iterate through grid buttons and configure them
|
||||
for (int i = 0; i < 12; i++) {
|
||||
uint8_t col = i % 3;
|
||||
uint8_t row = i / 3;
|
||||
// Create the button object
|
||||
if ((row == 3) && ((col == 0) || (col == 2))) continue; // Do not create a complete fourth row, only a 0 button
|
||||
obj = lv_btn_create(cont);
|
||||
lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_STRETCH, col, 1, LV_GRID_ALIGN_STRETCH, row, 1);
|
||||
lv_obj_set_style_bg_color(obj, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_radius(obj, 14, LV_PART_MAIN);
|
||||
lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE); // Clicking a button causes a event in its container
|
||||
// Create Labels for each button
|
||||
buttonLabel = lv_label_create(obj);
|
||||
if (i < 9) {
|
||||
lv_label_set_text_fmt(buttonLabel, std::to_string(i + 1).c_str(), col, row);
|
||||
lv_obj_set_user_data(obj, (void*)i); // Add user data so we can identify which button caused the container event
|
||||
}
|
||||
else {
|
||||
lv_label_set_text_fmt(buttonLabel, "0", col, row);
|
||||
lv_obj_set_user_data(obj, (void*)9);
|
||||
}
|
||||
lv_obj_set_style_text_font(buttonLabel, &lv_font_montserrat_24, LV_PART_MAIN);
|
||||
lv_obj_center(buttonLabel);
|
||||
}
|
||||
// Create a shared event for all button inside container
|
||||
lv_obj_add_event_cb(cont, virtualKeypad_event_cb, LV_EVENT_CLICKED, NULL);
|
||||
|
||||
// Only for the LVGL PC Simulator !!!
|
||||
lv_img_dsc_t appleTvIcon;
|
||||
appleTvIcon.header.cf = LV_IMG_CF_TRUE_COLOR;
|
||||
appleTvIcon.header.always_zero = 0;
|
||||
appleTvIcon.header.reserved = 0;
|
||||
appleTvIcon.header.w = 91;
|
||||
appleTvIcon.header.h = 42;
|
||||
appleTvIcon.data_size = 3822 * LV_COLOR_SIZE / 8;
|
||||
appleTvIcon.data = appleTvIcon_map;
|
||||
lv_img_dsc_t appleDisplayIcon;
|
||||
appleDisplayIcon.header.cf = LV_IMG_CF_ALPHA_8BIT;
|
||||
appleDisplayIcon.header.always_zero = 0;
|
||||
appleDisplayIcon.header.reserved = 0;
|
||||
appleDisplayIcon.header.w = 25;
|
||||
appleDisplayIcon.header.h = 20;
|
||||
appleDisplayIcon.data_size = 500;
|
||||
appleDisplayIcon.data = appleDisplayIcon_map;
|
||||
lv_img_dsc_t appleBackIcon;
|
||||
appleBackIcon.header.cf = LV_IMG_CF_ALPHA_8BIT;
|
||||
appleBackIcon.header.always_zero = 0;
|
||||
appleBackIcon.header.reserved = 0;
|
||||
appleBackIcon.header.w = 13;
|
||||
appleBackIcon.header.h = 25;
|
||||
appleBackIcon.data_size = 325;
|
||||
appleBackIcon.data = appleBackIcon_map;
|
||||
|
||||
|
||||
// Add content to the Apple TV tab (3)
|
||||
// Add a nice apple tv logo
|
||||
lv_obj_t* appleImg = lv_img_create(tab3);
|
||||
lv_img_set_src(appleImg, &appleTvIcon);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, 0, -60);
|
||||
// create two buttons and add their icons accordingly
|
||||
lv_obj_t* button = lv_btn_create(tab3);
|
||||
lv_obj_align(button, LV_ALIGN_BOTTOM_LEFT, 10, 0);
|
||||
lv_obj_set_size(button, 60, 60);
|
||||
lv_obj_set_style_radius(button, 30, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(button, color_primary, LV_PART_MAIN);
|
||||
lv_obj_add_event_cb(button, appleKey_event_cb, LV_EVENT_CLICKED, (void*)1);
|
||||
|
||||
appleImg = lv_img_create(button);
|
||||
lv_img_set_src(appleImg, &appleBackIcon);
|
||||
lv_obj_set_style_img_recolor(appleImg, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(appleImg, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, -3, 0);
|
||||
|
||||
button = lv_btn_create(tab3);
|
||||
lv_obj_align(button, LV_ALIGN_BOTTOM_RIGHT, -10, 0);
|
||||
lv_obj_set_size(button, 60, 60);
|
||||
lv_obj_set_style_radius(button, 30, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(button, color_primary, LV_PART_MAIN);
|
||||
lv_obj_add_event_cb(button, appleKey_event_cb, LV_EVENT_CLICKED, (void*)2);
|
||||
|
||||
appleImg = lv_img_create(button);
|
||||
lv_img_set_src(appleImg, &appleDisplayIcon);
|
||||
lv_obj_set_style_img_recolor(appleImg, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(appleImg, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, 0, 0);
|
||||
|
||||
|
||||
|
||||
|
||||
// Add content to the settings tab
|
||||
// With a flex layout, setting groups/boxes will position themselves automatically
|
||||
lv_obj_set_layout(tab1, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(tab1, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(tab1, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
|
||||
// Only for the LVGL PC Simulator !!!
|
||||
lv_img_dsc_t high_brightness;
|
||||
high_brightness.header.cf = LV_IMG_CF_ALPHA_8BIT,
|
||||
high_brightness.header.always_zero = 0,
|
||||
high_brightness.header.reserved = 0,
|
||||
high_brightness.header.w = 18,
|
||||
high_brightness.header.h = 18,
|
||||
high_brightness.data_size = 352,
|
||||
high_brightness.data = high_brightness_map;
|
||||
lv_img_dsc_t low_brightness;
|
||||
low_brightness.header.cf = LV_IMG_CF_ALPHA_8BIT,
|
||||
low_brightness.header.always_zero = 0,
|
||||
low_brightness.header.reserved = 0,
|
||||
low_brightness.header.w = 16,
|
||||
low_brightness.header.h = 16,
|
||||
low_brightness.data_size = 256,
|
||||
low_brightness.data = low_brightness_map;
|
||||
|
||||
|
||||
// Add a label, then a box for the display settings
|
||||
lv_obj_t* menuLabel = lv_label_create(tab1);
|
||||
lv_label_set_text(menuLabel, "Display");
|
||||
|
||||
lv_obj_t* menuBox = lv_obj_create(tab1);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 109);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t* brightnessIcon = lv_img_create(menuBox);
|
||||
lv_img_set_src(brightnessIcon, &low_brightness);
|
||||
lv_obj_set_style_img_recolor(brightnessIcon, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(brightnessIcon, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(brightnessIcon, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
lv_obj_t* slider = lv_slider_create(menuBox);
|
||||
lv_slider_set_range(slider, 60, 255);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_white(), LV_PART_KNOB);
|
||||
lv_obj_set_style_bg_opa(slider, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(color_primary, 50), LV_PART_MAIN);
|
||||
lv_slider_set_value(slider, backlight_brightness, LV_ANIM_OFF);
|
||||
lv_obj_set_size(slider, lv_pct(66), 10);
|
||||
lv_obj_align(slider, LV_ALIGN_TOP_MID, 0, 3);
|
||||
brightnessIcon = lv_img_create(menuBox);
|
||||
lv_img_set_src(brightnessIcon, &high_brightness);
|
||||
lv_obj_set_style_img_recolor(brightnessIcon, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(brightnessIcon, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(brightnessIcon, LV_ALIGN_TOP_RIGHT, 0, -1);
|
||||
lv_obj_add_event_cb(slider, bl_slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Lift to Wake");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 0, 32);
|
||||
lv_obj_t* wakeToggle = lv_switch_create(menuBox);
|
||||
lv_obj_set_size(wakeToggle, 40, 22);
|
||||
lv_obj_align(wakeToggle, LV_ALIGN_TOP_RIGHT, 0, 29);
|
||||
lv_obj_set_style_bg_color(wakeToggle, lv_color_lighten(color_primary, 50), LV_PART_MAIN);
|
||||
lv_obj_add_event_cb(wakeToggle, WakeEnableSetting_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
if (wakeupByIMUEnabled) lv_obj_add_state(wakeToggle, LV_STATE_CHECKED); // set default state
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Timeout");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 0, 64);
|
||||
lv_obj_t* drop = lv_dropdown_create(menuBox);
|
||||
lv_dropdown_set_options(drop, "10s\n"
|
||||
"30s\n"
|
||||
"1m\n"
|
||||
"3m");
|
||||
lv_obj_align(drop, LV_ALIGN_TOP_RIGHT, 0, 61);
|
||||
lv_obj_set_size(drop, 70, 22);
|
||||
lv_obj_set_style_pad_top(drop, 1, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(drop, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(drop, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(lv_dropdown_get_list(drop), color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(lv_dropdown_get_list(drop), 1, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_color(lv_dropdown_get_list(drop), lv_color_darken(color_primary, 40), LV_PART_MAIN);
|
||||
|
||||
// Add another label, then a settings box for WiFi
|
||||
menuLabel = lv_label_create(tab1);
|
||||
lv_label_set_text(menuLabel, "Wi-Fi");
|
||||
menuBox = lv_obj_create(tab1);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 80);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Network");
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, LV_SYMBOL_RIGHT);
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Password");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 0, 32);
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, LV_SYMBOL_RIGHT);
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_RIGHT, 0, 32);
|
||||
|
||||
// Another setting for the battery
|
||||
menuLabel = lv_label_create(tab1);
|
||||
lv_label_set_text(menuLabel, "Battery");
|
||||
menuBox = lv_obj_create(tab1);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 125);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
|
||||
|
||||
// Add content to the smart home tab (4)
|
||||
|
||||
// Only for the LVGL PC Simulator !!!
|
||||
lv_img_dsc_t lightbulb;
|
||||
lightbulb.header.cf = LV_IMG_CF_ALPHA_8BIT,
|
||||
lightbulb.header.always_zero = 0,
|
||||
lightbulb.header.reserved = 0,
|
||||
lightbulb.header.w = 12,
|
||||
lightbulb.header.h = 20,
|
||||
lightbulb.data_size = 240,
|
||||
lightbulb.data = lightbulb_map;
|
||||
|
||||
lv_obj_set_layout(tab4, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(tab4, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(tab4, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
|
||||
// Add a label, then a box for the light controls
|
||||
menuLabel = lv_label_create(tab4);
|
||||
lv_label_set_text(menuLabel, "Living Room");
|
||||
|
||||
menuBox = lv_obj_create(tab4);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 79);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t* bulbIcon = lv_img_create(menuBox);
|
||||
lv_img_set_src(bulbIcon, &lightbulb);
|
||||
lv_obj_set_style_img_recolor(bulbIcon, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(bulbIcon, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(bulbIcon, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Floor Lamp");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 22, 3);
|
||||
lv_obj_t* lightToggleA = lv_switch_create(menuBox);
|
||||
lv_obj_set_size(lightToggleA, 40, 22);
|
||||
lv_obj_align(lightToggleA, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
lv_obj_set_style_bg_color(lightToggleA, lv_color_lighten(color_primary, 50), LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(lightToggleA, color_primary, LV_PART_INDICATOR);
|
||||
lv_obj_add_event_cb(lightToggleA, smartHomeToggle_event_cb, LV_EVENT_VALUE_CHANGED, (void*)1);
|
||||
|
||||
slider = lv_slider_create(menuBox);
|
||||
lv_slider_set_range(slider, 60, 255);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(lv_color_black(), 30), LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_color(slider, lv_color_lighten(lv_palette_main(LV_PALETTE_AMBER), 180), LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_dir(slider, LV_GRAD_DIR_HOR, LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_white(), LV_PART_KNOB);
|
||||
lv_obj_set_style_bg_opa(slider, 255, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(color_primary, 50), LV_PART_MAIN);
|
||||
lv_slider_set_value(slider, 255, LV_ANIM_OFF);
|
||||
lv_obj_set_size(slider, lv_pct(90), 10);
|
||||
lv_obj_align(slider, LV_ALIGN_TOP_MID, 0, 37);
|
||||
lv_obj_add_event_cb(slider, smartHomeSlider_event_cb, LV_EVENT_VALUE_CHANGED, (void*)1);
|
||||
|
||||
// Add another menu box for a second appliance
|
||||
menuBox = lv_obj_create(tab4);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 79);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
bulbIcon = lv_img_create(menuBox);
|
||||
lv_img_set_src(bulbIcon, &lightbulb);
|
||||
lv_obj_set_style_img_recolor(bulbIcon, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(bulbIcon, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(bulbIcon, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Ceiling Light");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 22, 3);
|
||||
lv_obj_t* lightToggleB = lv_switch_create(menuBox);
|
||||
lv_obj_set_size(lightToggleB, 40, 22);
|
||||
lv_obj_align(lightToggleB, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
lv_obj_set_style_bg_color(lightToggleB, lv_color_lighten(color_primary, 50), LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(lightToggleB, color_primary, LV_PART_INDICATOR);
|
||||
lv_obj_add_event_cb(lightToggleB, smartHomeToggle_event_cb, LV_EVENT_VALUE_CHANGED, (void*)2);
|
||||
|
||||
slider = lv_slider_create(menuBox);
|
||||
lv_slider_set_range(slider, 60, 255);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(lv_color_black(), 30), LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_color(slider, lv_color_lighten(lv_palette_main(LV_PALETTE_AMBER), 180), LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_dir(slider, LV_GRAD_DIR_HOR, LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_white(), LV_PART_KNOB);
|
||||
lv_obj_set_style_bg_opa(slider, 255, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(color_primary, 50), LV_PART_MAIN);
|
||||
lv_slider_set_value(slider, 255, LV_ANIM_OFF);
|
||||
lv_obj_set_size(slider, lv_pct(90), 10);
|
||||
lv_obj_align(slider, LV_ALIGN_TOP_MID, 0, 37);
|
||||
lv_obj_add_event_cb(slider, smartHomeSlider_event_cb, LV_EVENT_VALUE_CHANGED, (void*)2);
|
||||
|
||||
|
||||
// Add another room (empty for now)
|
||||
menuLabel = lv_label_create(tab4);
|
||||
lv_label_set_text(menuLabel, "Kitchen");
|
||||
|
||||
menuBox = lv_obj_create(tab4);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 79);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Set current page according to the current Device
|
||||
lv_tabview_set_act(tabview, currentDevice, LV_ANIM_OFF);
|
||||
|
||||
// Create a page indicator
|
||||
panel = lv_obj_create(lv_scr_act());
|
||||
lv_obj_clear_flag(panel, LV_OBJ_FLAG_CLICKABLE); // this indicator will not be clickable
|
||||
lv_obj_set_size(panel, screenWidth, 30);
|
||||
lv_obj_set_flex_flow(panel, LV_FLEX_FLOW_ROW);
|
||||
lv_obj_align(panel, LV_ALIGN_BOTTOM_MID, 0, 0);
|
||||
lv_obj_set_scrollbar_mode(panel, LV_SCROLLBAR_MODE_OFF);
|
||||
// This small hidden button enables the page indicator to scroll further
|
||||
lv_obj_t* btn = lv_btn_create(panel);
|
||||
lv_obj_set_size(btn, 50, lv_pct(100));
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_opa(btn, LV_OPA_TRANSP, LV_PART_MAIN);
|
||||
// Create actual (non-clickable) buttons for every tab
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
lv_obj_t* label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Settings");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Technisat");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Apple TV");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Smart Home");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
// This small hidden button enables the page indicator to scroll further
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_set_size(btn, 50, lv_pct(100));
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_opa(btn, LV_OPA_TRANSP, LV_PART_MAIN);
|
||||
|
||||
// Make the indicator scroll together with the tabs by creating a scroll event
|
||||
lv_obj_add_event_cb(lv_tabview_get_content(tabview), store_scroll_value_event_cb, LV_EVENT_SCROLL, NULL);
|
||||
lv_obj_add_event_cb(tabview, tabview_device_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
// Initialize scroll position for the indicator
|
||||
lv_event_send(lv_tabview_get_content(tabview), LV_EVENT_SCROLL, NULL);
|
||||
|
||||
// Style the panel background
|
||||
static lv_style_t style_btn;
|
||||
lv_style_init(&style_btn);
|
||||
lv_style_set_pad_all(&style_btn, 3);
|
||||
lv_style_set_border_width(&style_btn, 0);
|
||||
lv_style_set_bg_opa(&style_btn, LV_OPA_TRANSP);
|
||||
lv_obj_add_style(panel, &style_btn, 0);
|
||||
|
||||
// Only for the LVGL PC Simulator !!!
|
||||
lv_img_dsc_t gradientLeft;
|
||||
gradientLeft.header.cf = LV_IMG_CF_ALPHA_8BIT;
|
||||
gradientLeft.header.always_zero = 0;
|
||||
gradientLeft.header.reserved = 0;
|
||||
gradientLeft.header.w = 30;
|
||||
gradientLeft.header.h = 1;
|
||||
gradientLeft.data_size = 30;
|
||||
gradientLeft.data = gradientLeft_map;
|
||||
lv_img_dsc_t gradientRight;
|
||||
gradientRight.header.cf = LV_IMG_CF_ALPHA_8BIT;
|
||||
gradientRight.header.always_zero = 0;
|
||||
gradientRight.header.reserved = 0;
|
||||
gradientRight.header.w = 30;
|
||||
gradientRight.header.h = 1;
|
||||
gradientRight.data_size = 30;
|
||||
gradientRight.data = gradientRight_map;
|
||||
|
||||
|
||||
// Make the indicator fade out at the sides using gradient bitmaps
|
||||
lv_obj_t* img1 = lv_img_create(lv_scr_act());
|
||||
lv_img_set_src(img1, &gradientLeft);
|
||||
lv_obj_align(img1, LV_ALIGN_BOTTOM_LEFT, 0, 0);
|
||||
lv_obj_set_size(img1, 30, 30); // stretch the 1-pixel high image to 30px
|
||||
lv_obj_t* img2 = lv_img_create(lv_scr_act());
|
||||
lv_img_set_src(img2, &gradientRight);
|
||||
lv_obj_align(img2, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
|
||||
lv_obj_set_size(img2, 30, 30);
|
||||
|
||||
|
||||
// Create a status bar
|
||||
lv_obj_t* statusbar = lv_btn_create(lv_scr_act());
|
||||
lv_obj_set_size(statusbar, 240, 20);
|
||||
lv_obj_set_style_shadow_width(statusbar, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(statusbar, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_style_radius(statusbar, 0, LV_PART_MAIN);
|
||||
lv_obj_align(statusbar, LV_ALIGN_TOP_MID, 0, 0);
|
||||
|
||||
lv_obj_t* WifiLabel = lv_label_create(statusbar);
|
||||
lv_label_set_text(WifiLabel, LV_SYMBOL_WIFI);
|
||||
lv_obj_align(WifiLabel, LV_ALIGN_LEFT_MID, -8, 0);
|
||||
lv_obj_set_style_text_font(WifiLabel, &lv_font_montserrat_12, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t* objBattPercentage = lv_label_create(statusbar);
|
||||
lv_label_set_text(objBattPercentage, "");
|
||||
lv_obj_align(objBattPercentage, LV_ALIGN_RIGHT_MID, -16, 0);
|
||||
lv_obj_set_style_text_font(objBattPercentage, &lv_font_montserrat_12, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t* objBattIcon = lv_label_create(statusbar);
|
||||
lv_label_set_text(objBattIcon, LV_SYMBOL_BATTERY_EMPTY);
|
||||
lv_obj_align(objBattIcon, LV_ALIGN_RIGHT_MID, 8, 0);
|
||||
lv_obj_set_style_text_font(objBattIcon, &lv_font_montserrat_16, LV_PART_MAIN);
|
||||
|
||||
|
||||
ui->layout_UI();
|
||||
|
||||
while (!lv_win32_quit_signal)
|
||||
{
|
||||
lv_task_handler();
|
||||
//std::string strng = std::to_string(scroll_value);
|
||||
//const char* pchar = strng.c_str();
|
||||
//OutputDebugStringW();
|
||||
//lv_label_set_text_fmt(scrollPos, "%d %d", lv_obj_get_scroll_x(lv_tabview_get_content(tabview)), lv_obj_get_scroll_x(panel));
|
||||
|
||||
// std::string strng = std::to_string(scroll_value);
|
||||
// const char* pchar = strng.c_str();
|
||||
// OutputDebugStringW();
|
||||
// lv_label_set_text_fmt(scrollPos, "%d %d", lv_obj_get_scroll_x(lv_tabview_get_content(tabview)), lv_obj_get_scroll_x(panel));
|
||||
|
||||
Sleep(1);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<MileProjectType>ConsoleApplication</MileProjectType>
|
||||
<MileProjectManifestFile>LVGL.Simulator.manifest</MileProjectManifestFile>
|
||||
<MileProjectEnableVCLTLSupport>true</MileProjectEnableVCLTLSupport>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)'=='Debug'">
|
||||
<SupportLTL>false</SupportLTL>
|
||||
|
@ -18,6 +19,9 @@
|
|||
<PropertyGroup>
|
||||
<IncludePath>$(MSBuildThisFileDirectory);$(MSBuildThisFileDirectory)..\LvglPlatform\lvgl\;$(MSBuildThisFileDirectory)..\LvglPlatform\;$(IncludePath)</IncludePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<SourcePath>$(VC_SourcePath);</SourcePath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -32,10 +36,19 @@
|
|||
<LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">stdcpp17</LanguageStandard>
|
||||
<LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalLibraryDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="LVGL.Portable.vcxitems" />
|
||||
<Import Project="LVGL.Drivers.vcxitems" />
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\Platformio\include\OmoteUI\HardwareInterface.h" />
|
||||
<ClInclude Include="..\..\Platformio\include\OmoteUI\Images.hpp" />
|
||||
<ClInclude Include="..\..\Platformio\include\OmoteUI\OmoteUI.hpp" />
|
||||
<ClInclude Include="HardwareSimulator.hpp" />
|
||||
<ClInclude Include="omoteconfig.h" />
|
||||
<ClInclude Include="lv_conf.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -49,7 +62,11 @@
|
|||
<ClInclude Include="resource.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="LVGL.Simulator.cpp" />
|
||||
<ClCompile Include="..\..\Platformio\src\OmoteUI.cpp" />
|
||||
<ClCompile Include="HardwareSimulator.cpp" />
|
||||
<ClCompile Include="LVGL.Simulator.cpp">
|
||||
<LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="LVGL.Simulator.rc" />
|
||||
|
|
|
@ -5,6 +5,17 @@
|
|||
<ItemGroup>
|
||||
<ClInclude Include="lv_conf.h" />
|
||||
<ClInclude Include="lv_drv_conf.h" />
|
||||
<ClInclude Include="HardwareSimulator.hpp" />
|
||||
<ClInclude Include="..\..\Platformio\include\OmoteUI\OmoteUI.hpp">
|
||||
<Filter>OmoteUI</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="omoteconfig.h" />
|
||||
<ClInclude Include="..\..\Platformio\include\OmoteUI\Images.hpp">
|
||||
<Filter>OmoteUI</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\Platformio\include\OmoteUI\HardwareInterface.h">
|
||||
<Filter>OmoteUI</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Manifest Include="LVGL.Simulator.manifest" />
|
||||
|
@ -15,6 +26,10 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="LVGL.Simulator.cpp" />
|
||||
<ClCompile Include="HardwareSimulator.cpp" />
|
||||
<ClCompile Include="..\..\Platformio\src\OmoteUI.cpp">
|
||||
<Filter>OmoteUI</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="LVGL.Simulator.rc" />
|
||||
|
@ -25,4 +40,9 @@
|
|||
<ItemGroup>
|
||||
<None Include="freetype.props" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="OmoteUI">
|
||||
<UniqueIdentifier>{0b1f99aa-73cb-482d-9d62-20e17f93b890}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
</Project>
|
6
LVGL Simulator/LVGL.Simulator/omoteconfig.h
Normal file
6
LVGL Simulator/LVGL.Simulator/omoteconfig.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#define IS_SIMULATOR true
|
||||
|
||||
#define SCREEN_WIDTH 240
|
||||
#define SCREEN_HEIGHT 360
|
|
@ -379,7 +379,7 @@
|
|||
(stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 51db3da6-9e43-47ce-9571-e63cf05ae317))
|
||||
)
|
||||
|
||||
(footprint "mkern:LED_5mm_Side_Mount" locked (layer "F.Cu")
|
||||
(footprint "omoteLib:LED_5mm_Side_Mount" locked (layer "F.Cu")
|
||||
(tstamp 028982f1-ec49-4f15-a3a1-367832d00d71)
|
||||
(at 59.676677 102 90)
|
||||
(descr "5mm LED for horizontal soldering to the board edge")
|
||||
|
@ -466,7 +466,7 @@
|
|||
(net 48 "GND") (pinfunction "K") (pintype "passive") (tstamp 71289672-541a-40f3-bb92-b36055f6b1d6))
|
||||
(pad "2" smd rect locked (at -1.275 3.5 90) (size 1.5 5) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(net 14 "Net-(D2-A)") (pinfunction "A") (pintype "passive") (tstamp ffb8b095-3661-40af-83bd-a02a8d8ca89c))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/Side Mount LED v1.step"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/Side Mount LED v1.step"
|
||||
(offset (xyz 0 0 0.25))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 90 0 0))
|
||||
|
@ -648,7 +648,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(footprint "mkern:JST_PH_B2B-PH-SM4-TB_1x02-1MP_P2.00mm_Vertical" (layer "F.Cu")
|
||||
(footprint "omoteLib:JST_PH_B2B-PH-SM4-TB_1x02-1MP_P2.00mm_Vertical" (layer "F.Cu")
|
||||
(tstamp 06c0ec99-fe4f-4c5e-9492-8f7abb1bea3e)
|
||||
(at 224.9 113.5 90)
|
||||
(descr "JST PH series connector, B2B-PH-SM4-TB (http://www.jst-mfg.com/product/pdf/eng/ePH.pdf), generated with kicad-footprint-generator")
|
||||
|
@ -729,7 +729,7 @@
|
|||
(net 48 "GND") (pinfunction "Pin_2") (pintype "passive") (tstamp a8674511-9189-4417-9af0-7e68e5f383e2))
|
||||
(pad "MP" smd roundrect (at -3.4 -1.75 90) (size 1.6 3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15625) (tstamp 7ec99062-2840-4ac6-8a0d-545eb56296d1))
|
||||
(pad "MP" smd roundrect (at 3.4 -1.75 90) (size 1.6 3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15625) (tstamp 2c9323e8-8263-4b88-b05b-7ff99f5bc2b5))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/B2B-PH-SM4-TB.STEP"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/B2B-PH-SM4-TB.STEP"
|
||||
(offset (xyz -4 3.25 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 0))
|
||||
|
@ -1029,7 +1029,7 @@
|
|||
(property "ki_keywords" "cap capacitor")
|
||||
(path "/5d818a81-71ff-4f40-8854-04efda688b48")
|
||||
(attr smd)
|
||||
(fp_text reference "C13" (at -3.25 -1.68) (layer "F.SilkS")
|
||||
(fp_text reference "C13" (at -3.238895 0.068182) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 15439bba-04d4-4528-ad0e-855324eb39a5)
|
||||
)
|
||||
|
@ -1370,7 +1370,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(footprint "mkern:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm_ThermalVias_MR" (layer "F.Cu")
|
||||
(footprint "omoteLib:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm_ThermalVias_MR" (layer "F.Cu")
|
||||
(tstamp 21878e1b-21e2-436e-9384-827df816db75)
|
||||
(at 76.85 91.55)
|
||||
(descr "QFN, 48 Pin (https://www.trinamic.com/fileadmin/assets/Products/ICs_Documents/TMC2041_datasheet.pdf#page=62), generated with kicad-footprint-generator ipc_noLead_generator.py")
|
||||
|
@ -1615,7 +1615,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(footprint "mkern:XDCR_LIS3DHTR" (layer "F.Cu")
|
||||
(footprint "omoteLib:XDCR_LIS3DHTR" (layer "F.Cu")
|
||||
(tstamp 230440db-a366-4510-924d-f45962ca2d45)
|
||||
(at 89.75 84.786992 90)
|
||||
(property "MANUFACTURER" "STMicroelectronics")
|
||||
|
@ -1694,7 +1694,7 @@
|
|||
(net 97 "unconnected-(U5-ADC2-Pad15)") (pinfunction "ADC2") (pintype "input+no_connect") (solder_paste_margin_ratio -0.05) (tstamp 0d3a3e5a-4358-4958-b320-6834c31fe10c))
|
||||
(pad "16" smd rect (at -0.5 -1.3 180) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(net 98 "unconnected-(U5-ADC1-Pad16)") (pinfunction "ADC1") (pintype "input+no_connect") (solder_paste_margin_ratio -0.05) (tstamp 9aa4f2f5-5d32-456f-89d1-63571efbe5d2))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/LIS3DHTR.step"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/LIS3DHTR.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 0))
|
||||
|
@ -4052,7 +4052,7 @@
|
|||
(stroke (width 0) (type solid)) (fill solid) (layer "F.Mask") (tstamp 299dc0c1-5c29-4cd1-b7d9-0cce8367cfa3))
|
||||
)
|
||||
|
||||
(footprint "mkern:TFT_2.83IN_240X320_50PIN" locked (layer "F.Cu")
|
||||
(footprint "omoteLib:TFT_2.83IN_240X320_50PIN" locked (layer "F.Cu")
|
||||
(tstamp 5a621486-0b9c-4ec0-862b-29bd1b417bb9)
|
||||
(at 91.622852 102 90)
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
|
@ -4766,12 +4766,12 @@
|
|||
(net 48 "GND") (pinfunction "MP") (pintype "passive") (solder_mask_margin 0.1016) (tstamp 4eb426d9-e540-47c5-9b76-3e1d32abc52e))
|
||||
(pad "MP" smd roundrect locked (at 14.35 13.09 270) (size 2.4 2.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.125)
|
||||
(net 48 "GND") (pinfunction "MP") (pintype "passive") (solder_mask_margin 0.1016) (tstamp 2e81d339-fff0-4f74-96c2-d969d63a15e6))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/541325062_colored.step"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/541325062_colored.step"
|
||||
(offset (xyz 0 -15.5 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/280QV10 v5.step"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/280QV10 v5.step"
|
||||
(offset (xyz 0 -22.25 -6))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 180 0 180))
|
||||
|
@ -4932,7 +4932,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(footprint "mkern:Heimdall vertical" (layer "F.Cu")
|
||||
(footprint "omoteLib:Heimdall vertical" (layer "F.Cu")
|
||||
(tstamp 5d2b74c8-ea79-4f25-99fd-c78691bddaa1)
|
||||
(at 55.4 116.3 90)
|
||||
(descr "VISHAY Heimdall for TSSP77038")
|
||||
|
@ -4989,7 +4989,7 @@
|
|||
(net 87 "IR_VCC") (pinfunction "Vs") (pintype "power_in") (tstamp 122ac044-9956-47ad-90b3-cd90dd9d6e84))
|
||||
(pad "4" smd rect (at 1.9 0.7 180) (size 2 0.8) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(net 48 "GND") (pinfunction "GND") (pintype "power_in") (tstamp a399ed69-ca57-4198-ac99-c2971749e3d2))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/82672Heimdall.stp"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/82672Heimdall.stp"
|
||||
(offset (xyz 0 -1.2 1.6))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 -180))
|
||||
|
@ -6445,7 +6445,7 @@
|
|||
(property "ki_keywords" "cap capacitor")
|
||||
(path "/a888a00f-5496-4d09-af9f-455dba2d8767")
|
||||
(attr smd)
|
||||
(fp_text reference "C14" (at 3.5 -1.85) (layer "F.SilkS")
|
||||
(fp_text reference "C14" (at 3.488895 -0.14998) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 5ecdc16d-4df0-4830-8429-f936a2864918)
|
||||
)
|
||||
|
@ -8289,7 +8289,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(footprint "mkern:RFANT5220110A2T" (layer "F.Cu")
|
||||
(footprint "omoteLib:RFANT5220110A2T" (layer "F.Cu")
|
||||
(tstamp cdd38a2c-3189-4b09-aa8d-b7b99e8e71b9)
|
||||
(at 55.500146 85.711992)
|
||||
(descr "Walsin RFANT5220110A2T SMD antenna 2400-2500Mhz, 2dBi, http://www.passivecomponent.com/wp-content/uploads/2013/12/ASC_RFANT5220110A2T_V03.pdf")
|
||||
|
@ -8339,7 +8339,7 @@
|
|||
(pad "" smd roundrect (at -2.7 0) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.208333) (tstamp cc86c1ac-e652-4e6f-8b3b-2ad7dcf806b0))
|
||||
(pad "1" smd roundrect (at 2.7 0 180) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.208333)
|
||||
(net 3 "Net-(AE1-A)") (pinfunction "A") (pintype "input") (tstamp 5f31508e-8dcd-4d96-b5f5-cf3f4a95c613))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/Walsin RFANT5220110A2T v1.step"
|
||||
(model "${KIPRJMOD}/project_libraries/3D-models/Walsin RFANT5220110A2T v1.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 -90))
|
||||
|
@ -8955,7 +8955,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(footprint "mkern:USB_C_Receptacle_HRO_TYPE-C-31-M-12" (layer "F.Cu")
|
||||
(footprint "omoteLib:USB_C_Receptacle_HRO_TYPE-C-31-M-12" (layer "F.Cu")
|
||||
(tstamp ed154c17-7f27-4787-a05a-0859bc96f71a)
|
||||
(at 241 102 90)
|
||||
(descr "USB Type-C receptacle for USB 2.0 and PD, http://www.krhro.com/uploads/soft/180320/1-1P320120243.pdf")
|
||||
|
|
|
@ -486,10 +486,10 @@
|
|||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [
|
||||
"mkern"
|
||||
"omoteLib"
|
||||
],
|
||||
"pinned_symbol_libs": [
|
||||
"mkern"
|
||||
"omoteLib"
|
||||
]
|
||||
},
|
||||
"meta": {
|
||||
|
|
|
@ -2801,7 +2801,7 @@
|
|||
(property "Value" "TSSP77038" (at -1.27 8.89 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "mkern:Heimdall vertical" (at -1.27 -11.43 0)
|
||||
(property "Footprint" "omoteLib:Heimdall vertical" (at -1.27 -11.43 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.vishay.com/docs/82470/tssp770.pdf" (at 16.51 7.62 0)
|
||||
|
@ -3023,14 +3023,14 @@
|
|||
)
|
||||
)
|
||||
)
|
||||
(symbol "mkern:Conn_01x50" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
|
||||
(symbol "omoteLib:Conn_01x50" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "J" (at 0 63.5 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "Conn_01x50" (at 0 -66.04 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "mkern:TFT_2.83IN_240X320_50PIN" (at 1.27 -68.58 0)
|
||||
(property "Footprint" "omoteLib:TFT_2.83IN_240X320_50PIN" (at 1.27 -68.58 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 0 12.7 0)
|
||||
|
@ -3456,7 +3456,7 @@
|
|||
)
|
||||
)
|
||||
)
|
||||
(symbol "mkern:LIS3DHTR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(symbol "omoteLib:LIS3DHTR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U5" (at 0 19.05 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
|
@ -3552,7 +3552,7 @@
|
|||
)
|
||||
)
|
||||
)
|
||||
(symbol "mkern:USBLC6-2P6" (in_bom yes) (on_board yes)
|
||||
(symbol "omoteLib:USBLC6-2P6" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U4" (at -7.62 8.89 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
|
@ -8755,7 +8755,7 @@
|
|||
(property "Value" "TSSP77038" (at 256.54 193.04 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "mkern:Heimdall vertical" (at 256.54 213.36 0)
|
||||
(property "Footprint" "omoteLib:Heimdall vertical" (at 256.54 213.36 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.vishay.com/docs/82470/tssp770.pdf" (at 274.32 194.31 0)
|
||||
|
@ -8880,7 +8880,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(symbol (lib_id "mkern:LIS3DHTR") (at 360.68 49.53 0) (mirror y) (unit 1)
|
||||
(symbol (lib_id "omoteLib:LIS3DHTR") (at 360.68 49.53 0) (mirror y) (unit 1)
|
||||
(in_bom yes) (on_board yes) (dnp no) (fields_autoplaced)
|
||||
(uuid 55d86592-c3da-4fa7-ba6d-9e58f1452184)
|
||||
(property "Reference" "U5" (at 360.68 30.48 0)
|
||||
|
@ -9677,7 +9677,7 @@
|
|||
(property "Value" "USB_C_Receptacle_USB2.0" (at 35.56 30.48 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "mkern:USB_C_Receptacle_HRO_TYPE-C-31-M-12" (at 39.37 50.8 0)
|
||||
(property "Footprint" "omoteLib:USB_C_Receptacle_HRO_TYPE-C-31-M-12" (at 39.37 50.8 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.usb.org/sites/default/files/documents/usb_type-c.zip" (at 39.37 50.8 0)
|
||||
|
@ -9978,7 +9978,7 @@
|
|||
(property "Value" "JST_PH_B2B-PH" (at 118.11 172.7199 0)
|
||||
(effects (font (size 1.27 1.27)) (justify right))
|
||||
)
|
||||
(property "Footprint" "mkern:JST_PH_B2B-PH-SM4-TB_1x02-1MP_P2.00mm_Vertical" (at 116.84 170.18 0)
|
||||
(property "Footprint" "omoteLib:JST_PH_B2B-PH-SM4-TB_1x02-1MP_P2.00mm_Vertical" (at 116.84 170.18 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 116.84 170.18 0)
|
||||
|
@ -10207,7 +10207,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(symbol (lib_id "mkern:USBLC6-2P6") (at 78.74 46.99 0) (unit 1)
|
||||
(symbol (lib_id "omoteLib:USBLC6-2P6") (at 78.74 46.99 0) (unit 1)
|
||||
(in_bom yes) (on_board yes) (dnp no)
|
||||
(uuid 885c377e-7c82-4de5-841b-480084fa7f04)
|
||||
(property "Reference" "U4" (at 71.12 38.1 0)
|
||||
|
@ -10581,7 +10581,7 @@
|
|||
(property "Value" "SFH4346" (at 207.01 219.5829 90)
|
||||
(effects (font (size 1.27 1.27)) (justify right))
|
||||
)
|
||||
(property "Footprint" "mkern:LED_5mm_Side_Mount" (at 200.025 217.17 0)
|
||||
(property "Footprint" "omoteLib:LED_5mm_Side_Mount" (at 200.025 217.17 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "http://cdn-reichelt.de/documents/datenblatt/A500/SFH4346.pdf" (at 204.47 218.44 0)
|
||||
|
@ -10627,7 +10627,7 @@
|
|||
)
|
||||
)
|
||||
|
||||
(symbol (lib_id "mkern:Conn_01x50") (at 384.81 172.72 0) (unit 1)
|
||||
(symbol (lib_id "omoteLib:Conn_01x50") (at 384.81 172.72 0) (unit 1)
|
||||
(in_bom yes) (on_board yes) (dnp no)
|
||||
(uuid 91bb894d-766b-45a5-9f77-face96a8d77b)
|
||||
(property "Reference" "J2" (at 378.46 105.41 0)
|
||||
|
@ -10636,7 +10636,7 @@
|
|||
(property "Value" "Conn_01x50" (at 378.46 107.95 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "mkern:TFT_2.83IN_240X320_50PIN" (at 386.08 241.3 0)
|
||||
(property "Footprint" "omoteLib:TFT_2.83IN_240X320_50PIN" (at 386.08 241.3 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 384.81 160.02 0)
|
||||
|
@ -10765,7 +10765,7 @@
|
|||
(property "Value" "ESP32-PICO-D4" (at 240.7794 119.38 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "mkern:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm_ThermalVias_MR" (at 238.76 119.38 0)
|
||||
(property "Footprint" "omoteLib:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm_ThermalVias_MR" (at 238.76 119.38 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.espressif.com/sites/default/files/documentation/esp32-pico-d4_datasheet_en.pdf" (at 245.11 101.6 0)
|
||||
|
@ -10965,7 +10965,7 @@
|
|||
(property "Value" "Antenna" (at 275.59 24.13 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "mkern:RFANT5220110A2T" (at 285.75 24.13 0)
|
||||
(property "Footprint" "omoteLib:RFANT5220110A2T" (at 285.75 24.13 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 285.75 24.13 0)
|
||||
|
|
Binary file not shown.
1659
PCB/project_libraries/3D-models/280QV10 v5.step
Normal file
1659
PCB/project_libraries/3D-models/280QV10 v5.step
Normal file
File diff suppressed because it is too large
Load diff
47279
PCB/project_libraries/3D-models/541325062_colored.step
Normal file
47279
PCB/project_libraries/3D-models/541325062_colored.step
Normal file
File diff suppressed because it is too large
Load diff
3016
PCB/project_libraries/3D-models/82672Heimdall.stp
Normal file
3016
PCB/project_libraries/3D-models/82672Heimdall.stp
Normal file
File diff suppressed because it is too large
Load diff
3554
PCB/project_libraries/3D-models/B2B-PH-SM4-TB.STEP
Normal file
3554
PCB/project_libraries/3D-models/B2B-PH-SM4-TB.STEP
Normal file
File diff suppressed because it is too large
Load diff
5497
PCB/project_libraries/3D-models/LIS3DHTR.step
Normal file
5497
PCB/project_libraries/3D-models/LIS3DHTR.step
Normal file
File diff suppressed because it is too large
Load diff
519
PCB/project_libraries/3D-models/Side Mount LED v1.step
Normal file
519
PCB/project_libraries/3D-models/Side Mount LED v1.step
Normal file
|
@ -0,0 +1,519 @@
|
|||
ISO-10303-21;
|
||||
HEADER;
|
||||
/* Generated by software containing ST-Developer
|
||||
* from STEP Tools, Inc. (www.steptools.com)
|
||||
*/
|
||||
|
||||
FILE_DESCRIPTION(
|
||||
/* description */ (''),
|
||||
/* implementation_level */ '2;1');
|
||||
|
||||
FILE_NAME(
|
||||
/* name */ 'Side Mount LED v1.step',
|
||||
/* time_stamp */ '2023-01-06T17:22:44+01:00',
|
||||
/* author */ (''),
|
||||
/* organization */ (''),
|
||||
/* preprocessor_version */ 'ST-DEVELOPER v19.2',
|
||||
/* originating_system */ 'Autodesk Translation Framework v11.17.0.187',
|
||||
|
||||
/* authorisation */ '');
|
||||
|
||||
FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }'));
|
||||
ENDSEC;
|
||||
|
||||
DATA;
|
||||
#10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#25,#26,
|
||||
#27,#28,#29,#30),#430);
|
||||
#11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#437,#12);
|
||||
#12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#13),#429);
|
||||
#13=MANIFOLD_SOLID_BREP('K\X\F6rper1',#257);
|
||||
#14=SPHERICAL_SURFACE('',#286,2.5);
|
||||
#15=FACE_BOUND('',#58,.T.);
|
||||
#16=FACE_BOUND('',#62,.T.);
|
||||
#17=FACE_BOUND('',#63,.T.);
|
||||
#18=CIRCLE('',#282,3.);
|
||||
#19=CIRCLE('',#283,3.);
|
||||
#20=CIRCLE('',#285,2.5);
|
||||
#21=CIRCLE('',#287,2.5);
|
||||
#22=CIRCLE('',#288,2.5);
|
||||
#23=CYLINDRICAL_SURFACE('',#281,3.);
|
||||
#24=CYLINDRICAL_SURFACE('',#289,2.5);
|
||||
#25=STYLED_ITEM('',(#447),#252);
|
||||
#26=STYLED_ITEM('',(#447),#253);
|
||||
#27=STYLED_ITEM('',(#447),#254);
|
||||
#28=STYLED_ITEM('',(#447),#255);
|
||||
#29=STYLED_ITEM('',(#447),#256);
|
||||
#30=STYLED_ITEM('',(#446),#13);
|
||||
#31=FACE_OUTER_BOUND('',#46,.T.);
|
||||
#32=FACE_OUTER_BOUND('',#47,.T.);
|
||||
#33=FACE_OUTER_BOUND('',#48,.T.);
|
||||
#34=FACE_OUTER_BOUND('',#49,.T.);
|
||||
#35=FACE_OUTER_BOUND('',#50,.T.);
|
||||
#36=FACE_OUTER_BOUND('',#51,.T.);
|
||||
#37=FACE_OUTER_BOUND('',#52,.T.);
|
||||
#38=FACE_OUTER_BOUND('',#53,.T.);
|
||||
#39=FACE_OUTER_BOUND('',#54,.T.);
|
||||
#40=FACE_OUTER_BOUND('',#55,.T.);
|
||||
#41=FACE_OUTER_BOUND('',#56,.T.);
|
||||
#42=FACE_OUTER_BOUND('',#57,.T.);
|
||||
#43=FACE_OUTER_BOUND('',#59,.T.);
|
||||
#44=FACE_OUTER_BOUND('',#60,.T.);
|
||||
#45=FACE_OUTER_BOUND('',#61,.T.);
|
||||
#46=EDGE_LOOP('',(#168,#169,#170,#171));
|
||||
#47=EDGE_LOOP('',(#172,#173,#174,#175));
|
||||
#48=EDGE_LOOP('',(#176,#177,#178,#179));
|
||||
#49=EDGE_LOOP('',(#180,#181,#182,#183));
|
||||
#50=EDGE_LOOP('',(#184,#185,#186,#187));
|
||||
#51=EDGE_LOOP('',(#188,#189,#190,#191));
|
||||
#52=EDGE_LOOP('',(#192,#193,#194,#195));
|
||||
#53=EDGE_LOOP('',(#196,#197,#198,#199));
|
||||
#54=EDGE_LOOP('',(#200,#201,#202,#203));
|
||||
#55=EDGE_LOOP('',(#204,#205,#206,#207));
|
||||
#56=EDGE_LOOP('',(#208,#209,#210,#211));
|
||||
#57=EDGE_LOOP('',(#212));
|
||||
#58=EDGE_LOOP('',(#213));
|
||||
#59=EDGE_LOOP('',(#214,#215,#216));
|
||||
#60=EDGE_LOOP('',(#217,#218,#219,#220));
|
||||
#61=EDGE_LOOP('',(#221));
|
||||
#62=EDGE_LOOP('',(#222,#223,#224,#225));
|
||||
#63=EDGE_LOOP('',(#226,#227,#228,#229));
|
||||
#64=LINE('',#363,#90);
|
||||
#65=LINE('',#365,#91);
|
||||
#66=LINE('',#367,#92);
|
||||
#67=LINE('',#368,#93);
|
||||
#68=LINE('',#371,#94);
|
||||
#69=LINE('',#373,#95);
|
||||
#70=LINE('',#374,#96);
|
||||
#71=LINE('',#377,#97);
|
||||
#72=LINE('',#379,#98);
|
||||
#73=LINE('',#380,#99);
|
||||
#74=LINE('',#382,#100);
|
||||
#75=LINE('',#383,#101);
|
||||
#76=LINE('',#388,#102);
|
||||
#77=LINE('',#390,#103);
|
||||
#78=LINE('',#392,#104);
|
||||
#79=LINE('',#393,#105);
|
||||
#80=LINE('',#396,#106);
|
||||
#81=LINE('',#398,#107);
|
||||
#82=LINE('',#399,#108);
|
||||
#83=LINE('',#402,#109);
|
||||
#84=LINE('',#404,#110);
|
||||
#85=LINE('',#405,#111);
|
||||
#86=LINE('',#407,#112);
|
||||
#87=LINE('',#408,#113);
|
||||
#88=LINE('',#414,#114);
|
||||
#89=LINE('',#425,#115);
|
||||
#90=VECTOR('',#295,10.);
|
||||
#91=VECTOR('',#296,10.);
|
||||
#92=VECTOR('',#297,10.);
|
||||
#93=VECTOR('',#298,10.);
|
||||
#94=VECTOR('',#301,10.);
|
||||
#95=VECTOR('',#302,10.);
|
||||
#96=VECTOR('',#303,10.);
|
||||
#97=VECTOR('',#306,10.);
|
||||
#98=VECTOR('',#307,10.);
|
||||
#99=VECTOR('',#308,10.);
|
||||
#100=VECTOR('',#311,10.);
|
||||
#101=VECTOR('',#312,10.);
|
||||
#102=VECTOR('',#317,10.);
|
||||
#103=VECTOR('',#318,10.);
|
||||
#104=VECTOR('',#319,10.);
|
||||
#105=VECTOR('',#320,10.);
|
||||
#106=VECTOR('',#323,10.);
|
||||
#107=VECTOR('',#324,10.);
|
||||
#108=VECTOR('',#325,10.);
|
||||
#109=VECTOR('',#328,10.);
|
||||
#110=VECTOR('',#329,10.);
|
||||
#111=VECTOR('',#330,10.);
|
||||
#112=VECTOR('',#333,10.);
|
||||
#113=VECTOR('',#334,10.);
|
||||
#114=VECTOR('',#341,2.5);
|
||||
#115=VECTOR('',#356,2.5);
|
||||
#116=VERTEX_POINT('',#361);
|
||||
#117=VERTEX_POINT('',#362);
|
||||
#118=VERTEX_POINT('',#364);
|
||||
#119=VERTEX_POINT('',#366);
|
||||
#120=VERTEX_POINT('',#370);
|
||||
#121=VERTEX_POINT('',#372);
|
||||
#122=VERTEX_POINT('',#376);
|
||||
#123=VERTEX_POINT('',#378);
|
||||
#124=VERTEX_POINT('',#386);
|
||||
#125=VERTEX_POINT('',#387);
|
||||
#126=VERTEX_POINT('',#389);
|
||||
#127=VERTEX_POINT('',#391);
|
||||
#128=VERTEX_POINT('',#395);
|
||||
#129=VERTEX_POINT('',#397);
|
||||
#130=VERTEX_POINT('',#401);
|
||||
#131=VERTEX_POINT('',#403);
|
||||
#132=VERTEX_POINT('',#411);
|
||||
#133=VERTEX_POINT('',#413);
|
||||
#134=VERTEX_POINT('',#417);
|
||||
#135=VERTEX_POINT('',#420);
|
||||
#136=VERTEX_POINT('',#422);
|
||||
#137=EDGE_CURVE('',#116,#117,#64,.T.);
|
||||
#138=EDGE_CURVE('',#116,#118,#65,.T.);
|
||||
#139=EDGE_CURVE('',#119,#118,#66,.T.);
|
||||
#140=EDGE_CURVE('',#117,#119,#67,.T.);
|
||||
#141=EDGE_CURVE('',#117,#120,#68,.T.);
|
||||
#142=EDGE_CURVE('',#121,#119,#69,.T.);
|
||||
#143=EDGE_CURVE('',#120,#121,#70,.T.);
|
||||
#144=EDGE_CURVE('',#120,#122,#71,.T.);
|
||||
#145=EDGE_CURVE('',#123,#121,#72,.T.);
|
||||
#146=EDGE_CURVE('',#122,#123,#73,.T.);
|
||||
#147=EDGE_CURVE('',#122,#116,#74,.T.);
|
||||
#148=EDGE_CURVE('',#118,#123,#75,.T.);
|
||||
#149=EDGE_CURVE('',#124,#125,#76,.T.);
|
||||
#150=EDGE_CURVE('',#124,#126,#77,.T.);
|
||||
#151=EDGE_CURVE('',#127,#126,#78,.T.);
|
||||
#152=EDGE_CURVE('',#125,#127,#79,.T.);
|
||||
#153=EDGE_CURVE('',#125,#128,#80,.T.);
|
||||
#154=EDGE_CURVE('',#129,#127,#81,.T.);
|
||||
#155=EDGE_CURVE('',#128,#129,#82,.T.);
|
||||
#156=EDGE_CURVE('',#128,#130,#83,.T.);
|
||||
#157=EDGE_CURVE('',#131,#129,#84,.T.);
|
||||
#158=EDGE_CURVE('',#130,#131,#85,.T.);
|
||||
#159=EDGE_CURVE('',#130,#124,#86,.T.);
|
||||
#160=EDGE_CURVE('',#126,#131,#87,.T.);
|
||||
#161=EDGE_CURVE('',#132,#132,#18,.F.);
|
||||
#162=EDGE_CURVE('',#132,#133,#88,.T.);
|
||||
#163=EDGE_CURVE('',#133,#133,#19,.F.);
|
||||
#164=EDGE_CURVE('',#134,#134,#20,.T.);
|
||||
#165=EDGE_CURVE('',#135,#135,#21,.T.);
|
||||
#166=EDGE_CURVE('',#136,#135,#22,.T.);
|
||||
#167=EDGE_CURVE('',#135,#134,#89,.T.);
|
||||
#168=ORIENTED_EDGE('',*,*,#137,.F.);
|
||||
#169=ORIENTED_EDGE('',*,*,#138,.T.);
|
||||
#170=ORIENTED_EDGE('',*,*,#139,.F.);
|
||||
#171=ORIENTED_EDGE('',*,*,#140,.F.);
|
||||
#172=ORIENTED_EDGE('',*,*,#141,.F.);
|
||||
#173=ORIENTED_EDGE('',*,*,#140,.T.);
|
||||
#174=ORIENTED_EDGE('',*,*,#142,.F.);
|
||||
#175=ORIENTED_EDGE('',*,*,#143,.F.);
|
||||
#176=ORIENTED_EDGE('',*,*,#144,.F.);
|
||||
#177=ORIENTED_EDGE('',*,*,#143,.T.);
|
||||
#178=ORIENTED_EDGE('',*,*,#145,.F.);
|
||||
#179=ORIENTED_EDGE('',*,*,#146,.F.);
|
||||
#180=ORIENTED_EDGE('',*,*,#147,.F.);
|
||||
#181=ORIENTED_EDGE('',*,*,#146,.T.);
|
||||
#182=ORIENTED_EDGE('',*,*,#148,.F.);
|
||||
#183=ORIENTED_EDGE('',*,*,#138,.F.);
|
||||
#184=ORIENTED_EDGE('',*,*,#148,.T.);
|
||||
#185=ORIENTED_EDGE('',*,*,#145,.T.);
|
||||
#186=ORIENTED_EDGE('',*,*,#142,.T.);
|
||||
#187=ORIENTED_EDGE('',*,*,#139,.T.);
|
||||
#188=ORIENTED_EDGE('',*,*,#149,.F.);
|
||||
#189=ORIENTED_EDGE('',*,*,#150,.T.);
|
||||
#190=ORIENTED_EDGE('',*,*,#151,.F.);
|
||||
#191=ORIENTED_EDGE('',*,*,#152,.F.);
|
||||
#192=ORIENTED_EDGE('',*,*,#153,.F.);
|
||||
#193=ORIENTED_EDGE('',*,*,#152,.T.);
|
||||
#194=ORIENTED_EDGE('',*,*,#154,.F.);
|
||||
#195=ORIENTED_EDGE('',*,*,#155,.F.);
|
||||
#196=ORIENTED_EDGE('',*,*,#156,.F.);
|
||||
#197=ORIENTED_EDGE('',*,*,#155,.T.);
|
||||
#198=ORIENTED_EDGE('',*,*,#157,.F.);
|
||||
#199=ORIENTED_EDGE('',*,*,#158,.F.);
|
||||
#200=ORIENTED_EDGE('',*,*,#159,.F.);
|
||||
#201=ORIENTED_EDGE('',*,*,#158,.T.);
|
||||
#202=ORIENTED_EDGE('',*,*,#160,.F.);
|
||||
#203=ORIENTED_EDGE('',*,*,#150,.F.);
|
||||
#204=ORIENTED_EDGE('',*,*,#160,.T.);
|
||||
#205=ORIENTED_EDGE('',*,*,#157,.T.);
|
||||
#206=ORIENTED_EDGE('',*,*,#154,.T.);
|
||||
#207=ORIENTED_EDGE('',*,*,#151,.T.);
|
||||
#208=ORIENTED_EDGE('',*,*,#161,.F.);
|
||||
#209=ORIENTED_EDGE('',*,*,#162,.T.);
|
||||
#210=ORIENTED_EDGE('',*,*,#163,.T.);
|
||||
#211=ORIENTED_EDGE('',*,*,#162,.F.);
|
||||
#212=ORIENTED_EDGE('',*,*,#161,.T.);
|
||||
#213=ORIENTED_EDGE('',*,*,#164,.F.);
|
||||
#214=ORIENTED_EDGE('',*,*,#165,.T.);
|
||||
#215=ORIENTED_EDGE('',*,*,#166,.F.);
|
||||
#216=ORIENTED_EDGE('',*,*,#166,.T.);
|
||||
#217=ORIENTED_EDGE('',*,*,#165,.F.);
|
||||
#218=ORIENTED_EDGE('',*,*,#167,.T.);
|
||||
#219=ORIENTED_EDGE('',*,*,#164,.T.);
|
||||
#220=ORIENTED_EDGE('',*,*,#167,.F.);
|
||||
#221=ORIENTED_EDGE('',*,*,#163,.F.);
|
||||
#222=ORIENTED_EDGE('',*,*,#137,.T.);
|
||||
#223=ORIENTED_EDGE('',*,*,#141,.T.);
|
||||
#224=ORIENTED_EDGE('',*,*,#144,.T.);
|
||||
#225=ORIENTED_EDGE('',*,*,#147,.T.);
|
||||
#226=ORIENTED_EDGE('',*,*,#149,.T.);
|
||||
#227=ORIENTED_EDGE('',*,*,#153,.T.);
|
||||
#228=ORIENTED_EDGE('',*,*,#156,.T.);
|
||||
#229=ORIENTED_EDGE('',*,*,#159,.T.);
|
||||
#230=PLANE('',#271);
|
||||
#231=PLANE('',#272);
|
||||
#232=PLANE('',#273);
|
||||
#233=PLANE('',#274);
|
||||
#234=PLANE('',#275);
|
||||
#235=PLANE('',#276);
|
||||
#236=PLANE('',#277);
|
||||
#237=PLANE('',#278);
|
||||
#238=PLANE('',#279);
|
||||
#239=PLANE('',#280);
|
||||
#240=PLANE('',#284);
|
||||
#241=PLANE('',#290);
|
||||
#242=ADVANCED_FACE('',(#31),#230,.T.);
|
||||
#243=ADVANCED_FACE('',(#32),#231,.T.);
|
||||
#244=ADVANCED_FACE('',(#33),#232,.T.);
|
||||
#245=ADVANCED_FACE('',(#34),#233,.T.);
|
||||
#246=ADVANCED_FACE('',(#35),#234,.T.);
|
||||
#247=ADVANCED_FACE('',(#36),#235,.T.);
|
||||
#248=ADVANCED_FACE('',(#37),#236,.T.);
|
||||
#249=ADVANCED_FACE('',(#38),#237,.T.);
|
||||
#250=ADVANCED_FACE('',(#39),#238,.T.);
|
||||
#251=ADVANCED_FACE('',(#40),#239,.T.);
|
||||
#252=ADVANCED_FACE('',(#41),#23,.T.);
|
||||
#253=ADVANCED_FACE('',(#42,#15),#240,.T.);
|
||||
#254=ADVANCED_FACE('',(#43),#14,.T.);
|
||||
#255=ADVANCED_FACE('',(#44),#24,.T.);
|
||||
#256=ADVANCED_FACE('',(#45,#16,#17),#241,.F.);
|
||||
#257=CLOSED_SHELL('',(#242,#243,#244,#245,#246,#247,#248,#249,#250,#251,
|
||||
#252,#253,#254,#255,#256));
|
||||
#258=DERIVED_UNIT_ELEMENT(#260,1.);
|
||||
#259=DERIVED_UNIT_ELEMENT(#432,-3.);
|
||||
#260=(
|
||||
MASS_UNIT()
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT(.KILO.,.GRAM.)
|
||||
);
|
||||
#261=DERIVED_UNIT((#258,#259));
|
||||
#262=MEASURE_REPRESENTATION_ITEM('density measure',
|
||||
POSITIVE_RATIO_MEASURE(7850.),#261);
|
||||
#263=PROPERTY_DEFINITION_REPRESENTATION(#268,#265);
|
||||
#264=PROPERTY_DEFINITION_REPRESENTATION(#269,#266);
|
||||
#265=REPRESENTATION('material name',(#267),#429);
|
||||
#266=REPRESENTATION('density',(#262),#429);
|
||||
#267=DESCRIPTIVE_REPRESENTATION_ITEM('Stahl','Stahl');
|
||||
#268=PROPERTY_DEFINITION('material property','material name',#439);
|
||||
#269=PROPERTY_DEFINITION('material property','density of part',#439);
|
||||
#270=AXIS2_PLACEMENT_3D('placement',#359,#291,#292);
|
||||
#271=AXIS2_PLACEMENT_3D('',#360,#293,#294);
|
||||
#272=AXIS2_PLACEMENT_3D('',#369,#299,#300);
|
||||
#273=AXIS2_PLACEMENT_3D('',#375,#304,#305);
|
||||
#274=AXIS2_PLACEMENT_3D('',#381,#309,#310);
|
||||
#275=AXIS2_PLACEMENT_3D('',#384,#313,#314);
|
||||
#276=AXIS2_PLACEMENT_3D('',#385,#315,#316);
|
||||
#277=AXIS2_PLACEMENT_3D('',#394,#321,#322);
|
||||
#278=AXIS2_PLACEMENT_3D('',#400,#326,#327);
|
||||
#279=AXIS2_PLACEMENT_3D('',#406,#331,#332);
|
||||
#280=AXIS2_PLACEMENT_3D('',#409,#335,#336);
|
||||
#281=AXIS2_PLACEMENT_3D('',#410,#337,#338);
|
||||
#282=AXIS2_PLACEMENT_3D('',#412,#339,#340);
|
||||
#283=AXIS2_PLACEMENT_3D('',#415,#342,#343);
|
||||
#284=AXIS2_PLACEMENT_3D('',#416,#344,#345);
|
||||
#285=AXIS2_PLACEMENT_3D('',#418,#346,#347);
|
||||
#286=AXIS2_PLACEMENT_3D('',#419,#348,#349);
|
||||
#287=AXIS2_PLACEMENT_3D('',#421,#350,#351);
|
||||
#288=AXIS2_PLACEMENT_3D('',#423,#352,#353);
|
||||
#289=AXIS2_PLACEMENT_3D('',#424,#354,#355);
|
||||
#290=AXIS2_PLACEMENT_3D('',#426,#357,#358);
|
||||
#291=DIRECTION('axis',(0.,0.,1.));
|
||||
#292=DIRECTION('refdir',(1.,0.,0.));
|
||||
#293=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#294=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#295=DIRECTION('',(-1.,0.,0.));
|
||||
#296=DIRECTION('',(0.,0.,-1.));
|
||||
#297=DIRECTION('',(1.,0.,0.));
|
||||
#298=DIRECTION('',(0.,0.,-1.));
|
||||
#299=DIRECTION('center_axis',(-1.,0.,0.));
|
||||
#300=DIRECTION('ref_axis',(0.,1.,0.));
|
||||
#301=DIRECTION('',(0.,-1.,0.));
|
||||
#302=DIRECTION('',(0.,1.,0.));
|
||||
#303=DIRECTION('',(0.,0.,-1.));
|
||||
#304=DIRECTION('center_axis',(2.77555756156289E-16,-1.,0.));
|
||||
#305=DIRECTION('ref_axis',(-1.,-2.77555756156289E-16,0.));
|
||||
#306=DIRECTION('',(1.,2.77555756156289E-16,0.));
|
||||
#307=DIRECTION('',(-1.,-2.77555756156289E-16,0.));
|
||||
#308=DIRECTION('',(0.,0.,-1.));
|
||||
#309=DIRECTION('center_axis',(1.,-5.55111512312578E-16,0.));
|
||||
#310=DIRECTION('ref_axis',(-5.55111512312578E-16,-1.,0.));
|
||||
#311=DIRECTION('',(5.55111512312578E-16,1.,0.));
|
||||
#312=DIRECTION('',(-5.55111512312578E-16,-1.,0.));
|
||||
#313=DIRECTION('center_axis',(0.,0.,-1.));
|
||||
#314=DIRECTION('ref_axis',(-1.,0.,0.));
|
||||
#315=DIRECTION('center_axis',(-6.93889390390723E-17,1.,0.));
|
||||
#316=DIRECTION('ref_axis',(1.,6.93889390390723E-17,0.));
|
||||
#317=DIRECTION('',(-1.,-6.93889390390723E-17,0.));
|
||||
#318=DIRECTION('',(0.,0.,-1.));
|
||||
#319=DIRECTION('',(1.,6.93889390390723E-17,0.));
|
||||
#320=DIRECTION('',(0.,0.,-1.));
|
||||
#321=DIRECTION('center_axis',(-1.,0.,0.));
|
||||
#322=DIRECTION('ref_axis',(0.,1.,0.));
|
||||
#323=DIRECTION('',(0.,-1.,0.));
|
||||
#324=DIRECTION('',(0.,1.,0.));
|
||||
#325=DIRECTION('',(0.,0.,-1.));
|
||||
#326=DIRECTION('center_axis',(0.,-1.,0.));
|
||||
#327=DIRECTION('ref_axis',(-1.,0.,0.));
|
||||
#328=DIRECTION('',(1.,0.,0.));
|
||||
#329=DIRECTION('',(-1.,0.,0.));
|
||||
#330=DIRECTION('',(0.,0.,-1.));
|
||||
#331=DIRECTION('center_axis',(1.,0.,0.));
|
||||
#332=DIRECTION('ref_axis',(0.,-1.,0.));
|
||||
#333=DIRECTION('',(0.,1.,0.));
|
||||
#334=DIRECTION('',(0.,-1.,0.));
|
||||
#335=DIRECTION('center_axis',(0.,0.,-1.));
|
||||
#336=DIRECTION('ref_axis',(-1.,0.,0.));
|
||||
#337=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#338=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#339=DIRECTION('center_axis',(0.,0.,-1.));
|
||||
#340=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#341=DIRECTION('',(0.,0.,-1.));
|
||||
#342=DIRECTION('center_axis',(0.,0.,-1.));
|
||||
#343=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#344=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#345=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#346=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#347=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#348=DIRECTION('center_axis',(6.12323399573677E-17,0.,1.));
|
||||
#349=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#350=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#351=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#352=DIRECTION('center_axis',(1.22464679914735E-16,-1.,0.));
|
||||
#353=DIRECTION('ref_axis',(-1.,-1.22464679914735E-16,0.));
|
||||
#354=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#355=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#356=DIRECTION('',(0.,0.,-1.));
|
||||
#357=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#358=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#359=CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#360=CARTESIAN_POINT('Origin',(1.02,0.25,0.));
|
||||
#361=CARTESIAN_POINT('',(1.52,0.25,0.));
|
||||
#362=CARTESIAN_POINT('',(1.02,0.25,0.));
|
||||
#363=CARTESIAN_POINT('',(0.51,0.25,0.));
|
||||
#364=CARTESIAN_POINT('',(1.52,0.25,-5.));
|
||||
#365=CARTESIAN_POINT('',(1.52,0.25,0.));
|
||||
#366=CARTESIAN_POINT('',(1.02,0.25,-5.));
|
||||
#367=CARTESIAN_POINT('',(1.02,0.25,-5.));
|
||||
#368=CARTESIAN_POINT('',(1.02,0.25,0.));
|
||||
#369=CARTESIAN_POINT('Origin',(1.02,-0.25,0.));
|
||||
#370=CARTESIAN_POINT('',(1.02,-0.25,0.));
|
||||
#371=CARTESIAN_POINT('',(1.02,-0.125,0.));
|
||||
#372=CARTESIAN_POINT('',(1.02,-0.25,-5.));
|
||||
#373=CARTESIAN_POINT('',(1.02,-0.25,-5.));
|
||||
#374=CARTESIAN_POINT('',(1.02,-0.25,0.));
|
||||
#375=CARTESIAN_POINT('Origin',(1.52,-0.25,0.));
|
||||
#376=CARTESIAN_POINT('',(1.52,-0.25,0.));
|
||||
#377=CARTESIAN_POINT('',(0.76,-0.25,0.));
|
||||
#378=CARTESIAN_POINT('',(1.52,-0.25,-5.));
|
||||
#379=CARTESIAN_POINT('',(1.52,-0.25,-5.));
|
||||
#380=CARTESIAN_POINT('',(1.52,-0.25,0.));
|
||||
#381=CARTESIAN_POINT('Origin',(1.52,0.25,0.));
|
||||
#382=CARTESIAN_POINT('',(1.52,0.125,0.));
|
||||
#383=CARTESIAN_POINT('',(1.52,0.25,-5.));
|
||||
#384=CARTESIAN_POINT('Origin',(1.27,2.08166817117217E-16,-5.));
|
||||
#385=CARTESIAN_POINT('Origin',(-1.52,0.25,0.));
|
||||
#386=CARTESIAN_POINT('',(-1.02,0.25,0.));
|
||||
#387=CARTESIAN_POINT('',(-1.52,0.25,0.));
|
||||
#388=CARTESIAN_POINT('',(-0.76,0.25,0.));
|
||||
#389=CARTESIAN_POINT('',(-1.02,0.25,-5.));
|
||||
#390=CARTESIAN_POINT('',(-1.02,0.25,0.));
|
||||
#391=CARTESIAN_POINT('',(-1.52,0.25,-5.));
|
||||
#392=CARTESIAN_POINT('',(-1.52,0.25,-5.));
|
||||
#393=CARTESIAN_POINT('',(-1.52,0.25,0.));
|
||||
#394=CARTESIAN_POINT('Origin',(-1.52,-0.25,0.));
|
||||
#395=CARTESIAN_POINT('',(-1.52,-0.25,0.));
|
||||
#396=CARTESIAN_POINT('',(-1.52,-0.125,0.));
|
||||
#397=CARTESIAN_POINT('',(-1.52,-0.25,-5.));
|
||||
#398=CARTESIAN_POINT('',(-1.52,-0.25,-5.));
|
||||
#399=CARTESIAN_POINT('',(-1.52,-0.25,0.));
|
||||
#400=CARTESIAN_POINT('Origin',(-1.02,-0.25,0.));
|
||||
#401=CARTESIAN_POINT('',(-1.02,-0.25,0.));
|
||||
#402=CARTESIAN_POINT('',(-0.51,-0.25,0.));
|
||||
#403=CARTESIAN_POINT('',(-1.02,-0.25,-5.));
|
||||
#404=CARTESIAN_POINT('',(-1.02,-0.25,-5.));
|
||||
#405=CARTESIAN_POINT('',(-1.02,-0.25,0.));
|
||||
#406=CARTESIAN_POINT('Origin',(-1.02,0.25,0.));
|
||||
#407=CARTESIAN_POINT('',(-1.02,0.125,0.));
|
||||
#408=CARTESIAN_POINT('',(-1.02,0.25,-5.));
|
||||
#409=CARTESIAN_POINT('Origin',(-1.27,-2.42861286636753E-16,-5.));
|
||||
#410=CARTESIAN_POINT('Origin',(0.,0.,0.));
|
||||
#411=CARTESIAN_POINT('',(-3.,3.67394039744206E-16,1.));
|
||||
#412=CARTESIAN_POINT('Origin',(0.,0.,1.));
|
||||
#413=CARTESIAN_POINT('',(-3.,3.67394039744206E-16,0.));
|
||||
#414=CARTESIAN_POINT('',(-3.,-3.67394039744206E-16,0.));
|
||||
#415=CARTESIAN_POINT('Origin',(0.,0.,0.));
|
||||
#416=CARTESIAN_POINT('Origin',(0.,0.,1.));
|
||||
#417=CARTESIAN_POINT('',(-2.5,-3.06161699786838E-16,1.));
|
||||
#418=CARTESIAN_POINT('Origin',(0.,0.,1.));
|
||||
#419=CARTESIAN_POINT('Origin',(0.,0.,6.5));
|
||||
#420=CARTESIAN_POINT('',(-2.5,-3.06161699786838E-16,6.5));
|
||||
#421=CARTESIAN_POINT('Origin',(0.,0.,6.5));
|
||||
#422=CARTESIAN_POINT('',(-1.53080849893419E-16,-1.87469972832732E-32,9.));
|
||||
#423=CARTESIAN_POINT('Origin',(0.,0.,6.5));
|
||||
#424=CARTESIAN_POINT('Origin',(0.,0.,0.));
|
||||
#425=CARTESIAN_POINT('',(-2.5,-3.06161699786838E-16,0.));
|
||||
#426=CARTESIAN_POINT('Origin',(0.,0.,0.));
|
||||
#427=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#431,
|
||||
'DISTANCE_ACCURACY_VALUE',
|
||||
'Maximum model space distance between geometric entities at asserted c
|
||||
onnectivities');
|
||||
#428=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#431,
|
||||
'DISTANCE_ACCURACY_VALUE',
|
||||
'Maximum model space distance between geometric entities at asserted c
|
||||
onnectivities');
|
||||
#429=(
|
||||
GEOMETRIC_REPRESENTATION_CONTEXT(3)
|
||||
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#427))
|
||||
GLOBAL_UNIT_ASSIGNED_CONTEXT((#431,#433,#434))
|
||||
REPRESENTATION_CONTEXT('','3D')
|
||||
);
|
||||
#430=(
|
||||
GEOMETRIC_REPRESENTATION_CONTEXT(3)
|
||||
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#428))
|
||||
GLOBAL_UNIT_ASSIGNED_CONTEXT((#431,#433,#434))
|
||||
REPRESENTATION_CONTEXT('','3D')
|
||||
);
|
||||
#431=(
|
||||
LENGTH_UNIT()
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT(.MILLI.,.METRE.)
|
||||
);
|
||||
#432=(
|
||||
LENGTH_UNIT()
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT($,.METRE.)
|
||||
);
|
||||
#433=(
|
||||
NAMED_UNIT(*)
|
||||
PLANE_ANGLE_UNIT()
|
||||
SI_UNIT($,.RADIAN.)
|
||||
);
|
||||
#434=(
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT($,.STERADIAN.)
|
||||
SOLID_ANGLE_UNIT()
|
||||
);
|
||||
#435=SHAPE_DEFINITION_REPRESENTATION(#436,#437);
|
||||
#436=PRODUCT_DEFINITION_SHAPE('',$,#439);
|
||||
#437=SHAPE_REPRESENTATION('',(#270),#429);
|
||||
#438=PRODUCT_DEFINITION_CONTEXT('part definition',#443,'design');
|
||||
#439=PRODUCT_DEFINITION('Side Mount LED','Side Mount LED v1',#440,#438);
|
||||
#440=PRODUCT_DEFINITION_FORMATION('',$,#445);
|
||||
#441=PRODUCT_RELATED_PRODUCT_CATEGORY('Side Mount LED v1',
|
||||
'Side Mount LED v1',(#445));
|
||||
#442=APPLICATION_PROTOCOL_DEFINITION('international standard',
|
||||
'automotive_design',2009,#443);
|
||||
#443=APPLICATION_CONTEXT(
|
||||
'Core Data for Automotive Mechanical Design Process');
|
||||
#444=PRODUCT_CONTEXT('part definition',#443,'mechanical');
|
||||
#445=PRODUCT('Side Mount LED','Side Mount LED v1',$,(#444));
|
||||
#446=PRESENTATION_STYLE_ASSIGNMENT((#448));
|
||||
#447=PRESENTATION_STYLE_ASSIGNMENT((#449));
|
||||
#448=SURFACE_STYLE_USAGE(.BOTH.,#450);
|
||||
#449=SURFACE_STYLE_USAGE(.BOTH.,#451);
|
||||
#450=SURFACE_SIDE_STYLE('',(#452));
|
||||
#451=SURFACE_SIDE_STYLE('',(#453));
|
||||
#452=SURFACE_STYLE_FILL_AREA(#454);
|
||||
#453=SURFACE_STYLE_FILL_AREA(#455);
|
||||
#454=FILL_AREA_STYLE('Stahl - satiniert',(#456));
|
||||
#455=FILL_AREA_STYLE('Acryl (klar)',(#457));
|
||||
#456=FILL_AREA_STYLE_COLOUR('Stahl - satiniert',#458);
|
||||
#457=FILL_AREA_STYLE_COLOUR('Acryl (klar)',#459);
|
||||
#458=COLOUR_RGB('Stahl - satiniert',0.627450980392157,0.627450980392157,
|
||||
0.627450980392157);
|
||||
#459=COLOUR_RGB('Acryl (klar)',0.964705882352941,0.964705882352941,0.952941176470588);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
512
PCB/project_libraries/3D-models/Walsin RFANT5220110A2T v1.step
Normal file
512
PCB/project_libraries/3D-models/Walsin RFANT5220110A2T v1.step
Normal file
|
@ -0,0 +1,512 @@
|
|||
ISO-10303-21;
|
||||
HEADER;
|
||||
/* Generated by software containing ST-Developer
|
||||
* from STEP Tools, Inc. (www.steptools.com)
|
||||
*/
|
||||
|
||||
FILE_DESCRIPTION(
|
||||
/* description */ (''),
|
||||
/* implementation_level */ '2;1');
|
||||
|
||||
FILE_NAME(
|
||||
/* name */ 'Walsin RFANT5220110A2T v1.step',
|
||||
/* time_stamp */ '2023-01-20T22:36:29+01:00',
|
||||
/* author */ (''),
|
||||
/* organization */ (''),
|
||||
/* preprocessor_version */ 'ST-DEVELOPER v19.2',
|
||||
/* originating_system */ 'Autodesk Translation Framework v11.17.0.187',
|
||||
|
||||
/* authorisation */ '');
|
||||
|
||||
FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }'));
|
||||
ENDSEC;
|
||||
|
||||
DATA;
|
||||
#10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#232,#233,
|
||||
#234,#235,#236,#237),#413);
|
||||
#11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#420,#12);
|
||||
#12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#13),#412);
|
||||
#13=MANIFOLD_SOLID_BREP('K\X\F6rper1',#253);
|
||||
#14=FACE_OUTER_BOUND('',#29,.T.);
|
||||
#15=FACE_OUTER_BOUND('',#30,.T.);
|
||||
#16=FACE_OUTER_BOUND('',#31,.T.);
|
||||
#17=FACE_OUTER_BOUND('',#32,.T.);
|
||||
#18=FACE_OUTER_BOUND('',#33,.T.);
|
||||
#19=FACE_OUTER_BOUND('',#34,.T.);
|
||||
#20=FACE_OUTER_BOUND('',#35,.T.);
|
||||
#21=FACE_OUTER_BOUND('',#36,.T.);
|
||||
#22=FACE_OUTER_BOUND('',#37,.T.);
|
||||
#23=FACE_OUTER_BOUND('',#38,.T.);
|
||||
#24=FACE_OUTER_BOUND('',#39,.T.);
|
||||
#25=FACE_OUTER_BOUND('',#40,.T.);
|
||||
#26=FACE_OUTER_BOUND('',#41,.T.);
|
||||
#27=FACE_OUTER_BOUND('',#42,.T.);
|
||||
#28=FACE_OUTER_BOUND('',#43,.T.);
|
||||
#29=EDGE_LOOP('',(#155,#156,#157,#158));
|
||||
#30=EDGE_LOOP('',(#159,#160,#161,#162));
|
||||
#31=EDGE_LOOP('',(#163,#164,#165,#166));
|
||||
#32=EDGE_LOOP('',(#167,#168,#169,#170));
|
||||
#33=EDGE_LOOP('',(#171,#172,#173,#174,#175));
|
||||
#34=EDGE_LOOP('',(#176,#177,#178,#179));
|
||||
#35=EDGE_LOOP('',(#180,#181,#182,#183));
|
||||
#36=EDGE_LOOP('',(#184,#185,#186,#187));
|
||||
#37=EDGE_LOOP('',(#188,#189,#190,#191));
|
||||
#38=EDGE_LOOP('',(#192,#193,#194,#195));
|
||||
#39=EDGE_LOOP('',(#196,#197,#198,#199));
|
||||
#40=EDGE_LOOP('',(#200,#201,#202,#203,#204));
|
||||
#41=EDGE_LOOP('',(#205,#206,#207,#208));
|
||||
#42=EDGE_LOOP('',(#209,#210,#211,#212));
|
||||
#43=EDGE_LOOP('',(#213,#214,#215,#216));
|
||||
#44=LINE('',#349,#75);
|
||||
#45=LINE('',#351,#76);
|
||||
#46=LINE('',#353,#77);
|
||||
#47=LINE('',#354,#78);
|
||||
#48=LINE('',#357,#79);
|
||||
#49=LINE('',#359,#80);
|
||||
#50=LINE('',#360,#81);
|
||||
#51=LINE('',#363,#82);
|
||||
#52=LINE('',#365,#83);
|
||||
#53=LINE('',#366,#84);
|
||||
#54=LINE('',#369,#85);
|
||||
#55=LINE('',#371,#86);
|
||||
#56=LINE('',#372,#87);
|
||||
#57=LINE('',#375,#88);
|
||||
#58=LINE('',#376,#89);
|
||||
#59=LINE('',#379,#90);
|
||||
#60=LINE('',#381,#91);
|
||||
#61=LINE('',#382,#92);
|
||||
#62=LINE('',#385,#93);
|
||||
#63=LINE('',#387,#94);
|
||||
#64=LINE('',#389,#95);
|
||||
#65=LINE('',#390,#96);
|
||||
#66=LINE('',#392,#97);
|
||||
#67=LINE('',#393,#98);
|
||||
#68=LINE('',#395,#99);
|
||||
#69=LINE('',#397,#100);
|
||||
#70=LINE('',#398,#101);
|
||||
#71=LINE('',#401,#102);
|
||||
#72=LINE('',#402,#103);
|
||||
#73=LINE('',#405,#104);
|
||||
#74=LINE('',#407,#105);
|
||||
#75=VECTOR('',#286,10.);
|
||||
#76=VECTOR('',#287,10.);
|
||||
#77=VECTOR('',#288,10.);
|
||||
#78=VECTOR('',#289,10.);
|
||||
#79=VECTOR('',#292,10.);
|
||||
#80=VECTOR('',#293,10.);
|
||||
#81=VECTOR('',#294,10.);
|
||||
#82=VECTOR('',#297,10.);
|
||||
#83=VECTOR('',#298,10.);
|
||||
#84=VECTOR('',#299,10.);
|
||||
#85=VECTOR('',#302,10.);
|
||||
#86=VECTOR('',#303,10.);
|
||||
#87=VECTOR('',#304,10.);
|
||||
#88=VECTOR('',#307,10.);
|
||||
#89=VECTOR('',#308,10.);
|
||||
#90=VECTOR('',#311,10.);
|
||||
#91=VECTOR('',#312,10.);
|
||||
#92=VECTOR('',#313,10.);
|
||||
#93=VECTOR('',#316,10.);
|
||||
#94=VECTOR('',#317,10.);
|
||||
#95=VECTOR('',#318,10.);
|
||||
#96=VECTOR('',#319,10.);
|
||||
#97=VECTOR('',#322,10.);
|
||||
#98=VECTOR('',#323,10.);
|
||||
#99=VECTOR('',#326,10.);
|
||||
#100=VECTOR('',#327,10.);
|
||||
#101=VECTOR('',#328,10.);
|
||||
#102=VECTOR('',#331,10.);
|
||||
#103=VECTOR('',#332,10.);
|
||||
#104=VECTOR('',#337,10.);
|
||||
#105=VECTOR('',#340,10.);
|
||||
#106=VERTEX_POINT('',#347);
|
||||
#107=VERTEX_POINT('',#348);
|
||||
#108=VERTEX_POINT('',#350);
|
||||
#109=VERTEX_POINT('',#352);
|
||||
#110=VERTEX_POINT('',#356);
|
||||
#111=VERTEX_POINT('',#358);
|
||||
#112=VERTEX_POINT('',#362);
|
||||
#113=VERTEX_POINT('',#364);
|
||||
#114=VERTEX_POINT('',#368);
|
||||
#115=VERTEX_POINT('',#370);
|
||||
#116=VERTEX_POINT('',#374);
|
||||
#117=VERTEX_POINT('',#378);
|
||||
#118=VERTEX_POINT('',#380);
|
||||
#119=VERTEX_POINT('',#384);
|
||||
#120=VERTEX_POINT('',#386);
|
||||
#121=VERTEX_POINT('',#388);
|
||||
#122=VERTEX_POINT('',#396);
|
||||
#123=VERTEX_POINT('',#400);
|
||||
#124=EDGE_CURVE('',#106,#107,#44,.T.);
|
||||
#125=EDGE_CURVE('',#106,#108,#45,.T.);
|
||||
#126=EDGE_CURVE('',#108,#109,#46,.T.);
|
||||
#127=EDGE_CURVE('',#109,#107,#47,.T.);
|
||||
#128=EDGE_CURVE('',#108,#110,#48,.T.);
|
||||
#129=EDGE_CURVE('',#110,#111,#49,.T.);
|
||||
#130=EDGE_CURVE('',#111,#109,#50,.T.);
|
||||
#131=EDGE_CURVE('',#107,#112,#51,.T.);
|
||||
#132=EDGE_CURVE('',#112,#113,#52,.T.);
|
||||
#133=EDGE_CURVE('',#113,#106,#53,.T.);
|
||||
#134=EDGE_CURVE('',#109,#114,#54,.T.);
|
||||
#135=EDGE_CURVE('',#115,#111,#55,.T.);
|
||||
#136=EDGE_CURVE('',#114,#115,#56,.T.);
|
||||
#137=EDGE_CURVE('',#116,#112,#57,.T.);
|
||||
#138=EDGE_CURVE('',#116,#114,#58,.T.);
|
||||
#139=EDGE_CURVE('',#114,#117,#59,.T.);
|
||||
#140=EDGE_CURVE('',#115,#118,#60,.T.);
|
||||
#141=EDGE_CURVE('',#118,#117,#61,.T.);
|
||||
#142=EDGE_CURVE('',#119,#116,#62,.T.);
|
||||
#143=EDGE_CURVE('',#119,#120,#63,.T.);
|
||||
#144=EDGE_CURVE('',#120,#121,#64,.T.);
|
||||
#145=EDGE_CURVE('',#121,#116,#65,.T.);
|
||||
#146=EDGE_CURVE('',#117,#108,#66,.T.);
|
||||
#147=EDGE_CURVE('',#118,#110,#67,.T.);
|
||||
#148=EDGE_CURVE('',#113,#119,#68,.T.);
|
||||
#149=EDGE_CURVE('',#122,#113,#69,.T.);
|
||||
#150=EDGE_CURVE('',#120,#122,#70,.T.);
|
||||
#151=EDGE_CURVE('',#121,#123,#71,.T.);
|
||||
#152=EDGE_CURVE('',#112,#123,#72,.T.);
|
||||
#153=EDGE_CURVE('',#117,#119,#73,.T.);
|
||||
#154=EDGE_CURVE('',#123,#122,#74,.T.);
|
||||
#155=ORIENTED_EDGE('',*,*,#124,.F.);
|
||||
#156=ORIENTED_EDGE('',*,*,#125,.T.);
|
||||
#157=ORIENTED_EDGE('',*,*,#126,.T.);
|
||||
#158=ORIENTED_EDGE('',*,*,#127,.T.);
|
||||
#159=ORIENTED_EDGE('',*,*,#126,.F.);
|
||||
#160=ORIENTED_EDGE('',*,*,#128,.T.);
|
||||
#161=ORIENTED_EDGE('',*,*,#129,.T.);
|
||||
#162=ORIENTED_EDGE('',*,*,#130,.T.);
|
||||
#163=ORIENTED_EDGE('',*,*,#124,.T.);
|
||||
#164=ORIENTED_EDGE('',*,*,#131,.T.);
|
||||
#165=ORIENTED_EDGE('',*,*,#132,.T.);
|
||||
#166=ORIENTED_EDGE('',*,*,#133,.T.);
|
||||
#167=ORIENTED_EDGE('',*,*,#134,.F.);
|
||||
#168=ORIENTED_EDGE('',*,*,#130,.F.);
|
||||
#169=ORIENTED_EDGE('',*,*,#135,.F.);
|
||||
#170=ORIENTED_EDGE('',*,*,#136,.F.);
|
||||
#171=ORIENTED_EDGE('',*,*,#137,.T.);
|
||||
#172=ORIENTED_EDGE('',*,*,#131,.F.);
|
||||
#173=ORIENTED_EDGE('',*,*,#127,.F.);
|
||||
#174=ORIENTED_EDGE('',*,*,#134,.T.);
|
||||
#175=ORIENTED_EDGE('',*,*,#138,.F.);
|
||||
#176=ORIENTED_EDGE('',*,*,#139,.F.);
|
||||
#177=ORIENTED_EDGE('',*,*,#136,.T.);
|
||||
#178=ORIENTED_EDGE('',*,*,#140,.T.);
|
||||
#179=ORIENTED_EDGE('',*,*,#141,.T.);
|
||||
#180=ORIENTED_EDGE('',*,*,#142,.F.);
|
||||
#181=ORIENTED_EDGE('',*,*,#143,.T.);
|
||||
#182=ORIENTED_EDGE('',*,*,#144,.T.);
|
||||
#183=ORIENTED_EDGE('',*,*,#145,.T.);
|
||||
#184=ORIENTED_EDGE('',*,*,#146,.F.);
|
||||
#185=ORIENTED_EDGE('',*,*,#141,.F.);
|
||||
#186=ORIENTED_EDGE('',*,*,#147,.T.);
|
||||
#187=ORIENTED_EDGE('',*,*,#128,.F.);
|
||||
#188=ORIENTED_EDGE('',*,*,#148,.F.);
|
||||
#189=ORIENTED_EDGE('',*,*,#149,.F.);
|
||||
#190=ORIENTED_EDGE('',*,*,#150,.F.);
|
||||
#191=ORIENTED_EDGE('',*,*,#143,.F.);
|
||||
#192=ORIENTED_EDGE('',*,*,#137,.F.);
|
||||
#193=ORIENTED_EDGE('',*,*,#145,.F.);
|
||||
#194=ORIENTED_EDGE('',*,*,#151,.T.);
|
||||
#195=ORIENTED_EDGE('',*,*,#152,.F.);
|
||||
#196=ORIENTED_EDGE('',*,*,#140,.F.);
|
||||
#197=ORIENTED_EDGE('',*,*,#135,.T.);
|
||||
#198=ORIENTED_EDGE('',*,*,#129,.F.);
|
||||
#199=ORIENTED_EDGE('',*,*,#147,.F.);
|
||||
#200=ORIENTED_EDGE('',*,*,#148,.T.);
|
||||
#201=ORIENTED_EDGE('',*,*,#153,.F.);
|
||||
#202=ORIENTED_EDGE('',*,*,#146,.T.);
|
||||
#203=ORIENTED_EDGE('',*,*,#125,.F.);
|
||||
#204=ORIENTED_EDGE('',*,*,#133,.F.);
|
||||
#205=ORIENTED_EDGE('',*,*,#144,.F.);
|
||||
#206=ORIENTED_EDGE('',*,*,#150,.T.);
|
||||
#207=ORIENTED_EDGE('',*,*,#154,.F.);
|
||||
#208=ORIENTED_EDGE('',*,*,#151,.F.);
|
||||
#209=ORIENTED_EDGE('',*,*,#132,.F.);
|
||||
#210=ORIENTED_EDGE('',*,*,#152,.T.);
|
||||
#211=ORIENTED_EDGE('',*,*,#154,.T.);
|
||||
#212=ORIENTED_EDGE('',*,*,#149,.T.);
|
||||
#213=ORIENTED_EDGE('',*,*,#142,.T.);
|
||||
#214=ORIENTED_EDGE('',*,*,#138,.T.);
|
||||
#215=ORIENTED_EDGE('',*,*,#139,.T.);
|
||||
#216=ORIENTED_EDGE('',*,*,#153,.T.);
|
||||
#217=PLANE('',#267);
|
||||
#218=PLANE('',#268);
|
||||
#219=PLANE('',#269);
|
||||
#220=PLANE('',#270);
|
||||
#221=PLANE('',#271);
|
||||
#222=PLANE('',#272);
|
||||
#223=PLANE('',#273);
|
||||
#224=PLANE('',#274);
|
||||
#225=PLANE('',#275);
|
||||
#226=PLANE('',#276);
|
||||
#227=PLANE('',#277);
|
||||
#228=PLANE('',#278);
|
||||
#229=PLANE('',#279);
|
||||
#230=PLANE('',#280);
|
||||
#231=PLANE('',#281);
|
||||
#232=STYLED_ITEM('',(#430),#238);
|
||||
#233=STYLED_ITEM('',(#431),#240);
|
||||
#234=STYLED_ITEM('',(#431),#242);
|
||||
#235=STYLED_ITEM('',(#431),#249);
|
||||
#236=STYLED_ITEM('',(#431),#252);
|
||||
#237=STYLED_ITEM('',(#429),#13);
|
||||
#238=ADVANCED_FACE('',(#14),#217,.T.);
|
||||
#239=ADVANCED_FACE('',(#15),#218,.T.);
|
||||
#240=ADVANCED_FACE('',(#16),#219,.T.);
|
||||
#241=ADVANCED_FACE('',(#17),#220,.T.);
|
||||
#242=ADVANCED_FACE('',(#18),#221,.T.);
|
||||
#243=ADVANCED_FACE('',(#19),#222,.F.);
|
||||
#244=ADVANCED_FACE('',(#20),#223,.F.);
|
||||
#245=ADVANCED_FACE('',(#21),#224,.T.);
|
||||
#246=ADVANCED_FACE('',(#22),#225,.T.);
|
||||
#247=ADVANCED_FACE('',(#23),#226,.T.);
|
||||
#248=ADVANCED_FACE('',(#24),#227,.T.);
|
||||
#249=ADVANCED_FACE('',(#25),#228,.T.);
|
||||
#250=ADVANCED_FACE('',(#26),#229,.T.);
|
||||
#251=ADVANCED_FACE('',(#27),#230,.T.);
|
||||
#252=ADVANCED_FACE('',(#28),#231,.F.);
|
||||
#253=CLOSED_SHELL('',(#238,#239,#240,#241,#242,#243,#244,#245,#246,#247,
|
||||
#248,#249,#250,#251,#252));
|
||||
#254=DERIVED_UNIT_ELEMENT(#256,1.);
|
||||
#255=DERIVED_UNIT_ELEMENT(#415,-3.);
|
||||
#256=(
|
||||
MASS_UNIT()
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT(.KILO.,.GRAM.)
|
||||
);
|
||||
#257=DERIVED_UNIT((#254,#255));
|
||||
#258=MEASURE_REPRESENTATION_ITEM('density measure',
|
||||
POSITIVE_RATIO_MEASURE(7850.),#257);
|
||||
#259=PROPERTY_DEFINITION_REPRESENTATION(#264,#261);
|
||||
#260=PROPERTY_DEFINITION_REPRESENTATION(#265,#262);
|
||||
#261=REPRESENTATION('material name',(#263),#412);
|
||||
#262=REPRESENTATION('density',(#258),#412);
|
||||
#263=DESCRIPTIVE_REPRESENTATION_ITEM('Stahl','Stahl');
|
||||
#264=PROPERTY_DEFINITION('material property','material name',#422);
|
||||
#265=PROPERTY_DEFINITION('material property','density of part',#422);
|
||||
#266=AXIS2_PLACEMENT_3D('placement',#345,#282,#283);
|
||||
#267=AXIS2_PLACEMENT_3D('',#346,#284,#285);
|
||||
#268=AXIS2_PLACEMENT_3D('',#355,#290,#291);
|
||||
#269=AXIS2_PLACEMENT_3D('',#361,#295,#296);
|
||||
#270=AXIS2_PLACEMENT_3D('',#367,#300,#301);
|
||||
#271=AXIS2_PLACEMENT_3D('',#373,#305,#306);
|
||||
#272=AXIS2_PLACEMENT_3D('',#377,#309,#310);
|
||||
#273=AXIS2_PLACEMENT_3D('',#383,#314,#315);
|
||||
#274=AXIS2_PLACEMENT_3D('',#391,#320,#321);
|
||||
#275=AXIS2_PLACEMENT_3D('',#394,#324,#325);
|
||||
#276=AXIS2_PLACEMENT_3D('',#399,#329,#330);
|
||||
#277=AXIS2_PLACEMENT_3D('',#403,#333,#334);
|
||||
#278=AXIS2_PLACEMENT_3D('',#404,#335,#336);
|
||||
#279=AXIS2_PLACEMENT_3D('',#406,#338,#339);
|
||||
#280=AXIS2_PLACEMENT_3D('',#408,#341,#342);
|
||||
#281=AXIS2_PLACEMENT_3D('',#409,#343,#344);
|
||||
#282=DIRECTION('axis',(0.,0.,1.));
|
||||
#283=DIRECTION('refdir',(1.,0.,0.));
|
||||
#284=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#285=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#286=DIRECTION('',(1.,0.,1.38777878078145E-16));
|
||||
#287=DIRECTION('',(0.,0.,1.));
|
||||
#288=DIRECTION('',(1.,0.,4.16333643540216E-16));
|
||||
#289=DIRECTION('',(0.,0.,-1.));
|
||||
#290=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#291=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#292=DIRECTION('',(0.,0.,1.));
|
||||
#293=DIRECTION('',(1.,0.,0.));
|
||||
#294=DIRECTION('',(0.,0.,-1.));
|
||||
#295=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#296=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#297=DIRECTION('',(0.,0.,-1.));
|
||||
#298=DIRECTION('',(-1.,0.,0.));
|
||||
#299=DIRECTION('',(0.,0.,1.));
|
||||
#300=DIRECTION('center_axis',(1.,0.,0.));
|
||||
#301=DIRECTION('ref_axis',(0.,0.,-1.));
|
||||
#302=DIRECTION('',(0.,-1.,0.));
|
||||
#303=DIRECTION('',(0.,1.,0.));
|
||||
#304=DIRECTION('',(0.,0.,1.));
|
||||
#305=DIRECTION('center_axis',(1.,0.,0.));
|
||||
#306=DIRECTION('ref_axis',(0.,0.,-1.));
|
||||
#307=DIRECTION('',(0.,1.,0.));
|
||||
#308=DIRECTION('',(0.,0.,1.));
|
||||
#309=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#310=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#311=DIRECTION('',(-1.,0.,-4.16333643540216E-16));
|
||||
#312=DIRECTION('',(-1.,0.,0.));
|
||||
#313=DIRECTION('',(0.,0.,-1.));
|
||||
#314=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#315=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#316=DIRECTION('',(1.,0.,0.));
|
||||
#317=DIRECTION('',(0.,0.,-1.));
|
||||
#318=DIRECTION('',(1.,0.,2.77555756156289E-16));
|
||||
#319=DIRECTION('',(0.,0.,1.));
|
||||
#320=DIRECTION('center_axis',(-1.,0.,0.));
|
||||
#321=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#322=DIRECTION('',(0.,1.,0.));
|
||||
#323=DIRECTION('',(0.,1.,0.));
|
||||
#324=DIRECTION('center_axis',(-1.,0.,0.));
|
||||
#325=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#326=DIRECTION('',(0.,-1.,0.));
|
||||
#327=DIRECTION('',(0.,0.,1.));
|
||||
#328=DIRECTION('',(0.,1.,0.));
|
||||
#329=DIRECTION('center_axis',(1.,0.,0.));
|
||||
#330=DIRECTION('ref_axis',(0.,0.,-1.));
|
||||
#331=DIRECTION('',(0.,1.,0.));
|
||||
#332=DIRECTION('',(0.,0.,-1.));
|
||||
#333=DIRECTION('center_axis',(0.,0.,1.));
|
||||
#334=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#335=DIRECTION('center_axis',(-1.,0.,0.));
|
||||
#336=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#337=DIRECTION('',(0.,0.,-1.));
|
||||
#338=DIRECTION('center_axis',(2.77555756156289E-16,0.,-1.));
|
||||
#339=DIRECTION('ref_axis',(-1.,0.,-2.77555756156289E-16));
|
||||
#340=DIRECTION('',(-1.,0.,-2.77555756156289E-16));
|
||||
#341=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#342=DIRECTION('ref_axis',(0.,0.,1.));
|
||||
#343=DIRECTION('center_axis',(0.,1.,0.));
|
||||
#344=DIRECTION('ref_axis',(1.,0.,0.));
|
||||
#345=CARTESIAN_POINT('',(0.,0.,0.));
|
||||
#346=CARTESIAN_POINT('Origin',(1.38777878078145E-16,1.15,5.55111512312578E-16));
|
||||
#347=CARTESIAN_POINT('',(-1.,1.15,0.800000000000001));
|
||||
#348=CARTESIAN_POINT('',(1.,1.15,0.800000000000001));
|
||||
#349=CARTESIAN_POINT('',(2.77555756156289E-17,1.15,0.800000000000001));
|
||||
#350=CARTESIAN_POINT('',(-1.,1.15,2.2));
|
||||
#351=CARTESIAN_POINT('',(-1.,1.15,2.6));
|
||||
#352=CARTESIAN_POINT('',(1.,1.15,2.2));
|
||||
#353=CARTESIAN_POINT('',(0.5,1.15,2.2));
|
||||
#354=CARTESIAN_POINT('',(1.,1.15,-2.6));
|
||||
#355=CARTESIAN_POINT('Origin',(1.38777878078145E-16,1.15,5.55111512312578E-16));
|
||||
#356=CARTESIAN_POINT('',(-1.,1.15,2.6));
|
||||
#357=CARTESIAN_POINT('',(-1.,1.15,2.6));
|
||||
#358=CARTESIAN_POINT('',(1.,1.15,2.6));
|
||||
#359=CARTESIAN_POINT('',(1.,1.15,2.6));
|
||||
#360=CARTESIAN_POINT('',(1.,1.15,-2.6));
|
||||
#361=CARTESIAN_POINT('Origin',(1.38777878078145E-16,1.15,5.55111512312578E-16));
|
||||
#362=CARTESIAN_POINT('',(1.,1.15,-2.2));
|
||||
#363=CARTESIAN_POINT('',(1.,1.15,-2.6));
|
||||
#364=CARTESIAN_POINT('',(-1.,1.15,-2.2));
|
||||
#365=CARTESIAN_POINT('',(-0.5,1.15,-2.2));
|
||||
#366=CARTESIAN_POINT('',(-1.,1.15,2.6));
|
||||
#367=CARTESIAN_POINT('Origin',(1.,0.,2.6));
|
||||
#368=CARTESIAN_POINT('',(1.,0.,2.2));
|
||||
#369=CARTESIAN_POINT('',(1.,0.,2.2));
|
||||
#370=CARTESIAN_POINT('',(1.,0.,2.6));
|
||||
#371=CARTESIAN_POINT('',(1.,0.,2.6));
|
||||
#372=CARTESIAN_POINT('',(1.,0.,-2.6));
|
||||
#373=CARTESIAN_POINT('Origin',(1.,0.,2.6));
|
||||
#374=CARTESIAN_POINT('',(1.,0.,-2.2));
|
||||
#375=CARTESIAN_POINT('',(1.,0.,-2.2));
|
||||
#376=CARTESIAN_POINT('',(1.,0.,-2.6));
|
||||
#377=CARTESIAN_POINT('Origin',(1.38777878078145E-16,0.,5.55111512312578E-16));
|
||||
#378=CARTESIAN_POINT('',(-1.,0.,2.2));
|
||||
#379=CARTESIAN_POINT('',(0.5,0.,2.2));
|
||||
#380=CARTESIAN_POINT('',(-1.,0.,2.6));
|
||||
#381=CARTESIAN_POINT('',(1.,0.,2.6));
|
||||
#382=CARTESIAN_POINT('',(-1.,0.,2.6));
|
||||
#383=CARTESIAN_POINT('Origin',(1.38777878078145E-16,0.,5.55111512312578E-16));
|
||||
#384=CARTESIAN_POINT('',(-1.,0.,-2.2));
|
||||
#385=CARTESIAN_POINT('',(-0.5,0.,-2.2));
|
||||
#386=CARTESIAN_POINT('',(-1.,0.,-2.6));
|
||||
#387=CARTESIAN_POINT('',(-1.,0.,2.6));
|
||||
#388=CARTESIAN_POINT('',(1.,0.,-2.6));
|
||||
#389=CARTESIAN_POINT('',(-1.,0.,-2.6));
|
||||
#390=CARTESIAN_POINT('',(1.,0.,-2.6));
|
||||
#391=CARTESIAN_POINT('Origin',(-1.,0.,-2.6));
|
||||
#392=CARTESIAN_POINT('',(-1.,0.,2.2));
|
||||
#393=CARTESIAN_POINT('',(-1.,0.,2.6));
|
||||
#394=CARTESIAN_POINT('Origin',(-1.,0.,-2.6));
|
||||
#395=CARTESIAN_POINT('',(-1.,0.,-2.2));
|
||||
#396=CARTESIAN_POINT('',(-1.,1.15,-2.6));
|
||||
#397=CARTESIAN_POINT('',(-1.,1.15,2.6));
|
||||
#398=CARTESIAN_POINT('',(-1.,0.,-2.6));
|
||||
#399=CARTESIAN_POINT('Origin',(1.,0.,2.6));
|
||||
#400=CARTESIAN_POINT('',(1.,1.15,-2.6));
|
||||
#401=CARTESIAN_POINT('',(1.,0.,-2.6));
|
||||
#402=CARTESIAN_POINT('',(1.,1.15,-2.6));
|
||||
#403=CARTESIAN_POINT('Origin',(-1.,0.,2.6));
|
||||
#404=CARTESIAN_POINT('Origin',(-1.,0.,-2.6));
|
||||
#405=CARTESIAN_POINT('',(-1.,0.,2.6));
|
||||
#406=CARTESIAN_POINT('Origin',(1.,0.,-2.6));
|
||||
#407=CARTESIAN_POINT('',(-1.,1.15,-2.6));
|
||||
#408=CARTESIAN_POINT('Origin',(1.38777878078145E-16,1.15,5.55111512312578E-16));
|
||||
#409=CARTESIAN_POINT('Origin',(1.38777878078145E-16,0.,5.55111512312578E-16));
|
||||
#410=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#414,
|
||||
'DISTANCE_ACCURACY_VALUE',
|
||||
'Maximum model space distance between geometric entities at asserted c
|
||||
onnectivities');
|
||||
#411=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#414,
|
||||
'DISTANCE_ACCURACY_VALUE',
|
||||
'Maximum model space distance between geometric entities at asserted c
|
||||
onnectivities');
|
||||
#412=(
|
||||
GEOMETRIC_REPRESENTATION_CONTEXT(3)
|
||||
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#410))
|
||||
GLOBAL_UNIT_ASSIGNED_CONTEXT((#414,#416,#417))
|
||||
REPRESENTATION_CONTEXT('','3D')
|
||||
);
|
||||
#413=(
|
||||
GEOMETRIC_REPRESENTATION_CONTEXT(3)
|
||||
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#411))
|
||||
GLOBAL_UNIT_ASSIGNED_CONTEXT((#414,#416,#417))
|
||||
REPRESENTATION_CONTEXT('','3D')
|
||||
);
|
||||
#414=(
|
||||
LENGTH_UNIT()
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT(.MILLI.,.METRE.)
|
||||
);
|
||||
#415=(
|
||||
LENGTH_UNIT()
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT($,.METRE.)
|
||||
);
|
||||
#416=(
|
||||
NAMED_UNIT(*)
|
||||
PLANE_ANGLE_UNIT()
|
||||
SI_UNIT($,.RADIAN.)
|
||||
);
|
||||
#417=(
|
||||
NAMED_UNIT(*)
|
||||
SI_UNIT($,.STERADIAN.)
|
||||
SOLID_ANGLE_UNIT()
|
||||
);
|
||||
#418=SHAPE_DEFINITION_REPRESENTATION(#419,#420);
|
||||
#419=PRODUCT_DEFINITION_SHAPE('',$,#422);
|
||||
#420=SHAPE_REPRESENTATION('',(#266),#412);
|
||||
#421=PRODUCT_DEFINITION_CONTEXT('part definition',#426,'design');
|
||||
#422=PRODUCT_DEFINITION('Walsin RFANT5220110A2T',
|
||||
'Walsin RFANT5220110A2T v0',#423,#421);
|
||||
#423=PRODUCT_DEFINITION_FORMATION('',$,#428);
|
||||
#424=PRODUCT_RELATED_PRODUCT_CATEGORY('Walsin RFANT5220110A2T v0',
|
||||
'Walsin RFANT5220110A2T v0',(#428));
|
||||
#425=APPLICATION_PROTOCOL_DEFINITION('international standard',
|
||||
'automotive_design',2009,#426);
|
||||
#426=APPLICATION_CONTEXT(
|
||||
'Core Data for Automotive Mechanical Design Process');
|
||||
#427=PRODUCT_CONTEXT('part definition',#426,'mechanical');
|
||||
#428=PRODUCT('Walsin RFANT5220110A2T','Walsin RFANT5220110A2T v0',$,(#427));
|
||||
#429=PRESENTATION_STYLE_ASSIGNMENT((#432));
|
||||
#430=PRESENTATION_STYLE_ASSIGNMENT((#433));
|
||||
#431=PRESENTATION_STYLE_ASSIGNMENT((#434));
|
||||
#432=SURFACE_STYLE_USAGE(.BOTH.,#435);
|
||||
#433=SURFACE_STYLE_USAGE(.BOTH.,#436);
|
||||
#434=SURFACE_STYLE_USAGE(.BOTH.,#437);
|
||||
#435=SURFACE_SIDE_STYLE('',(#438));
|
||||
#436=SURFACE_SIDE_STYLE('',(#439));
|
||||
#437=SURFACE_SIDE_STYLE('',(#440));
|
||||
#438=SURFACE_STYLE_FILL_AREA(#441);
|
||||
#439=SURFACE_STYLE_FILL_AREA(#442);
|
||||
#440=SURFACE_STYLE_FILL_AREA(#443);
|
||||
#441=FILL_AREA_STYLE('Stahl - satiniert',(#444));
|
||||
#442=FILL_AREA_STYLE('Farbe - Emaille gl\X\E4nzend (Grau)',(#445));
|
||||
#443=FILL_AREA_STYLE('Farbe - Emaille gl\X\E4nzend (Blau)',(#446));
|
||||
#444=FILL_AREA_STYLE_COLOUR('Stahl - satiniert',#447);
|
||||
#445=FILL_AREA_STYLE_COLOUR('Farbe - Emaille gl\X\E4nzend (Grau)',#448);
|
||||
#446=FILL_AREA_STYLE_COLOUR('Farbe - Emaille gl\X\E4nzend (Blau)',#449);
|
||||
#447=COLOUR_RGB('Stahl - satiniert',0.627450980392157,0.627450980392157,
|
||||
0.627450980392157);
|
||||
#448=COLOUR_RGB('Farbe - Emaille gl\X\E4nzend (Grau)',0.701960784313725,
|
||||
0.701960784313725,0.701960784313725);
|
||||
#449=COLOUR_RGB('Farbe - Emaille gl\X\E4nzend (Blau)',0.294117647058824,
|
||||
0.498039215686275,0.831372549019608);
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
|
@ -0,0 +1,43 @@
|
|||
(footprint "Heimdall vertical" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 5BB39B96)
|
||||
(descr "VISHAY Heimdall for TSSP77038")
|
||||
(tags "vishay heimdall IR infrared receiver")
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
(property "Sheetname" "")
|
||||
(attr smd)
|
||||
(fp_text reference "U6" (at -4.488008 0.299854 -90) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 99661005-769b-4d0f-aa75-26eeaa5b0c4e)
|
||||
)
|
||||
(fp_text value "TSSP77038" (at 0 2.8) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 2c315470-8c5e-49ee-bee1-3d6a109f7de1)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 8b99f715-f8e6-46d4-96e6-7f0569201d47)
|
||||
)
|
||||
(fp_line (start 3.4 1.505) (end 3.4 -1.505) (layer "F.SilkS") (width 0.12) (tstamp 255fdb75-f1b7-4bf5-b13f-73da1e61b4cd))
|
||||
(fp_line (start 3.4 -1.505) (end -3.4 -1.51) (layer "F.SilkS") (width 0.12) (tstamp 3be63fd6-f4ed-4239-a0db-f9ba492eaffc))
|
||||
(fp_line (start -2.8 1.505) (end -3.4 1.5) (layer "F.SilkS") (width 0.12) (tstamp b22fd62b-97d7-4d22-9380-f9b09acbb3a1))
|
||||
(fp_line (start 3.4 1.505) (end 2.8 1.5) (layer "F.SilkS") (width 0.12) (tstamp bc52bd0a-e631-4f4a-a5cb-57e3c2c33f20))
|
||||
(fp_line (start -3.4 1.5) (end -3.4 -1.51) (layer "F.SilkS") (width 0.12) (tstamp eb427f97-534a-4b55-a1fc-cd7512384142))
|
||||
(fp_line (start -3.6 -1.7) (end -3.6 1.7) (layer "F.CrtYd") (width 0.05) (tstamp 516611f6-57a3-4042-8808-474f9ef80ca9))
|
||||
(fp_line (start 3.6 -1.7) (end 3.6 1.7) (layer "F.CrtYd") (width 0.05) (tstamp 7aa8c835-b4be-4912-9d31-bd1dc74c5233))
|
||||
(fp_line (start -3.6 1.7) (end 3.6 1.7) (layer "F.CrtYd") (width 0.05) (tstamp d74462a7-514c-435c-bdd6-f9e949d16f79))
|
||||
(fp_line (start -3.6 -1.7) (end 3.6 -1.7) (layer "F.CrtYd") (width 0.05) (tstamp f3a21418-5e5d-44aa-b12e-bc9972d6c561))
|
||||
(fp_line (start -3.4 -1.5) (end -3.4 1.5) (layer "F.Fab") (width 0.1) (tstamp 06de88ae-cc75-47b9-9e4c-b56359c9966e))
|
||||
(fp_line (start -3.4 1.5) (end 3.4 1.5) (layer "F.Fab") (width 0.1) (tstamp 4cf852b5-80fb-49ef-9c99-d2b74e1c9b51))
|
||||
(fp_line (start 3.4 -1.5) (end 3.4 1.5) (layer "F.Fab") (width 0.1) (tstamp 55c5bd39-2c09-4221-a860-d0eb1faafefa))
|
||||
(fp_line (start -3.4 -1.5) (end 3.4 -1.5) (layer "F.Fab") (width 0.1) (tstamp e59679a9-fe2a-477d-b576-837769fdd70c))
|
||||
(pad "1" smd rect (at -1.905 0.7 90) (size 2 0.8) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 055c9379-ba0e-424b-a771-defa39eb74b3))
|
||||
(pad "2" smd rect (at -0.635 0.7 90) (size 2 0.8) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 028da597-1e73-4bbf-99ce-209e6fa31929))
|
||||
(pad "3" smd rect (at 0.635 0.7 90) (size 2 0.8) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp b30c79a4-89cf-486e-b203-e29889d600cf))
|
||||
(pad "4" smd rect (at 1.9 0.7 90) (size 2 0.8) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 61518e6f-b8a3-43ff-896a-d7086a3d80ca))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/82672Heimdall.stp"
|
||||
(offset (xyz 0 -1.2 1.6))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 -180))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,56 @@
|
|||
(footprint "JST_PH_B2B-PH-SM4-TB_1x02-1MP_P2.00mm_Vertical" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 5B78AD87)
|
||||
(descr "JST PH series connector, B2B-PH-SM4-TB (http://www.jst-mfg.com/product/pdf/eng/ePH.pdf), generated with kicad-footprint-generator")
|
||||
(tags "connector JST PH side entry")
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
(property "Sheetname" "")
|
||||
(attr smd)
|
||||
(fp_text reference "J3" (at 0 -5.45) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp b7e1e3c6-b800-4b44-8a4d-eeb1862d3514)
|
||||
)
|
||||
(fp_text value "Conn_01x02_Male" (at 0 4.45) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 06e5a78d-8e0f-4809-b533-b4a49b5a629c)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 -1) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp c4a243ed-6686-4db5-a9fe-19b50e44ab94)
|
||||
)
|
||||
(fp_line (start 4.085 -4.36) (end 4.085 -3.51) (layer "F.SilkS") (width 0.12) (tstamp 0227ffb8-82b4-43af-810e-c0c8f988fd80))
|
||||
(fp_line (start -4.085 -3.51) (end -4.085 -4.36) (layer "F.SilkS") (width 0.12) (tstamp 4b4cd7fa-6d7c-41be-a714-842b1f5e66fd))
|
||||
(fp_line (start -4.085 0.86) (end -1.76 0.86) (layer "F.SilkS") (width 0.12) (tstamp 4ce2d6a7-aa36-430e-8135-9448ad856824))
|
||||
(fp_line (start -1.76 0.86) (end -1.76 3.25) (layer "F.SilkS") (width 0.12) (tstamp 5fb70798-2929-4c25-8656-aae725080435))
|
||||
(fp_line (start -4.085 -4.36) (end 4.085 -4.36) (layer "F.SilkS") (width 0.12) (tstamp 933de47d-58f5-4aee-a30e-c80f7a4128cd))
|
||||
(fp_line (start 4.085 0.86) (end 1.76 0.86) (layer "F.SilkS") (width 0.12) (tstamp b6f556b6-4b48-4aa8-a28d-ada9a53c80b2))
|
||||
(fp_line (start -4.085 0.01) (end -4.085 0.86) (layer "F.SilkS") (width 0.12) (tstamp c2ee8f22-2d81-4a3b-bf49-edf03d42c378))
|
||||
(fp_line (start 4.085 0.01) (end 4.085 0.86) (layer "F.SilkS") (width 0.12) (tstamp ff8802c7-b96a-47e7-9d38-4fb580940895))
|
||||
(fp_line (start 4.7 -4.75) (end -4.7 -4.75) (layer "F.CrtYd") (width 0.05) (tstamp 2252533e-5a92-4603-815d-b45bd34a8798))
|
||||
(fp_line (start 4.7 3.75) (end 4.7 -4.75) (layer "F.CrtYd") (width 0.05) (tstamp 5a2032d7-7326-4ae6-9368-e0e91033a364))
|
||||
(fp_line (start -4.7 -4.75) (end -4.7 3.75) (layer "F.CrtYd") (width 0.05) (tstamp 9799a600-6f38-4fe9-88df-f078b9f894e8))
|
||||
(fp_line (start -4.7 3.75) (end 4.7 3.75) (layer "F.CrtYd") (width 0.05) (tstamp b35a8c78-e485-4726-a863-8c26b966f857))
|
||||
(fp_line (start 0.75 -2.75) (end 0.75 -2.25) (layer "F.Fab") (width 0.1) (tstamp 0c2319c0-5863-4f5b-8079-60eb54f2fa3c))
|
||||
(fp_line (start -1.5 0.75) (end -1 0.042893) (layer "F.Fab") (width 0.1) (tstamp 12883faa-fa7b-4d13-8d81-baa9bb81f4a6))
|
||||
(fp_line (start -1.25 -2.75) (end -1.25 -2.25) (layer "F.Fab") (width 0.1) (tstamp 15885318-73db-4ebc-8390-ad3e61fb0db6))
|
||||
(fp_line (start -0.75 -2.25) (end -0.75 -2.75) (layer "F.Fab") (width 0.1) (tstamp 1bcad65c-793d-4f6a-8c9b-e1e0c9855257))
|
||||
(fp_line (start -1 0.042893) (end -0.5 0.75) (layer "F.Fab") (width 0.1) (tstamp 3a65be0a-a5e1-45b4-bff7-b154567eef50))
|
||||
(fp_line (start -3.975 -4.25) (end 3.975 -4.25) (layer "F.Fab") (width 0.1) (tstamp 3eb0ab25-cff0-4416-880a-0df9d337fc5c))
|
||||
(fp_line (start -3.975 0.75) (end 3.975 0.75) (layer "F.Fab") (width 0.1) (tstamp 5efbd4f9-69b1-4a4f-883c-6287aa5deded))
|
||||
(fp_line (start 3.975 0.75) (end 3.975 -4.25) (layer "F.Fab") (width 0.1) (tstamp 6651168d-2e28-4025-b01a-8bb6ff4d597f))
|
||||
(fp_line (start -0.75 -2.75) (end -1.25 -2.75) (layer "F.Fab") (width 0.1) (tstamp 6abd37df-8a84-409c-b120-dd47832342dc))
|
||||
(fp_line (start 1.25 -2.25) (end 1.25 -2.75) (layer "F.Fab") (width 0.1) (tstamp 81a8e172-7628-4fd5-b288-37b3858f81b2))
|
||||
(fp_line (start -1.25 -2.25) (end -0.75 -2.25) (layer "F.Fab") (width 0.1) (tstamp 923c5b62-0b7d-4239-a081-608d2a0840db))
|
||||
(fp_line (start 0.75 -2.25) (end 1.25 -2.25) (layer "F.Fab") (width 0.1) (tstamp a8f5cc86-65ff-4505-83d7-0904519dda4b))
|
||||
(fp_line (start -3.975 0.75) (end -3.975 -4.25) (layer "F.Fab") (width 0.1) (tstamp d5f4d32e-3914-4bd8-bb74-8146e3e94ed9))
|
||||
(fp_line (start 1.25 -2.75) (end 0.75 -2.75) (layer "F.Fab") (width 0.1) (tstamp f3a7eeb1-cfc3-4404-b92d-bd9192067442))
|
||||
(pad "1" smd roundrect (at -1 0.5) (size 1 5.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 790110d1-463a-4fd2-85c0-66cce8e76920))
|
||||
(pad "2" smd roundrect (at 1 0.5) (size 1 5.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp e5598bb2-3eb4-4616-92fc-e48ed6e40c44))
|
||||
(pad "MP" smd roundrect (at -3.4 -1.75) (size 1.6 3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15625) (tstamp 2a6398e5-5a44-4a0f-8191-3e0039a605dc))
|
||||
(pad "MP" smd roundrect (at 3.4 -1.75) (size 1.6 3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.15625) (tstamp ead54c9b-214f-4544-a73e-79df4b5b630f))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/B2B-PH-SM4-TB.STEP"
|
||||
(offset (xyz -4 3.25 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 0))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,60 @@
|
|||
(footprint "LED_5mm_Side_Mount" (version 20211014) (generator pcbnew)
|
||||
locked (layer "F.Cu")
|
||||
(tedit 5E7E470B)
|
||||
(descr "5mm LED for horizontal soldering to the board edge")
|
||||
(tags "LED 5mm")
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
(property "Sheetname" "")
|
||||
(attr smd)
|
||||
(fp_text reference "D2" (at -0.2 7.123323) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp f2beb290-8b22-480b-af2b-55c5fbe051dc)
|
||||
)
|
||||
(fp_text value "SFH4346" (at 0.7 -10.7) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp f55f02f0-58b7-44ff-b5f3-e6b6d172c151)
|
||||
)
|
||||
(fp_text user "Board Edge" (at 7.8 -1 unlocked) (layer "Cmts.User")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp d2ee5262-1434-4194-a73a-bdb5df43b4b4)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 3.1 3.5 -90) (layer "F.Fab")
|
||||
(effects (font (size 0.8 0.8) (thickness 0.08)))
|
||||
(tstamp ee4ad7f2-9145-48c6-87a9-fc1e8bc75547)
|
||||
)
|
||||
(fp_line (start -5.6 0) (end 12.4 0) (layer "Cmts.User") (width 0.12) (tstamp e82497c3-98a3-4a90-a30f-7d3057c175bc))
|
||||
(fp_line (start -2.3 6.2) (end -2.3 0.5) (layer "F.CrtYd") (width 0.05) (tstamp 0c6efed2-0913-4dd2-8f27-821e7c61b32d))
|
||||
(fp_line (start 2.3 6.2) (end 2.3 0.5) (layer "F.CrtYd") (width 0.05) (tstamp 478a1fd2-50e2-4979-b71f-3afd09c956e4))
|
||||
(fp_line (start 2.3 0.5) (end 3.2 0.5) (layer "F.CrtYd") (width 0.05) (tstamp 51951242-0b7c-4b2f-a43f-29b2d9e9a95d))
|
||||
(fp_line (start -2.3 6.2) (end 2.3 6.2) (layer "F.CrtYd") (width 0.05) (tstamp 5d183f5d-628f-42c3-96e3-c3bfb81cf2d4))
|
||||
(fp_line (start -2.3 0.5) (end -3.2 0.5) (layer "F.CrtYd") (width 0.05) (tstamp 9c2fa047-0796-48df-997d-e2cacca255a8))
|
||||
(fp_line (start -3.2 0.5) (end -3.2 -9.2) (layer "F.CrtYd") (width 0.05) (tstamp d5991019-e50e-4dfe-858c-67b1661a7648))
|
||||
(fp_line (start 3.2 -9.2) (end -3.2 -9.2) (layer "F.CrtYd") (width 0.05) (tstamp e5e4607d-5468-4bab-be85-2e45235dfeaa))
|
||||
(fp_line (start 3.2 0.5) (end 3.2 -9.2) (layer "F.CrtYd") (width 0.05) (tstamp f8602816-359b-47a8-8837-adbe0aa0f419))
|
||||
(fp_line (start 2.5 -6.5) (end 2.5 -1) (layer "F.Fab") (width 0.1) (tstamp 008e4b84-7e75-43ca-8455-c2e468caad44))
|
||||
(fp_line (start 0.5 -2.4) (end -0.5 -1.9) (layer "F.Fab") (width 0.1) (tstamp 0147b5ba-3109-402f-90c2-08e2a6bb8ff4))
|
||||
(fp_line (start 2.8 -1) (end 2.8 0) (layer "F.Fab") (width 0.1) (tstamp 0a9fa915-2fb0-43a3-996f-d5e7cb365732))
|
||||
(fp_line (start -3 -1) (end -3 0) (layer "F.Fab") (width 0.1) (tstamp 29757356-df90-4a15-9db4-c61c4724e212))
|
||||
(fp_line (start -3 0) (end 2.8 0) (layer "F.Fab") (width 0.1) (tstamp 375840bf-2e99-4513-8445-0ba86ec953f7))
|
||||
(fp_line (start 1.025 5) (end 1.525 5) (layer "F.Fab") (width 0.1) (tstamp 49131a50-f9b7-4785-b7f9-af41fec01dab))
|
||||
(fp_line (start -1.015 0) (end -1.015 5) (layer "F.Fab") (width 0.1) (tstamp 64425b0a-c81f-45c5-876e-1768f77d40ba))
|
||||
(fp_line (start -0.5 -1.9) (end -0.5 -2.9) (layer "F.Fab") (width 0.1) (tstamp 66c5093e-3f34-4724-9ba9-362d67dd31ff))
|
||||
(fp_line (start -1.515 0) (end -1.515 5) (layer "F.Fab") (width 0.1) (tstamp 671adeb0-f6f3-4e29-ba18-080885a82e87))
|
||||
(fp_line (start -0.5 -2.9) (end 0.5 -2.4) (layer "F.Fab") (width 0.1) (tstamp 6d952ea7-1857-41ae-97a4-56a181488971))
|
||||
(fp_line (start -2.5 -6.5) (end -2.5 -1) (layer "F.Fab") (width 0.1) (tstamp 721953f1-9456-473f-ad35-9737f9729de0))
|
||||
(fp_line (start 1.525 0) (end 1.525 5) (layer "F.Fab") (width 0.1) (tstamp 99e6b188-595d-402f-9955-ec8b8d559748))
|
||||
(fp_line (start 1.25 -2.4) (end 0.5 -2.4) (layer "F.Fab") (width 0.1) (tstamp 9b326273-8fda-45bd-a748-25bd83652d12))
|
||||
(fp_line (start -1.25 -2.4) (end -0.5 -2.4) (layer "F.Fab") (width 0.1) (tstamp b21f8551-4804-4a49-81a9-cc0de7d9198c))
|
||||
(fp_line (start -3 -1) (end 2.8 -1) (layer "F.Fab") (width 0.1) (tstamp c2f21bd1-5f3c-4996-b3ab-c438498c274d))
|
||||
(fp_line (start 0.5 -1.9) (end 0.5 -2.9) (layer "F.Fab") (width 0.1) (tstamp c58c120c-84c4-4b9e-9ed0-92b87ea0ef11))
|
||||
(fp_line (start -1.515 5) (end -1.015 5) (layer "F.Fab") (width 0.1) (tstamp df197acd-43a2-42d0-aad3-7efa74170614))
|
||||
(fp_line (start 1.025 0) (end 1.025 5) (layer "F.Fab") (width 0.1) (tstamp f31074bf-3a98-4ea8-bbf8-ad11c6be2aaa))
|
||||
(fp_arc (start -2.5 -6.5) (mid 0 -9) (end 2.5 -6.5) (layer "F.Fab") (width 0.1) (tstamp 63108f7e-31b8-4030-85bb-d8c876610a82))
|
||||
(pad "1" smd rect locked (at 1.275 3.5) (size 1.5 5) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 30c1fbd0-c96d-467f-9430-894b2db6865d))
|
||||
(pad "2" smd rect locked (at -1.275 3.5) (size 1.5 5) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 30566d46-1cb5-435a-b1cc-753bef71bfb0))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/Side Mount LED v1.step"
|
||||
(offset (xyz 0 0 0.25))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 90 0 0))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,225 @@
|
|||
(footprint "QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm_ThermalVias_MR" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 5DC5F6A5)
|
||||
(descr "QFN, 48 Pin (https://www.trinamic.com/fileadmin/assets/Products/ICs_Documents/TMC2041_datasheet.pdf#page=62), generated with kicad-footprint-generator ipc_noLead_generator.py")
|
||||
(tags "QFN NoLead")
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
(property "Sheetname" "")
|
||||
(zone_connect 2)
|
||||
(attr smd)
|
||||
(fp_text reference "U7" (at 2.35 -4.95) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 7705e9a7-8d84-410d-b2f3-d793d91b5f00)
|
||||
)
|
||||
(fp_text value "ESP32-PICO-D4" (at 0 4.8) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp bfbba12a-daed-4675-982a-77c43bac19b1)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 47961ae4-c43b-4702-bdc7-45bd69e64f36)
|
||||
)
|
||||
(fp_line (start 3.135 -3.61) (end 3.61 -3.61) (layer "F.SilkS") (width 0.12) (tstamp 82260df7-7cb0-4a05-bc92-24745968f6f3))
|
||||
(fp_line (start 3.135 3.61) (end 3.61 3.61) (layer "F.SilkS") (width 0.12) (tstamp adfd5f8f-2d29-46d8-8047-03b2aaa9dc6e))
|
||||
(fp_line (start -3.61 3.61) (end -3.61 3.135) (layer "F.SilkS") (width 0.12) (tstamp b055493d-bf63-4196-98ab-412eab7fa898))
|
||||
(fp_line (start -3.135 3.61) (end -3.61 3.61) (layer "F.SilkS") (width 0.12) (tstamp c11947d4-e00d-4c9c-b2ed-b8a15919a2bf))
|
||||
(fp_line (start 3.61 3.61) (end 3.61 3.135) (layer "F.SilkS") (width 0.12) (tstamp f2b5f76c-63bf-4ac7-9fee-ca73aa63cdfd))
|
||||
(fp_line (start 3.61 -3.61) (end 3.61 -3.135) (layer "F.SilkS") (width 0.12) (tstamp fd40282b-8a6d-412a-a5db-a246efccae17))
|
||||
(fp_circle (center -3.6 -3.6) (end -3.45 -3.6) (layer "F.SilkS") (width 0.3) (fill none) (tstamp f6ce92d2-8f8a-4b34-be3d-a036cc80b0bf))
|
||||
(fp_line (start 4.1 4.1) (end 4.1 -4.1) (layer "F.CrtYd") (width 0.05) (tstamp 20c4528d-c018-4151-93b4-332a24de84d6))
|
||||
(fp_line (start -4.1 4.1) (end 4.1 4.1) (layer "F.CrtYd") (width 0.05) (tstamp 273f3a32-fc79-4d8b-ade3-2e64a1847a1a))
|
||||
(fp_line (start -4.1 -4.1) (end -4.1 4.1) (layer "F.CrtYd") (width 0.05) (tstamp 3021b803-8940-402a-a778-d13af1e71053))
|
||||
(fp_line (start 4.1 -4.1) (end -4.1 -4.1) (layer "F.CrtYd") (width 0.05) (tstamp ab59f9af-5f57-40d6-b894-bbb87c406520))
|
||||
(fp_line (start -3.5 3.5) (end -3.5 -2.5) (layer "F.Fab") (width 0.1) (tstamp 4e4f049b-fc43-42b3-8b80-d04ca9f29b1e))
|
||||
(fp_line (start 3.5 3.5) (end -3.5 3.5) (layer "F.Fab") (width 0.1) (tstamp 59a8f64b-8fa0-449d-ba41-95b41fdbddd7))
|
||||
(fp_line (start 3.5 -3.5) (end 3.5 3.5) (layer "F.Fab") (width 0.1) (tstamp 9951cc79-31d0-49eb-b143-5a3b2b8e28cf))
|
||||
(fp_line (start -3.5 -2.5) (end -2.5 -3.5) (layer "F.Fab") (width 0.1) (tstamp b997296a-33bd-49a5-b806-17018dfe5f0a))
|
||||
(fp_line (start -2.5 -3.5) (end 3.5 -3.5) (layer "F.Fab") (width 0.1) (tstamp ede8250d-4f07-4a9e-ba45-882b5295db66))
|
||||
(pad "" smd roundrect (at 1.8 0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 0045943e-6df3-40ca-9104-3e32ef1c2361))
|
||||
(pad "" smd roundrect (at -0.6 -0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 12920999-1739-4177-bd30-7526c2a7c154))
|
||||
(pad "" smd roundrect (at -1.8 0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 16a0886d-1c6d-443d-87b7-0ca2476ace0b))
|
||||
(pad "" smd roundrect (at 0.6 0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 1d0c3d71-94ac-4b17-b2b8-aa5c7cdf4be0))
|
||||
(pad "" smd roundrect (at 0.6 -1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 2ab4815d-1487-4c66-a3f2-b99a62a51a0c))
|
||||
(pad "" smd roundrect (at -1.8 -1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 40c666dc-c058-4f23-89c9-623d332d7fec))
|
||||
(pad "" smd roundrect (at 1.8 -0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 4b71632f-627e-4565-b89c-0a1a5f3303de))
|
||||
(pad "" smd roundrect (at -0.6 0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 5249604f-be81-4ccd-ae00-67c73a7140c7))
|
||||
(pad "" smd roundrect (at 1.8 -1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 6520ea53-1d97-441a-a4cc-165e29e56f17))
|
||||
(pad "" smd roundrect (at 0.6 -0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 7f7defbb-f8ca-4fd4-9a43-138509d73085))
|
||||
(pad "" smd roundrect (at 1.8 1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 8edec0bf-f2bf-45dd-bd87-83807f690a36))
|
||||
(pad "" smd roundrect (at -1.8 -0.6) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 9ae5f0a0-fb8d-499b-80fe-cac6a10aca58))
|
||||
(pad "" smd roundrect (at 0.6 1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp 9fd613eb-74ca-4f00-8cc9-4d57f3238a65))
|
||||
(pad "" smd roundrect (at -0.6 1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp a6fdef24-a35e-45d8-a27c-f61032313fc2))
|
||||
(pad "" smd roundrect (at -0.6 -1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp b77d62c4-d30c-4260-a609-2c7b29d578dd))
|
||||
(pad "" smd roundrect (at -1.8 1.8) (size 1.026341 1.026341) (layers "F.Paste") (roundrect_rratio 0.2435837602)
|
||||
(zone_connect 2) (tstamp f15ec748-ab3e-4223-8daa-eaf7a3ad412d))
|
||||
(pad "1" smd roundrect (at -3.28 -2.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 43169ead-e3c0-48c3-a860-0de9bc10341e))
|
||||
(pad "2" smd roundrect (at -3.28 -2.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp b599b1ac-9d7d-4d52-8f1a-4087459782fa))
|
||||
(pad "3" smd roundrect (at -3.28 -1.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp d738e266-6392-45b8-9b25-c25c5e16601c))
|
||||
(pad "4" smd roundrect (at -3.28 -1.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 1a375be6-2e7f-4324-bdf5-a43ab437db8e))
|
||||
(pad "5" smd roundrect (at -3.28 -0.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 36dab2cd-cf91-4016-a054-c510a912b39b))
|
||||
(pad "6" smd roundrect (at -3.28 -0.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 534c3c91-04fc-4e09-a61f-c57948ace1cf))
|
||||
(pad "7" smd roundrect (at -3.28 0.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 0a32d12e-8b03-43fb-91a1-581adfc4aa57))
|
||||
(pad "8" smd roundrect (at -3.28 0.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 9b50b460-2f13-4fc3-adc5-a634ae0b801a))
|
||||
(pad "9" smd roundrect (at -3.28 1.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 41b51996-f7b3-46d6-93ff-b1e43ac3bed6))
|
||||
(pad "10" smd roundrect (at -3.28 1.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 1f8f89f1-7da7-43cc-9d4d-16ef64d245a6))
|
||||
(pad "11" smd roundrect (at -3.28 2.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 6853c369-dfab-411d-9705-ff1f204c3029))
|
||||
(pad "12" smd roundrect (at -3.28 2.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp cf47d1c7-f23d-4242-b05b-375e35556b2d))
|
||||
(pad "13" smd roundrect (at -2.75 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 1bae595f-595e-4575-8ab1-a60f675617d7))
|
||||
(pad "14" smd roundrect (at -2.25 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 17ee9082-dc06-4b77-83f9-48e6a8108154))
|
||||
(pad "15" smd roundrect (at -1.75 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp c9674c38-5c9b-4376-a39e-823857119235))
|
||||
(pad "16" smd roundrect (at -1.25 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 8f55cf7d-a353-4bc7-a442-463d4176d317))
|
||||
(pad "17" smd roundrect (at -0.75 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 55291fe4-d593-4e80-9423-adcaec667ad4))
|
||||
(pad "18" smd roundrect (at -0.25 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp a0b359bd-15d9-46ae-a6cd-5e13ecaab75f))
|
||||
(pad "19" smd roundrect (at 0.25 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 88319470-3104-4470-b9fc-bf5aa9247624))
|
||||
(pad "20" smd roundrect (at 0.75 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 9b849915-740e-482a-95d5-087d9f7bba9d))
|
||||
(pad "21" smd roundrect (at 1.25 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 0630074a-3662-4f64-b4a8-3f79a8b6433c))
|
||||
(pad "22" smd roundrect (at 1.75 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 5982fcae-2a3c-4fa6-86fc-4928642d130d))
|
||||
(pad "23" smd roundrect (at 2.25 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 62444e9e-e8bb-4592-a0b7-1a8a3d45a7d0))
|
||||
(pad "24" smd roundrect (at 2.75 3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 08bc676c-3623-4434-b2e1-722cc349205a))
|
||||
(pad "25" smd roundrect (at 3.28 2.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 08f94f28-3e54-4baa-b623-307c23eb2cee))
|
||||
(pad "26" smd roundrect (at 3.28 2.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 28c12f52-c41f-4090-a4ee-5197bb52442b))
|
||||
(pad "27" smd roundrect (at 3.28 1.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp d9bdf50f-0ada-40f6-848e-6e604303ba49))
|
||||
(pad "28" smd roundrect (at 3.28 1.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 9b19a0a3-0c4b-43e0-974c-2ea6f7585b65))
|
||||
(pad "29" smd roundrect (at 3.28 0.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 29eb24df-25ea-4e19-a102-cbc938297edd))
|
||||
(pad "30" smd roundrect (at 3.28 0.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 1923b88e-2573-4f06-bbe0-17c33dcc99e5))
|
||||
(pad "31" smd roundrect (at 3.28 -0.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 18f910d5-9602-4f5c-b3eb-5cb354b6b26e))
|
||||
(pad "32" smd roundrect (at 3.28 -0.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 8a735efc-f8ce-46c9-a802-5bf894cae6c5))
|
||||
(pad "33" smd roundrect (at 3.28 -1.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 7fbb9aa9-3faa-4a59-9eee-77f7f27dc643))
|
||||
(pad "34" smd roundrect (at 3.28 -1.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 7029b909-7155-45a6-afe0-edb4d8e853c5))
|
||||
(pad "35" smd roundrect (at 3.28 -2.25) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp f5498447-3b5c-4788-a427-e00b006f86c3))
|
||||
(pad "36" smd roundrect (at 3.28 -2.75) (size 0.5 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 25217a3e-da1d-44e5-bd8d-1b91d1c757de))
|
||||
(pad "37" smd roundrect (at 2.75 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 8a779b02-070b-4a04-b13c-91f13c535ef6))
|
||||
(pad "38" smd roundrect (at 2.25 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 5344680f-03d1-4cde-a774-d4313edf842a))
|
||||
(pad "39" smd roundrect (at 1.75 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 20880354-0997-4a10-bb7a-e9c51e1cf2bb))
|
||||
(pad "40" smd roundrect (at 1.25 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp cc85cb1b-014f-40b7-a167-38e00819e7d1))
|
||||
(pad "41" smd roundrect (at 0.75 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 6fd0397c-3082-40c3-ac95-4e5e3920f842))
|
||||
(pad "42" smd roundrect (at 0.25 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp c09a90d9-8382-44b4-a5d8-e0328a8fefe0))
|
||||
(pad "43" smd roundrect (at -0.25 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 05582249-0958-41ac-b6c5-ba9aedd73e8b))
|
||||
(pad "44" smd roundrect (at -0.75 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 682599c1-1fc4-4d2f-b481-05eae628df9d))
|
||||
(pad "45" smd roundrect (at -1.25 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp e65fc06d-b11d-480a-8c45-89374b60242d))
|
||||
(pad "46" smd roundrect (at -1.75 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 6c9019a7-9971-4994-9603-b324ddfe473d))
|
||||
(pad "47" smd roundrect (at -2.25 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp d3778f2d-cdf8-4efc-bba6-59156e3e95d6))
|
||||
(pad "48" smd roundrect (at -2.75 -3.28) (size 0.3 0.5) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.1)
|
||||
(zone_connect 2) (tstamp 8929094a-93b6-4f58-9014-aeac5138770c))
|
||||
(pad "49" thru_hole circle (at -1.2 -1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 051e6a54-8b5f-4265-ac56-3d6377b7ae04))
|
||||
(pad "49" thru_hole circle (at 1.2 1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 0b607888-5922-47fd-a47e-eca703a66daf))
|
||||
(pad "49" thru_hole circle (at 1.2 2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 1ec80c71-4fe2-4252-82fa-e619288c9877))
|
||||
(pad "49" thru_hole circle (at -1.2 0) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 202a8353-df0d-4531-91d0-108aff3c0a03))
|
||||
(pad "49" thru_hole circle (at 2.4 2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 2232b45e-f070-457d-a8d9-4a472a7f03a7))
|
||||
(pad "49" thru_hole circle (at 1.2 -2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 288719ec-f74c-43db-8f67-370e454ae9d1))
|
||||
(pad "49" thru_hole circle (at 2.4 -2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 2f4af0f5-60ee-4658-a6f6-a57240013afb))
|
||||
(pad "49" thru_hole circle (at -2.4 0) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 4809c405-e5ae-41a4-80b0-e037558edb1f))
|
||||
(pad "49" thru_hole circle (at -1.2 2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 596804b1-365f-4417-8172-048aa1582c66))
|
||||
(pad "49" thru_hole circle (at 0 -1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 67dedd75-1029-4a6e-9dab-32184da018ce))
|
||||
(pad "49" thru_hole circle (at 0 0) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 69fe4f3c-b317-474e-b45a-f7ddf0d8ef36))
|
||||
(pad "49" thru_hole circle (at 0 2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 6b24ae74-c345-494f-91df-5c58a885337b))
|
||||
(pad "49" thru_hole circle (at 0 1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 7157b059-b234-496a-934d-3c9f2a03238d))
|
||||
(pad "49" thru_hole circle (at 2.4 1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 7a9cb4f1-60bb-45ea-ba68-a9c0fb7a9bc9))
|
||||
(pad "49" thru_hole circle (at -2.4 -2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 849b7cbf-4c82-4c26-9592-c5ef2533b3a5))
|
||||
(pad "49" thru_hole circle (at 1.2 -1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 8a02b4b3-1b58-40f0-86a5-625289d05d8d))
|
||||
(pad "49" thru_hole circle (at -2.4 1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp 8e1b528e-c31b-4ab6-aac6-3a9bab7ce9ee))
|
||||
(pad "49" thru_hole circle (at 2.4 0) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp a1ed522d-538c-4f12-9667-ae046de55c2b))
|
||||
(pad "49" thru_hole circle (at -2.4 2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp a5c015ed-d7a2-4d0c-b946-8d5a2d23b303))
|
||||
(pad "49" thru_hole circle (at 1.2 0) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp ab3f2f85-748b-4efb-bbfa-c2c5600046ba))
|
||||
(pad "49" thru_hole circle (at 0 -2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp abeb7f94-d70e-4476-a09f-2122ade2d151))
|
||||
(pad "49" thru_hole circle (at 2.4 -1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp afdf5e42-a0f9-46df-b6cd-bff7f5608140))
|
||||
(pad "49" thru_hole circle (at -1.2 -2.4) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp c9944f72-3222-4c01-ac64-0ee036802ce6))
|
||||
(pad "49" smd rect (at 0 0) (size 5.3 5.3) (layers "F.Cu" "F.Mask")
|
||||
(zone_connect 2) (tstamp ca3359f2-cf00-443e-b2ba-f22a094ec451))
|
||||
(pad "49" smd rect (at 0 0) (size 5.3 5.3) (layers "B.Cu")
|
||||
(zone_connect 2) (tstamp d006a54e-4e12-47c0-a16a-23930d48db30))
|
||||
(pad "49" thru_hole circle (at -2.4 -1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp f7af55fc-8270-4072-ac7d-4585563010b0))
|
||||
(pad "49" thru_hole circle (at -1.2 1.2) (size 0.5 0.5) (drill 0.25) (layers *.Cu)
|
||||
(zone_connect 2) (tstamp f7fc7b74-5737-4bf4-8d03-c6eb7cbf7fe0))
|
||||
(model "${KICAD6_3DMODEL_DIR}/Package_DFN_QFN.3dshapes/QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,38 @@
|
|||
(footprint "RFANT5220110A2T" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 5E281F47)
|
||||
(descr "Walsin RFANT5220110A2T SMD antenna 2400-2500Mhz, 2dBi, http://www.passivecomponent.com/wp-content/uploads/2013/12/ASC_RFANT5220110A2T_V03.pdf")
|
||||
(tags "antenna")
|
||||
(attr smd)
|
||||
(fp_text reference "REF**" (at 0.1 -1.9) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 6a7f5046-59f9-4d67-8a9c-0b891389c217)
|
||||
)
|
||||
(fp_text value "RFANT5220110A2T" (at 0 1.85) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 46483cc2-97d8-4037-b962-e5c455dff7e1)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 -1.9) (layer "F.Fab")
|
||||
(effects (font (size 0.8 0.8) (thickness 0.12)))
|
||||
(tstamp c532fb02-33df-435b-9d73-6f7d2d64cc62)
|
||||
)
|
||||
(fp_line (start 1.05 -1) (end 1.05 1) (layer "F.SilkS") (width 0.12) (tstamp 30de4c82-56dc-47b2-9e75-c973468a8714))
|
||||
(fp_line (start 1.85 -1) (end 1.85 1) (layer "F.SilkS") (width 0.12) (tstamp 526fe57a-94cd-4f3d-a6e5-756fc2b9245f))
|
||||
(fp_line (start 1.05 1) (end 1.85 1) (layer "F.SilkS") (width 0.12) (tstamp 7b4fc597-125a-4092-a1d8-4f697244e2c3))
|
||||
(fp_line (start 1.85 -1) (end 1.05 -1) (layer "F.SilkS") (width 0.12) (tstamp b55b2025-be9e-4fb6-9f3a-5a59f6f3eff1))
|
||||
(fp_line (start -2.8 -1.2) (end 2.8 -1.2) (layer "F.CrtYd") (width 0.05) (tstamp 3018b8f4-b60c-4768-9eb7-24fe84842cbe))
|
||||
(fp_line (start 2.8 1.2) (end -2.8 1.2) (layer "F.CrtYd") (width 0.05) (tstamp 39e9941f-cef8-4456-bf1f-5913af203e04))
|
||||
(fp_line (start -2.8 1.2) (end -2.8 -1.2) (layer "F.CrtYd") (width 0.05) (tstamp 5f1c8048-88a4-4142-b8b6-ac3c306463a7))
|
||||
(fp_line (start 2.8 -1.2) (end 2.8 1.2) (layer "F.CrtYd") (width 0.05) (tstamp 861c5dde-d059-4f34-ad84-0eaf5595296e))
|
||||
(fp_line (start 2.6 -1) (end -2.6 -1) (layer "F.Fab") (width 0.1) (tstamp 22f66731-09f9-4c60-b7fd-b87a9f4b12a3))
|
||||
(fp_line (start -2.6 -1) (end -2.6 1) (layer "F.Fab") (width 0.1) (tstamp 4691bae0-0803-40f9-a46c-eb3967b52180))
|
||||
(fp_line (start -2.6 1) (end 2.6 1) (layer "F.Fab") (width 0.1) (tstamp 548636b6-1f09-4fe3-b08a-1b5e14b0780f))
|
||||
(fp_line (start 2.6 1) (end 2.6 -1) (layer "F.Fab") (width 0.1) (tstamp d230770e-c3c1-40ca-bd2c-270beb42c790))
|
||||
(pad "" smd roundrect (at -2.7 0) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.208333) (tstamp a2974a02-96e1-452f-854a-8d9fcf06d0d5))
|
||||
(pad "1" smd roundrect (at 2.7 0 180) (size 1 2) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.208333) (tstamp 17fa7a8e-0f13-45b9-9255-244464d1d108))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/Walsin RFANT5220110A2T v1.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 -90))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,502 @@
|
|||
(footprint "TFT_2.83IN_240X320_50PIN" (version 20211014) (generator pcbnew)
|
||||
locked (layer "F.Cu")
|
||||
(tedit 0)
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
(property "Sheetname" "")
|
||||
(fp_text reference "J2" (at -12 13.177148) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.119969)) (justify left))
|
||||
(tstamp ff52d2c6-c9bc-400e-86ab-8d6ec1d86fd6)
|
||||
)
|
||||
(fp_text value "Conn_01x50" (at -6.979 14.22) (layer "F.Fab")
|
||||
(effects (font (size 0.979424 0.979424) (thickness 0.036576)) (justify left))
|
||||
(tstamp a90ad96b-5715-4880-affc-a4f4f48e743b)
|
||||
)
|
||||
(fp_text user "1" (at -11.6 16.7) (layer "B.Fab")
|
||||
(effects (font (size 0.8636 0.8636) (thickness 0.1524)) (justify mirror))
|
||||
(tstamp 90750a04-6889-4abf-bacd-b17d78552831)
|
||||
)
|
||||
(fp_line (start 25.1 -32) (end -25.1 -32) (layer "B.SilkS") (width 0.127) (tstamp 1b82a4ba-10a1-412a-8de0-64e982fedc67))
|
||||
(fp_line (start 25.1 37.4) (end 25.1 -32) (layer "B.SilkS") (width 0.127) (tstamp 234d0134-6aae-497f-b792-3499237b559c))
|
||||
(fp_line (start -25.1 -32) (end -25.1 37.4) (layer "B.SilkS") (width 0.127) (tstamp 528e9300-ee3d-4b7e-b57e-737a8e383aa3))
|
||||
(fp_line (start -25.1 37.4) (end 25.1 37.4) (layer "B.SilkS") (width 0.127) (tstamp cd4a6184-a138-48aa-8dc0-c026866f91e5))
|
||||
(fp_line (start 12.7 10.29) (end 14.8 10.29) (layer "F.SilkS") (width 0.127) (tstamp 5e9a1eb5-9678-440c-be40-9eb66edec7ad))
|
||||
(fp_line (start -14.8 10.29) (end -14.8 11.59) (layer "F.SilkS") (width 0.127) (tstamp 77883ff7-2fab-4040-b3ce-f5c5211a9a01))
|
||||
(fp_line (start -12.6 10.29) (end -14.8 10.29) (layer "F.SilkS") (width 0.127) (tstamp 7a4ad31f-fd61-42c7-a4ea-0241c7f979fa))
|
||||
(fp_line (start 14.8 10.29) (end 14.8 11.59) (layer "F.SilkS") (width 0.127) (tstamp 8f2a1ef7-aee9-499e-9be5-271e7b65de23))
|
||||
(fp_line (start -14.8 15.49) (end 14.8 15.49) (layer "F.SilkS") (width 0.127) (tstamp b17ddcc1-2a1c-4e82-b914-dca5bc6038ce))
|
||||
(fp_line (start 14.8 15.49) (end 14.8 14.59) (layer "F.SilkS") (width 0.127) (tstamp bcd90c36-5b75-4f1c-bb01-80781bd808c1))
|
||||
(fp_line (start -14.8 14.59) (end -14.8 15.49) (layer "F.SilkS") (width 0.127) (tstamp d93df7e2-3dce-4948-b2ef-eb3032216207))
|
||||
(fp_poly (pts
|
||||
(xy -2.1 11.05)
|
||||
(xy -2.4 11.05)
|
||||
(xy -2.4 9.75)
|
||||
(xy -2.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 003de3c3-cbde-478c-b0d7-fc9d7aa0cc4d))
|
||||
(fp_poly (pts
|
||||
(xy -9.6 11.05)
|
||||
(xy -9.9 11.05)
|
||||
(xy -9.9 9.75)
|
||||
(xy -9.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 041dcd1e-0f13-400a-9faf-99a30798cf4b))
|
||||
(fp_poly (pts
|
||||
(xy -6.1 11.05)
|
||||
(xy -6.4 11.05)
|
||||
(xy -6.4 9.75)
|
||||
(xy -6.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 094c5b8a-4aa2-4722-ab01-b8a952c19b9d))
|
||||
(fp_poly (pts
|
||||
(xy 10.9 11.05)
|
||||
(xy 10.6 11.05)
|
||||
(xy 10.6 9.75)
|
||||
(xy 10.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 10d31cf2-ae4a-4bc6-8a1e-f339af631131))
|
||||
(fp_poly (pts
|
||||
(xy 6.9 11.05)
|
||||
(xy 6.6 11.05)
|
||||
(xy 6.6 9.75)
|
||||
(xy 6.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 135eb3e7-d272-45fb-ac2d-86726aad775f))
|
||||
(fp_poly (pts
|
||||
(xy 1.4 11.05)
|
||||
(xy 1.1 11.05)
|
||||
(xy 1.1 9.75)
|
||||
(xy 1.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 163e7b1f-d0f3-4737-8eef-2c5a9abc22dc))
|
||||
(fp_poly (pts
|
||||
(xy 11.4 11.05)
|
||||
(xy 11.1 11.05)
|
||||
(xy 11.1 9.75)
|
||||
(xy 11.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 2457bdfa-dd75-45d8-b9cd-0047142ac541))
|
||||
(fp_poly (pts
|
||||
(xy 7.9 11.05)
|
||||
(xy 7.6 11.05)
|
||||
(xy 7.6 9.75)
|
||||
(xy 7.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 29ab46eb-e789-4546-8078-636c01501995))
|
||||
(fp_poly (pts
|
||||
(xy -5.1 11.05)
|
||||
(xy -5.4 11.05)
|
||||
(xy -5.4 9.75)
|
||||
(xy -5.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 2f165402-5f65-41c0-9b94-5efa55acc71d))
|
||||
(fp_poly (pts
|
||||
(xy 12.4 11.05)
|
||||
(xy 12.1 11.05)
|
||||
(xy 12.1 9.75)
|
||||
(xy 12.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 2ff1c929-6239-4719-87a7-d4c6a8ee10a3))
|
||||
(fp_poly (pts
|
||||
(xy 4.4 11.05)
|
||||
(xy 4.1 11.05)
|
||||
(xy 4.1 9.75)
|
||||
(xy 4.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 303f673b-cb18-4929-9c30-4caabade68ae))
|
||||
(fp_poly (pts
|
||||
(xy 10.4 11.05)
|
||||
(xy 10.1 11.05)
|
||||
(xy 10.1 9.75)
|
||||
(xy 10.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 30f9fc6f-7538-4d23-9513-9ace13b4a44a))
|
||||
(fp_poly (pts
|
||||
(xy 11.9 11.05)
|
||||
(xy 11.6 11.05)
|
||||
(xy 11.6 9.75)
|
||||
(xy 11.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 394f26ef-1414-4923-bba2-90294dc30edd))
|
||||
(fp_poly (pts
|
||||
(xy 0.4 11.05)
|
||||
(xy 0.1 11.05)
|
||||
(xy 0.1 9.75)
|
||||
(xy 0.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 3e676343-6c88-43af-994c-85c03ce0f7bb))
|
||||
(fp_poly (pts
|
||||
(xy -0.1 11.05)
|
||||
(xy -0.4 11.05)
|
||||
(xy -0.4 9.75)
|
||||
(xy -0.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 3ef9bc41-a614-4d62-86f0-84d6d4466e69))
|
||||
(fp_poly (pts
|
||||
(xy -0.6 11.05)
|
||||
(xy -0.9 11.05)
|
||||
(xy -0.9 9.75)
|
||||
(xy -0.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 44d015a6-72f6-45c9-8490-fbd20fc564ca))
|
||||
(fp_poly (pts
|
||||
(xy 2.9 11.05)
|
||||
(xy 2.6 11.05)
|
||||
(xy 2.6 9.75)
|
||||
(xy 2.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 4a939e78-3c2c-42e4-aaf5-3563b703c90d))
|
||||
(fp_poly (pts
|
||||
(xy -5.6 11.05)
|
||||
(xy -5.9 11.05)
|
||||
(xy -5.9 9.75)
|
||||
(xy -5.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 5052cad4-c7c4-47b4-a399-25e0213bd7f1))
|
||||
(fp_poly (pts
|
||||
(xy 4.9 11.05)
|
||||
(xy 4.6 11.05)
|
||||
(xy 4.6 9.75)
|
||||
(xy 4.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 51de0c58-4ac1-4fba-9e3f-8ceae794a00a))
|
||||
(fp_poly (pts
|
||||
(xy -12.1 11.05)
|
||||
(xy -12.4 11.05)
|
||||
(xy -12.4 9.75)
|
||||
(xy -12.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 54cac61f-6027-4320-a511-2ddef41ed4ab))
|
||||
(fp_poly (pts
|
||||
(xy 3.4 11.05)
|
||||
(xy 3.1 11.05)
|
||||
(xy 3.1 9.75)
|
||||
(xy 3.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 5d817b80-7448-43bb-821c-e93ac76807b1))
|
||||
(fp_poly (pts
|
||||
(xy -2.6 11.05)
|
||||
(xy -2.9 11.05)
|
||||
(xy -2.9 9.75)
|
||||
(xy -2.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 61c2d62c-d688-49c4-aa9a-f75b91725f80))
|
||||
(fp_poly (pts
|
||||
(xy -8.1 11.05)
|
||||
(xy -8.4 11.05)
|
||||
(xy -8.4 9.75)
|
||||
(xy -8.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 61fca65d-e8c1-4374-a271-ccde4b2f70c8))
|
||||
(fp_poly (pts
|
||||
(xy 9.4 11.05)
|
||||
(xy 9.1 11.05)
|
||||
(xy 9.1 9.75)
|
||||
(xy 9.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 638cb56e-2e0d-435a-b6c6-9aa10fdf2c67))
|
||||
(fp_poly (pts
|
||||
(xy -3.1 11.05)
|
||||
(xy -3.4 11.05)
|
||||
(xy -3.4 9.75)
|
||||
(xy -3.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 6b8de6ba-1db2-4c1d-aee1-36ec39f263cc))
|
||||
(fp_poly (pts
|
||||
(xy -1.6 11.05)
|
||||
(xy -1.9 11.05)
|
||||
(xy -1.9 9.75)
|
||||
(xy -1.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 6bc92364-a410-449f-b172-12ffd5dc405d))
|
||||
(fp_poly (pts
|
||||
(xy 7.4 11.05)
|
||||
(xy 7.1 11.05)
|
||||
(xy 7.1 9.75)
|
||||
(xy 7.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 72157056-2124-4037-95bd-6a5d9189cdb1))
|
||||
(fp_poly (pts
|
||||
(xy -11.6 11.05)
|
||||
(xy -11.9 11.05)
|
||||
(xy -11.9 9.75)
|
||||
(xy -11.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 764ce819-2034-4178-87c4-d1abe2fa43d6))
|
||||
(fp_poly (pts
|
||||
(xy 1.9 11.05)
|
||||
(xy 1.6 11.05)
|
||||
(xy 1.6 9.75)
|
||||
(xy 1.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 782ea488-f1a3-46be-94dc-fa245895286f))
|
||||
(fp_poly (pts
|
||||
(xy -10.6 11.05)
|
||||
(xy -10.9 11.05)
|
||||
(xy -10.9 9.75)
|
||||
(xy -10.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 80a90484-bbed-4109-959b-bb8afa05fddb))
|
||||
(fp_poly (pts
|
||||
(xy -4.1 11.05)
|
||||
(xy -4.4 11.05)
|
||||
(xy -4.4 9.75)
|
||||
(xy -4.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 833e2232-1642-4ddc-a579-c39ca0d66813))
|
||||
(fp_poly (pts
|
||||
(xy -8.6 11.05)
|
||||
(xy -8.9 11.05)
|
||||
(xy -8.9 9.75)
|
||||
(xy -8.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 83570c82-edae-43f0-82c3-435811542e98))
|
||||
(fp_poly (pts
|
||||
(xy -4.6 11.05)
|
||||
(xy -4.9 11.05)
|
||||
(xy -4.9 9.75)
|
||||
(xy -4.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 9d3f772e-d90a-42a3-a480-9fe7bf22220e))
|
||||
(fp_poly (pts
|
||||
(xy -10.1 11.05)
|
||||
(xy -10.4 11.05)
|
||||
(xy -10.4 9.75)
|
||||
(xy -10.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp 9f64881c-0bf4-4a49-84c2-f7dc20d4ec27))
|
||||
(fp_poly (pts
|
||||
(xy 3.9 11.05)
|
||||
(xy 3.6 11.05)
|
||||
(xy 3.6 9.75)
|
||||
(xy 3.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp a8fd5cb4-f1ca-4915-a279-52ecb3486ead))
|
||||
(fp_poly (pts
|
||||
(xy -1.1 11.05)
|
||||
(xy -1.4 11.05)
|
||||
(xy -1.4 9.75)
|
||||
(xy -1.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp b1c1ad0f-27b0-4f11-8c40-b199d45a6ec3))
|
||||
(fp_poly (pts
|
||||
(xy 6.4 11.05)
|
||||
(xy 6.1 11.05)
|
||||
(xy 6.1 9.75)
|
||||
(xy 6.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp b2adee7d-b1b0-4a79-93dd-b6d59eac6591))
|
||||
(fp_poly (pts
|
||||
(xy -9.1 11.05)
|
||||
(xy -9.4 11.05)
|
||||
(xy -9.4 9.75)
|
||||
(xy -9.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp b49567f8-eb01-4e00-a2fa-3c2608b9c17f))
|
||||
(fp_poly (pts
|
||||
(xy -11.1 11.05)
|
||||
(xy -11.4 11.05)
|
||||
(xy -11.4 9.75)
|
||||
(xy -11.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp bfd6b178-8974-4313-a0dc-8bf4abae454b))
|
||||
(fp_poly (pts
|
||||
(xy 8.4 11.05)
|
||||
(xy 8.1 11.05)
|
||||
(xy 8.1 9.75)
|
||||
(xy 8.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp c76ea3b5-561f-4f8e-babc-d03623b1f762))
|
||||
(fp_poly (pts
|
||||
(xy 0.9 11.05)
|
||||
(xy 0.6 11.05)
|
||||
(xy 0.6 9.75)
|
||||
(xy 0.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp d2a15574-d7fe-47d4-b6d6-545c3ffa5074))
|
||||
(fp_poly (pts
|
||||
(xy 8.9 11.05)
|
||||
(xy 8.6 11.05)
|
||||
(xy 8.6 9.75)
|
||||
(xy 8.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp dd3e5dc0-f33e-48bb-82df-ee29a7194579))
|
||||
(fp_poly (pts
|
||||
(xy -3.6 11.05)
|
||||
(xy -3.9 11.05)
|
||||
(xy -3.9 9.75)
|
||||
(xy -3.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp e298a571-81f6-4798-9db0-714278c3c9c6))
|
||||
(fp_poly (pts
|
||||
(xy -7.6 11.05)
|
||||
(xy -7.9 11.05)
|
||||
(xy -7.9 9.75)
|
||||
(xy -7.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp e46c7932-226b-4bda-b69e-ece525f7a21e))
|
||||
(fp_poly (pts
|
||||
(xy 9.9 11.05)
|
||||
(xy 9.6 11.05)
|
||||
(xy 9.6 9.75)
|
||||
(xy 9.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp eafb81a0-eb09-4e50-863a-6213e2d5acd8))
|
||||
(fp_poly (pts
|
||||
(xy 2.4 11.05)
|
||||
(xy 2.1 11.05)
|
||||
(xy 2.1 9.75)
|
||||
(xy 2.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp ecf7b1cd-26ae-46ed-8ab5-0c13e95d71ec))
|
||||
(fp_poly (pts
|
||||
(xy -6.6 11.05)
|
||||
(xy -6.9 11.05)
|
||||
(xy -6.9 9.75)
|
||||
(xy -6.6 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp f4b387df-211d-4fb3-86bf-79ec5e5bbef3))
|
||||
(fp_poly (pts
|
||||
(xy 5.4 11.05)
|
||||
(xy 5.1 11.05)
|
||||
(xy 5.1 9.75)
|
||||
(xy 5.4 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp f4deea75-4bc8-41d4-a424-b961e5766e37))
|
||||
(fp_poly (pts
|
||||
(xy -7.1 11.05)
|
||||
(xy -7.4 11.05)
|
||||
(xy -7.4 9.75)
|
||||
(xy -7.1 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp fda0c67e-51ca-4a2e-abe5-249f08b2b953))
|
||||
(fp_poly (pts
|
||||
(xy 5.9 11.05)
|
||||
(xy 5.6 11.05)
|
||||
(xy 5.6 9.75)
|
||||
(xy 5.9 9.75)
|
||||
) (layer "F.Mask") (width 0) (fill solid) (tstamp ff0215b1-b61e-4dab-8856-e27ddbde0934))
|
||||
(fp_line (start 20.802074 37.00519) (end 7.19481 37.002074) (layer "Edge.Cuts") (width 0.2) (tstamp 0476137b-0d4c-41fd-b9f2-2fc6050ab7cd))
|
||||
(fp_line (start 5.997926 25.19481) (end 5.99481 35.802074) (layer "Edge.Cuts") (width 0.2) (tstamp 1def679d-2c42-42dd-855a-d7b046b57ab5))
|
||||
(fp_line (start 20.80519 23.997926) (end 7.197926 23.99481) (layer "Edge.Cuts") (width 0.2) (tstamp 65353157-2f93-4ec2-ba38-09c13fb6e5ea))
|
||||
(fp_line (start -13.80519 22.502074) (end 13.802074 22.50519) (layer "Edge.Cuts") (width 0.2) (tstamp 923ac5f4-f161-400c-a62b-87b7471faed0))
|
||||
(fp_line (start 22.00519 25.197926) (end 22.002074 35.80519) (layer "Edge.Cuts") (width 0.2) (tstamp 938f00b8-05d2-4e18-8ce8-54921b9550aa))
|
||||
(fp_line (start -13.802074 16.49481) (end 13.80519 16.497926) (layer "Edge.Cuts") (width 0.2) (tstamp 9829d313-8826-43e4-98c7-cf424680bc87))
|
||||
(fp_line (start -15.00519 21.302074) (end -15.002074 17.69481) (layer "Edge.Cuts") (width 0.2) (tstamp b0e119a3-0fb6-4133-82c8-acdda508895d))
|
||||
(fp_line (start 15.002074 21.30519) (end 15.00519 17.697926) (layer "Edge.Cuts") (width 0.2) (tstamp e9418b43-4aa4-402c-9d8d-26d928c55d96))
|
||||
(fp_arc (start 5.997926 25.19481) (mid 6.349398 24.346282) (end 7.197926 23.99481) (layer "Edge.Cuts") (width 0.2) (tstamp 04e8af2c-512b-45f1-9a38-342929c3e290))
|
||||
(fp_arc (start -13.80519 22.502074) (mid -14.653718 22.150602) (end -15.00519 21.302074) (layer "Edge.Cuts") (width 0.2) (tstamp 3bdfe91c-33d8-4a80-b6b5-06d258a14b25))
|
||||
(fp_arc (start 20.80519 23.997926) (mid 21.653718 24.349398) (end 22.00519 25.197926) (layer "Edge.Cuts") (width 0.2) (tstamp 4390cb64-d846-4d74-979f-a4ed7291409f))
|
||||
(fp_arc (start 22.002074 35.80519) (mid 21.650602 36.653718) (end 20.802074 37.00519) (layer "Edge.Cuts") (width 0.2) (tstamp 539c424f-535d-46ac-bded-fb6fa791c809))
|
||||
(fp_arc (start -15.002074 17.69481) (mid -14.650602 16.846282) (end -13.802074 16.49481) (layer "Edge.Cuts") (width 0.2) (tstamp 542aeeb8-a875-4352-aced-c5df33ffd28b))
|
||||
(fp_arc (start 7.19481 37.002074) (mid 6.346282 36.650602) (end 5.99481 35.802074) (layer "Edge.Cuts") (width 0.2) (tstamp 79576ecf-a311-41b8-a8ff-3b4496660d06))
|
||||
(fp_arc (start 15.002074 21.30519) (mid 14.650602 22.153718) (end 13.802074 22.50519) (layer "Edge.Cuts") (width 0.2) (tstamp 95312508-5df4-4fc8-bab9-69cfa2771d0c))
|
||||
(fp_arc (start 13.80519 16.497926) (mid 14.653718 16.849398) (end 15.00519 17.697926) (layer "Edge.Cuts") (width 0.2) (tstamp e2b1e7f4-0c10-4f97-ab10-25db4cf38a7e))
|
||||
(fp_line (start 22.6 -29.8) (end -22.6 -29.8) (layer "B.Fab") (width 0.127) (tstamp 0628601b-3b06-4d57-bfec-bc5fdccc181b))
|
||||
(fp_line (start -21.6 -29.22) (end -21.6 28.38) (layer "B.Fab") (width 0.127) (tstamp 082639eb-d922-443a-a7fa-0c72f0a8a298))
|
||||
(fp_line (start -17.9 25.8) (end -18.1 25.8) (layer "B.Fab") (width 0.127) (tstamp 12156ff8-e859-4a27-819e-45039f943e3d))
|
||||
(fp_line (start -25 -31.9) (end -25 37.3) (layer "B.Fab") (width 0.127) (tstamp 18dbf831-f135-4009-8044-bba310be5a43))
|
||||
(fp_line (start 22.6 30.2) (end 18.2 25.8) (layer "B.Fab") (width 0.127) (tstamp 2b87f9a1-cf91-48c3-87f9-f0b43ac4535c))
|
||||
(fp_line (start 12.1 36.9) (end 21.7 36.9) (layer "B.Fab") (width 0.127) (tstamp 3684b517-92df-44e5-b246-b48b8eadb9c0))
|
||||
(fp_line (start -12.5 12.5) (end -12.5 15.8) (layer "B.Fab") (width 0.127) (tstamp 413f5a1b-baad-4830-ab08-ec0c98ac22c2))
|
||||
(fp_line (start -21.6 36.9) (end -11.7 36.9) (layer "B.Fab") (width 0.127) (tstamp 5a1a9bd9-cd3c-4553-819c-aebb70cb36fb))
|
||||
(fp_line (start 21.6 -29.22) (end -21.6 -29.22) (layer "B.Fab") (width 0.127) (tstamp 60681e66-da5b-49b4-bb83-d761bfd7b901))
|
||||
(fp_line (start -13.4 25.8) (end -17.9 25.8) (layer "B.Fab") (width 0.127) (tstamp 6772d0c9-342e-4a0e-8f9b-c87ae0f528a8))
|
||||
(fp_line (start 12.5 24.8) (end 12.5 15.8) (layer "B.Fab") (width 0.127) (tstamp 6bd30e49-67ad-4f58-b372-29e6b6142a88))
|
||||
(fp_line (start 12.2 12.2) (end -12.2 12.2) (layer "B.Fab") (width 0.127) (tstamp 7607d556-af34-4015-8d94-01a0b4b108f1))
|
||||
(fp_line (start -22.6 -29.8) (end -22.6 29.55) (layer "B.Fab") (width 0.127) (tstamp 99255112-9f3b-48cd-af50-29cb5d80b2e1))
|
||||
(fp_line (start -18.1 25.8) (end -22.6 30.3) (layer "B.Fab") (width 0.127) (tstamp ad02a636-0f59-45f1-9a8d-f61ece16ee50))
|
||||
(fp_line (start 25 37.3) (end 25 -31.9) (layer "B.Fab") (width 0.127) (tstamp b3f6aec5-7cd0-4bbf-a32e-f58b3c50e466))
|
||||
(fp_line (start -22.6 30.3) (end -22.6 35.9) (layer "B.Fab") (width 0.127) (tstamp b544f5b2-1db5-4a42-9bc9-b0d446f0d596))
|
||||
(fp_line (start 11.8 36.9) (end 12.1 36.9) (layer "B.Fab") (width 0.127) (tstamp b6de97a7-0777-492e-84ab-3a100456f7e4))
|
||||
(fp_line (start -21.6 28.38) (end 21.6 28.38) (layer "B.Fab") (width 0.127) (tstamp b73418c0-b364-4f48-b2cc-6b73aed24a20))
|
||||
(fp_line (start 22.6 36) (end 22.6 30.2) (layer "B.Fab") (width 0.127) (tstamp d4b029ca-6e42-4b6a-b9db-c034c9a5d43f))
|
||||
(fp_line (start 12.5 15.8) (end -12.5 15.8) (layer "B.Fab") (width 0.127) (tstamp d747aafd-3d11-426e-8cf4-ecf044d25cec))
|
||||
(fp_line (start 21.6 28.38) (end 21.6 -29.22) (layer "B.Fab") (width 0.127) (tstamp d7c6e4fd-6575-4a4d-8068-1f22459268e7))
|
||||
(fp_line (start 25 -31.9) (end -25 -31.9) (layer "B.Fab") (width 0.127) (tstamp d8386bec-aa94-44c9-93e9-50c5e520bf43))
|
||||
(fp_line (start -12.5 15.8) (end -12.5 24.9) (layer "B.Fab") (width 0.127) (tstamp e6c0245f-8341-47aa-8f18-83d447c2856b))
|
||||
(fp_line (start 22.6 29.55) (end 22.6 -29.8) (layer "B.Fab") (width 0.127) (tstamp ea6676a4-2fad-46da-97db-f7e6267b4698))
|
||||
(fp_line (start -22.6 29.55) (end 22.6 29.55) (layer "B.Fab") (width 0.127) (tstamp ec6d35c9-4961-4a21-a516-28bcdd50335d))
|
||||
(fp_line (start -25 37.3) (end 25 37.3) (layer "B.Fab") (width 0.127) (tstamp f1a0cd7c-3827-4578-b1a7-bc32676dc19c))
|
||||
(fp_line (start 12.5 15.8) (end 12.5 12.5) (layer "B.Fab") (width 0.127) (tstamp f961676a-d9a9-4649-b1a4-e4a17c946dcd))
|
||||
(fp_line (start 18.2 25.8) (end 13.5 25.8) (layer "B.Fab") (width 0.127) (tstamp fb95da0b-aa13-4caa-b087-ce6b3d75f37f))
|
||||
(fp_arc (start -21.6 36.9) (mid -22.307107 36.607107) (end -22.6 35.9) (layer "B.Fab") (width 0.127) (tstamp 25a1b5e2-99ac-4c26-bc67-6ce11d34a351))
|
||||
(fp_arc (start -12.5 12.5) (mid -12.412132 12.287868) (end -12.2 12.2) (layer "B.Fab") (width 0.127) (tstamp 2b738a34-3d76-49a4-9a4a-803feb497f93))
|
||||
(fp_arc (start 22.6 36) (mid 22.336396 36.636396) (end 21.7 36.9) (layer "B.Fab") (width 0.127) (tstamp 2fafcb8e-d596-4c36-992f-515aa150ea11))
|
||||
(fp_arc (start -12.5 24.9) (mid -12.763604 25.536396) (end -13.4 25.8) (layer "B.Fab") (width 0.127) (tstamp 978c8af1-8be4-4f34-92e0-3d29dd706f1b))
|
||||
(fp_arc (start 12.2 12.2) (mid 12.412132 12.287868) (end 12.5 12.5) (layer "B.Fab") (width 0.127) (tstamp d372aebb-f00c-42be-bac6-e682e0b5e31f))
|
||||
(fp_arc (start 13.5 25.8) (mid 12.792893 25.507107) (end 12.5 24.8) (layer "B.Fab") (width 0.127) (tstamp f4cff259-d752-460e-8320-b084cdaaee8f))
|
||||
(fp_line (start -14.65 15.39) (end -14.65 10.39) (layer "F.Fab") (width 0.127) (tstamp 30d78fef-d2ca-47d0-b188-a7071ef1816d))
|
||||
(fp_line (start -12.4 11.49) (end -12.3 11.39) (layer "F.Fab") (width 0.127) (tstamp 38b093a0-f52a-4aa3-9200-4b5e1966e42a))
|
||||
(fp_line (start -12.3 11.29) (end -12.1 11.49) (layer "F.Fab") (width 0.127) (tstamp 4acb72aa-a067-4a83-a0bd-aff224bc6cc6))
|
||||
(fp_line (start -14.65 15.39) (end 14.65 15.39) (layer "F.Fab") (width 0.127) (tstamp 5d970006-8ca9-4785-9c60-66ffc4dc1b3f))
|
||||
(fp_line (start -12.5 11.49) (end -12.3 11.29) (layer "F.Fab") (width 0.127) (tstamp 710bb1b1-ccc9-4b23-83e0-3430c3705d83))
|
||||
(fp_line (start -14.65 10.39) (end 14.65 10.39) (layer "F.Fab") (width 0.127) (tstamp 99cf5947-ec49-4197-bd4d-0cd7998983a4))
|
||||
(fp_line (start 14.65 10.39) (end 14.65 15.39) (layer "F.Fab") (width 0.127) (tstamp b70b8322-a440-44ed-ac12-17a6287cc412))
|
||||
(fp_line (start -12.1 11.49) (end -12.4 11.49) (layer "F.Fab") (width 0.127) (tstamp cb3c80b6-e8b9-48a1-a239-83a7594038c7))
|
||||
(fp_line (start -12.5 11.49) (end -12.4 11.49) (layer "F.Fab") (width 0.127) (tstamp e4dcdaa7-8825-4072-ab38-7a1f258ad21c))
|
||||
(pad "1" smd rect locked (at -12.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp bb612fc8-0230-435c-9890-7a2aa7cd7c03))
|
||||
(pad "2" smd rect locked (at -11.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 5b3e68d9-d96e-4524-85b8-1b2d68d9ecd1))
|
||||
(pad "3" smd rect locked (at -11.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 4ebeceef-9614-4bcb-94d4-9af37e409356))
|
||||
(pad "4" smd rect locked (at -10.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp c22dfda9-070f-4d17-8813-c3509417fa38))
|
||||
(pad "5" smd rect locked (at -10.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp f1fce783-083c-4957-87c2-ee1a0608c47c))
|
||||
(pad "6" smd rect locked (at -9.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp ec4e57ab-a512-4204-9b96-d3fc009b2a27))
|
||||
(pad "7" smd rect locked (at -9.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 82509d92-9691-4afb-ad35-c5130198d00f))
|
||||
(pad "8" smd rect locked (at -8.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 6038266a-e279-4d83-a44e-2cbd0e9c8660))
|
||||
(pad "9" smd rect locked (at -8.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp fb72510e-993d-4799-97f7-d1b53dca84f4))
|
||||
(pad "10" smd rect locked (at -7.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp ab65ad78-10bf-4666-8360-e040fc4e0a88))
|
||||
(pad "11" smd rect locked (at -7.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 2d0342e2-5879-4770-8283-d807f7a21734))
|
||||
(pad "12" smd rect locked (at -6.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp a227e72f-edbc-47aa-8810-bca3392fd292))
|
||||
(pad "13" smd rect locked (at -6.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp b71fbad5-5c6c-44c0-a0a7-5ac74a01ae69))
|
||||
(pad "14" smd rect locked (at -5.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 70b73780-bed4-4c8e-b6a2-508217d06277))
|
||||
(pad "15" smd rect locked (at -5.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 17f20097-7f74-41ca-8325-c768a9b8655c))
|
||||
(pad "16" smd rect locked (at -4.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 992dac85-96c7-4254-ab80-3f7b3c68e567))
|
||||
(pad "17" smd rect locked (at -4.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 28c898b6-1c96-4dd4-979c-99799261d43a))
|
||||
(pad "18" smd rect locked (at -3.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp cb1c8448-40e8-40b9-ab18-01f59bf429dc))
|
||||
(pad "19" smd rect locked (at -3.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 1d0c89c1-119c-483f-8b51-54a80c32762b))
|
||||
(pad "20" smd rect locked (at -2.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 7367b5aa-bc3b-4fec-869e-b85ad3920d7e))
|
||||
(pad "21" smd rect locked (at -2.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 3b421b80-5de6-4059-bc40-265defe4046d))
|
||||
(pad "22" smd rect locked (at -1.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp fbf1bc49-6349-49f7-90a6-dcc862659f8b))
|
||||
(pad "23" smd rect locked (at -1.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 92c6c38f-dbd4-477b-ac6f-5390011d20eb))
|
||||
(pad "24" smd rect locked (at -0.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 52104748-4436-460d-8c39-1180ed574bad))
|
||||
(pad "25" smd rect locked (at -0.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 3423931e-6b11-4131-ad78-a16bff8f773e))
|
||||
(pad "26" smd rect locked (at 0.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 66665c53-d66b-4105-859f-b9ca3ef18810))
|
||||
(pad "27" smd rect locked (at 0.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 50a2cfff-8628-491a-b858-cfe8db6437b7))
|
||||
(pad "28" smd rect locked (at 1.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 5b579e6b-81cb-4ae9-b0ba-07ddc629f5e3))
|
||||
(pad "29" smd rect locked (at 1.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 08d8946b-a2d1-45b0-b7a3-6e8b945cec67))
|
||||
(pad "30" smd rect locked (at 2.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 85871820-9e35-4967-aa03-10bddcb2f5fd))
|
||||
(pad "31" smd rect locked (at 2.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp af86b8ba-1e94-45b0-880a-43ab28ab2e79))
|
||||
(pad "32" smd rect locked (at 3.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp cf89f04e-872e-4ee7-8507-584bdebf187f))
|
||||
(pad "33" smd rect locked (at 3.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 6446f55e-c9a0-4e3a-a284-3e81bde619e3))
|
||||
(pad "34" smd rect locked (at 4.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp b5d5eb1d-e9ac-49a6-a23b-f7c05a3a1ea7))
|
||||
(pad "35" smd rect locked (at 4.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 3d87c495-23f0-4ec0-9f0d-4d0cc39404d4))
|
||||
(pad "36" smd rect locked (at 5.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 8fae0fe0-b15e-4ae0-8500-46ac5a4b533b))
|
||||
(pad "37" smd rect locked (at 5.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 09b47778-701a-42f5-bb27-cb29871b401b))
|
||||
(pad "38" smd rect locked (at 6.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 1de2db96-0002-4179-bce6-4390addbe0cb))
|
||||
(pad "39" smd rect locked (at 6.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 170aa499-ab08-480e-a5b1-221859d19e94))
|
||||
(pad "40" smd rect locked (at 7.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp e11212a1-6916-40b2-bd38-422645a8ea20))
|
||||
(pad "41" smd rect locked (at 7.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 7e73f4bc-7a60-4a15-85b8-59d7fdce7866))
|
||||
(pad "42" smd rect locked (at 8.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 4a3c5123-5668-433b-833a-b41dac187898))
|
||||
(pad "43" smd rect locked (at 8.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 2b20a8c5-f444-44e8-a268-b3ca52d3f0e3))
|
||||
(pad "44" smd rect locked (at 9.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 31d12518-8498-4d48-93e7-b22e2c322582))
|
||||
(pad "45" smd rect locked (at 9.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp fb282b66-454d-4357-bf93-68c60b9d0447))
|
||||
(pad "46" smd rect locked (at 10.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 0955a735-c68f-4482-8a75-4d517a9fd4ac))
|
||||
(pad "47" smd rect locked (at 10.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 6e0e5b10-90d4-4e5d-8f3b-aca86c7de071))
|
||||
(pad "48" smd rect locked (at 11.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 652893ad-ff68-444c-9fb1-d10c8b7b75bf))
|
||||
(pad "49" smd rect locked (at 11.75 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 95d7859b-4a1e-4e56-a441-7944378038e2))
|
||||
(pad "50" smd rect locked (at 12.25 10.39 180) (size 0.275 1.2) (layers "F.Cu" "F.Paste")
|
||||
(solder_mask_margin 0.1016) (tstamp 51f513ca-423d-4ec1-8618-ba944d6ca5e9))
|
||||
(pad "MP" smd roundrect locked (at 14.35 13.09 180) (size 2.4 2.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.125)
|
||||
(solder_mask_margin 0.1016) (tstamp 582bdb91-1ead-4160-b1bd-6d70f240792c))
|
||||
(pad "MP" smd roundrect locked (at -14.35 13.09 180) (size 2.4 2.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.125)
|
||||
(solder_mask_margin 0.1016) (tstamp cc80ee50-cdaa-47f5-8410-09359f16451f))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/541325062_colored.step"
|
||||
(offset (xyz 0 -15.5 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/280QV10 v5.step"
|
||||
(offset (xyz 0 -22.25 -6))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 180 0 180))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,59 @@
|
|||
(footprint "USB_C_Receptacle_HRO_TYPE-C-31-M-12" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 5D3C0721)
|
||||
(descr "USB Type-C receptacle for USB 2.0 and PD, http://www.krhro.com/uploads/soft/180320/1-1P320120243.pdf")
|
||||
(tags "usb usb-c 2.0 pd")
|
||||
(attr smd)
|
||||
(fp_text reference "REF**" (at 0 -5.645) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp a144ce76-cc23-44fb-8108-bf18e64a4c3d)
|
||||
)
|
||||
(fp_text value "USB_C_Receptacle_HRO_TYPE-C-31-M-12" (at 0 5.1) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 0ca5cf76-e951-4e58-a402-14dc42a864b3)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 9189a13a-f353-4ddb-8257-370c54398cd0)
|
||||
)
|
||||
(fp_line (start 4.7 -1.9) (end 4.7 0.1) (layer "F.SilkS") (width 0.12) (tstamp 177e7db1-b916-4e65-ace8-532e6e1f85db))
|
||||
(fp_line (start -4.7 2) (end -4.7 3.9) (layer "F.SilkS") (width 0.12) (tstamp 7abeef8d-db92-4e88-b3d6-7c7e4efa4938))
|
||||
(fp_line (start -4.7 -1.9) (end -4.7 0.1) (layer "F.SilkS") (width 0.12) (tstamp 9513b845-7495-41b4-99da-c8a12a5f4b76))
|
||||
(fp_line (start 4.7 2) (end 4.7 3.9) (layer "F.SilkS") (width 0.12) (tstamp bd122681-67e3-4c23-b564-57e345c7c818))
|
||||
(fp_line (start -4.7 3.9) (end 4.7 3.9) (layer "F.SilkS") (width 0.12) (tstamp f40329f5-4d09-479c-8f81-97fdcd13c5cd))
|
||||
(fp_line (start -5.32 -5.27) (end 5.32 -5.27) (layer "F.CrtYd") (width 0.05) (tstamp 3215d7dd-650e-4c6a-86e5-bc970c8d9c6c))
|
||||
(fp_line (start 5.32 -5.27) (end 5.32 4.15) (layer "F.CrtYd") (width 0.05) (tstamp 3b610068-7f90-495b-a772-9a6b7e6a55c9))
|
||||
(fp_line (start -5.32 4.15) (end 5.32 4.15) (layer "F.CrtYd") (width 0.05) (tstamp c38cb6a1-740b-49d2-b49e-f8ce3382fe48))
|
||||
(fp_line (start -5.32 -5.27) (end -5.32 4.15) (layer "F.CrtYd") (width 0.05) (tstamp d939342c-cab3-429e-ad71-738d34173267))
|
||||
(fp_line (start -4.47 -3.65) (end -4.47 3.65) (layer "F.Fab") (width 0.1) (tstamp 47095738-bb75-4e91-802c-f92840c443b3))
|
||||
(fp_line (start -4.47 -3.65) (end 4.47 -3.65) (layer "F.Fab") (width 0.1) (tstamp 6142486d-ba8a-4b38-a6ca-d52b6a020ef2))
|
||||
(fp_line (start -4.47 3.65) (end 4.47 3.65) (layer "F.Fab") (width 0.1) (tstamp 84966fee-864e-4cdc-8345-c62bca33694f))
|
||||
(fp_line (start 4.47 -3.65) (end 4.47 3.65) (layer "F.Fab") (width 0.1) (tstamp f6b3cf35-21be-4e1f-8c99-3404cfc41d3f))
|
||||
(pad "" np_thru_hole circle (at 2.89 -2.6) (size 0.65 0.65) (drill 0.65) (layers *.Cu *.Mask) (tstamp 4558f1f0-2fa3-46e1-a220-284fa2707bb5))
|
||||
(pad "" np_thru_hole circle (at -2.89 -2.6) (size 0.65 0.65) (drill 0.65) (layers *.Cu *.Mask) (tstamp e13b4b37-788a-41d5-87ca-c66be43ee32d))
|
||||
(pad "A1" smd rect (at -3.25 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 245fae56-8b58-4bd8-bbf1-36624dc3fa3e))
|
||||
(pad "A4" smd rect (at -2.45 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 412cd3c1-0d89-4ca6-be0e-1b17d8471f5a))
|
||||
(pad "A5" smd rect (at -1.25 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 93953890-acba-456b-bb6d-b1e79179ffa0))
|
||||
(pad "A6" smd rect (at -0.25 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 6a642da3-3122-4031-a6e9-68498b0f5bb9))
|
||||
(pad "A7" smd rect (at 0.25 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 01b9b129-063c-4bae-b620-9610006254cb))
|
||||
(pad "A8" smd rect (at 1.25 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 46ecdf8a-0917-4257-a388-b77e7451dc23))
|
||||
(pad "A9" smd rect (at 2.45 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp a35f3da7-7460-43f1-99b7-9ed521817778))
|
||||
(pad "A12" smd rect (at 3.25 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 3795b0f1-50f9-473e-9d26-381fc08b3c2d))
|
||||
(pad "B1" smd rect (at 3.25 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp c9e8a0db-2a60-41d9-b783-6c4e64a8fb5d))
|
||||
(pad "B4" smd rect (at 2.45 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 51b193ee-c8c2-4ee6-8d8c-14b79a2c1520))
|
||||
(pad "B5" smd rect (at 1.75 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 45f8f791-f545-4341-9848-fb81a03703a6))
|
||||
(pad "B6" smd rect (at 0.75 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp efc27675-62a0-44de-8210-29c2190dd309))
|
||||
(pad "B7" smd rect (at -0.75 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 96622dcb-c1cc-4b7d-8455-8cd0ce1e5c34))
|
||||
(pad "B8" smd rect (at -1.75 -4.045) (size 0.3 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 09bb6e12-e7e5-4788-b43e-4cc6c50a557a))
|
||||
(pad "B9" smd rect (at -2.45 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 70539c09-2020-4a42-a156-43d1513170d0))
|
||||
(pad "B12" smd rect (at -3.25 -4.045) (size 0.6 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp eda87c04-3a59-4e2c-a9bd-f59ed31672aa))
|
||||
(pad "S1" thru_hole oval (at -4.32 1.05) (size 1 1.6) (drill oval 0.6 1.2) (layers *.Cu *.Mask) (tstamp 5991ca6f-c5c1-4692-8fe9-cf4b7ca50c4b))
|
||||
(pad "S1" thru_hole oval (at -4.32 -3.13) (size 1 2.1) (drill oval 0.6 1.7) (layers *.Cu *.Mask) (tstamp 69c3dc88-a37e-49ef-ae4d-497d3191ad5b))
|
||||
(pad "S1" thru_hole oval (at 4.32 -3.13) (size 1 2.1) (drill oval 0.6 1.7) (layers *.Cu *.Mask) (tstamp af5ae63f-ef36-487e-a6b8-831b84890f25))
|
||||
(pad "S1" thru_hole oval (at 4.32 1.05) (size 1 1.6) (drill oval 0.6 1.2) (layers *.Cu *.Mask) (tstamp e783dde5-f762-4528-9b55-9220820b0b1c))
|
||||
(model "${KICAD6_3DMODEL_DIR}/Connector_USB.3dshapes/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,70 @@
|
|||
(footprint "XDCR_LIS3DHTR" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tedit 63C5A93A)
|
||||
(property "MANUFACTURER" "STMicroelectronics")
|
||||
(property "MAXIMUM_PACKAGE_HEIGHT" "1mm")
|
||||
(property "PARTREV" "2")
|
||||
(property "STANDARD" "Manufacturer Recommendations")
|
||||
(property "Sheetfile" "Remote.kicad_sch")
|
||||
(property "Sheetname" "")
|
||||
(attr smd)
|
||||
(fp_text reference "U5" (at 2.95 0 180) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 374a0097-2de3-4564-b932-de03f826f800)
|
||||
)
|
||||
(fp_text value "LIS3DHTR" (at 2.214931 2.197712) (layer "F.Fab")
|
||||
(effects (font (size 0.480549 0.480549) (thickness 0.15)))
|
||||
(tstamp 52e1e569-3bfd-4f45-a6db-9e1968d681e6)
|
||||
)
|
||||
(fp_line (start -1.5 1.5) (end -0.99 1.5) (layer "F.SilkS") (width 0.127) (tstamp 2081c3ad-5787-4332-ba82-277e5241665b))
|
||||
(fp_line (start 0.99 1.5) (end 1.5 1.5) (layer "F.SilkS") (width 0.127) (tstamp 2a1b7413-e170-4045-9dac-153a3b21bf7e))
|
||||
(fp_line (start -0.99 -1.5) (end -1.5 -1.5) (layer "F.SilkS") (width 0.127) (tstamp 9322c011-81bb-41c7-85f5-40c67b722006))
|
||||
(fp_line (start 0.99 -1.5) (end 1.5 -1.5) (layer "F.SilkS") (width 0.127) (tstamp a2669417-e994-4b1d-b2f2-3dce289d6e30))
|
||||
(fp_circle (center -2 -1.275) (end -1.9 -1.275) (layer "F.SilkS") (width 0.2) (fill none) (tstamp d50ae10a-f8a6-439b-9dad-9976c141662c))
|
||||
(fp_line (start 1.75 -1.75) (end -1.75 -1.75) (layer "F.CrtYd") (width 0.05) (tstamp 1da0581e-0634-4f86-a649-40e28a617db1))
|
||||
(fp_line (start 1.75 1.75) (end 1.75 -1.75) (layer "F.CrtYd") (width 0.05) (tstamp 90778098-11d2-4387-8034-6fb9e7499f01))
|
||||
(fp_line (start -1.75 -1.75) (end -1.75 1.75) (layer "F.CrtYd") (width 0.05) (tstamp e71ab22f-26b3-470d-9261-9b9561982f75))
|
||||
(fp_line (start -1.75 1.75) (end 1.75 1.75) (layer "F.CrtYd") (width 0.05) (tstamp fe2760a0-53e7-4010-891f-881eab63f2a9))
|
||||
(fp_line (start 1.5 1.5) (end 1.5 -1.5) (layer "F.Fab") (width 0.127) (tstamp 47630037-5ac1-48a3-bd98-d1a71262f6f6))
|
||||
(fp_line (start -1.5 -1.5) (end -1.5 1.5) (layer "F.Fab") (width 0.127) (tstamp 556f507a-48ab-4f3c-8abb-3f0f3d91aa76))
|
||||
(fp_line (start 1.5 -1.5) (end -1.5 -1.5) (layer "F.Fab") (width 0.127) (tstamp bd3ff0a5-6d77-4d67-8d0b-b4976c46846c))
|
||||
(fp_line (start -1.5 1.5) (end 1.5 1.5) (layer "F.Fab") (width 0.127) (tstamp ebb0933f-e66f-4aba-880c-7fca8b9f79d8))
|
||||
(fp_circle (center -2 -1.275) (end -1.9 -1.275) (layer "F.Fab") (width 0.2) (fill none) (tstamp c94c5700-aec0-41d1-a114-505756d804f9))
|
||||
(pad "1" smd rect (at -1.3 -1 180) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 7ce2738e-4072-48e7-a518-8a580ecee0f5))
|
||||
(pad "2" smd rect (at -1.3 -0.5 180) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 04ea73f6-28d1-4d85-9bb8-4e5a753b3f65))
|
||||
(pad "3" smd rect (at -1.3 0 180) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 482ffa32-4456-4c86-b66d-dceb6c27eeac))
|
||||
(pad "4" smd rect (at -1.3 0.5 180) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp e8e4d6e7-cc95-4968-94fe-07b9bfef73f0))
|
||||
(pad "5" smd rect (at -1.3 1 180) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 3b983567-e799-4945-857c-c5f9170ab567))
|
||||
(pad "6" smd rect (at -0.5 1.3 90) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 28f8fe79-c66e-4459-92d7-108b74968d32))
|
||||
(pad "7" smd rect (at 0 1.3 90) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 914f59c3-ce05-4f40-bfdc-047facb8783a))
|
||||
(pad "8" smd rect (at 0.5 1.3 90) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 5f14e7da-b7d5-407f-95b8-eb7749d2a093))
|
||||
(pad "9" smd rect (at 1.3 1) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 519d0b87-5fd1-417c-b3ea-eecd61e657e0))
|
||||
(pad "10" smd rect (at 1.3 0.5) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp d6e846ea-ffd3-4433-90f9-6fa4e33544d3))
|
||||
(pad "11" smd rect (at 1.3 0) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp a91a8bcf-e4a1-416e-8222-7ea6b67da753))
|
||||
(pad "12" smd rect (at 1.3 -0.5) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 6c727f12-b586-47f1-9a08-5eb12ad424b2))
|
||||
(pad "13" smd rect (at 1.3 -1) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 90f01d37-428b-4c39-804c-41bccfcd87d4))
|
||||
(pad "14" smd rect (at 0.5 -1.3 90) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp 7badf7c8-880d-4196-b7b4-8fc3eb5d54f4))
|
||||
(pad "15" smd rect (at 0 -1.3 90) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp d23e0d93-144a-486b-b85f-df6457adfb2f))
|
||||
(pad "16" smd rect (at -0.5 -1.3 90) (size 0.8 0.3) (layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(solder_paste_margin_ratio -0.05) (tstamp ff5fb629-bba5-476c-9a80-43cb06181e4d))
|
||||
(model "${KICAD_USER_3DMODEL_DIR}/LIS3DHTR.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz -90 0 0))
|
||||
)
|
||||
)
|
815
PCB/project_libraries/symbols/omoteLib.bak
Normal file
815
PCB/project_libraries/symbols/omoteLib.bak
Normal file
|
@ -0,0 +1,815 @@
|
|||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "Conn_01x50" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "J" (at 0 63.5 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "Conn_01x50" (at 0 -66.04 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "omoteLib:TFT_2.83IN_240X320_50PIN" (at 1.27 -68.58 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 0 12.7 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "connector" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Generic connector, single row, 01x50" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "Conn_01x50_1_1"
|
||||
(rectangle (start -1.27 -63.373) (end 0 -63.627)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -60.833) (end 0 -61.087)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -58.293) (end 0 -58.547)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -55.753) (end 0 -56.007)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -53.213) (end 0 -53.467)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -50.673) (end 0 -50.927)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -48.133) (end 0 -48.387)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -45.593) (end 0 -45.847)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -43.053) (end 0 -43.307)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -40.513) (end 0 -40.767)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -37.973) (end 0 -38.227)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -35.433) (end 0 -35.687)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -32.893) (end 0 -33.147)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -30.353) (end 0 -30.607)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -27.813) (end 0 -28.067)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -25.273) (end 0 -25.527)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -22.733) (end 0 -22.987)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -20.193) (end 0 -20.447)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -17.653) (end 0 -17.907)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -15.113) (end 0 -15.367)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -12.573) (end 0 -12.827)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -10.033) (end 0 -10.287)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -7.493) (end 0 -7.747)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -4.953) (end 0 -5.207)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -2.413) (end 0 -2.667)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 0.127) (end 0 -0.127)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 2.667) (end 0 2.413)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 5.207) (end 0 4.953)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 7.747) (end 0 7.493)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 10.287) (end 0 10.033)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 12.827) (end 0 12.573)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 15.367) (end 0 15.113)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 17.907) (end 0 17.653)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 20.447) (end 0 20.193)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 22.987) (end 0 22.733)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 25.527) (end 0 25.273)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 28.067) (end 0 27.813)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 30.607) (end 0 30.353)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 33.147) (end 0 32.893)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 35.687) (end 0 35.433)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 38.227) (end 0 37.973)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 40.767) (end 0 40.513)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 43.307) (end 0 43.053)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 45.847) (end 0 45.593)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 48.387) (end 0 48.133)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 50.927) (end 0 50.673)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 53.467) (end 0 53.213)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 56.007) (end 0 55.753)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 58.547) (end 0 58.293)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 61.087) (end 0 60.833)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 62.23) (end 1.27 -64.77)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(pin passive line (at -5.08 60.96 0) (length 3.81)
|
||||
(name "Pin_1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 38.1 0) (length 3.81)
|
||||
(name "Pin_10" (effects (font (size 1.27 1.27))))
|
||||
(number "10" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 35.56 0) (length 3.81)
|
||||
(name "Pin_11" (effects (font (size 1.27 1.27))))
|
||||
(number "11" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 33.02 0) (length 3.81)
|
||||
(name "Pin_12" (effects (font (size 1.27 1.27))))
|
||||
(number "12" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 30.48 0) (length 3.81)
|
||||
(name "Pin_13" (effects (font (size 1.27 1.27))))
|
||||
(number "13" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 27.94 0) (length 3.81)
|
||||
(name "Pin_14" (effects (font (size 1.27 1.27))))
|
||||
(number "14" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 25.4 0) (length 3.81)
|
||||
(name "Pin_15" (effects (font (size 1.27 1.27))))
|
||||
(number "15" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 22.86 0) (length 3.81)
|
||||
(name "Pin_16" (effects (font (size 1.27 1.27))))
|
||||
(number "16" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 20.32 0) (length 3.81)
|
||||
(name "Pin_17" (effects (font (size 1.27 1.27))))
|
||||
(number "17" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 17.78 0) (length 3.81)
|
||||
(name "Pin_18" (effects (font (size 1.27 1.27))))
|
||||
(number "18" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 15.24 0) (length 3.81)
|
||||
(name "Pin_19" (effects (font (size 1.27 1.27))))
|
||||
(number "19" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 58.42 0) (length 3.81)
|
||||
(name "Pin_2" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 12.7 0) (length 3.81)
|
||||
(name "Pin_20" (effects (font (size 1.27 1.27))))
|
||||
(number "20" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 10.16 0) (length 3.81)
|
||||
(name "Pin_21" (effects (font (size 1.27 1.27))))
|
||||
(number "21" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 7.62 0) (length 3.81)
|
||||
(name "Pin_22" (effects (font (size 1.27 1.27))))
|
||||
(number "22" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 5.08 0) (length 3.81)
|
||||
(name "Pin_23" (effects (font (size 1.27 1.27))))
|
||||
(number "23" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 2.54 0) (length 3.81)
|
||||
(name "Pin_24" (effects (font (size 1.27 1.27))))
|
||||
(number "24" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 0 0) (length 3.81)
|
||||
(name "Pin_25" (effects (font (size 1.27 1.27))))
|
||||
(number "25" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -2.54 0) (length 3.81)
|
||||
(name "Pin_26" (effects (font (size 1.27 1.27))))
|
||||
(number "26" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -5.08 0) (length 3.81)
|
||||
(name "Pin_27" (effects (font (size 1.27 1.27))))
|
||||
(number "27" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -7.62 0) (length 3.81)
|
||||
(name "Pin_28" (effects (font (size 1.27 1.27))))
|
||||
(number "28" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -10.16 0) (length 3.81)
|
||||
(name "Pin_29" (effects (font (size 1.27 1.27))))
|
||||
(number "29" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 55.88 0) (length 3.81)
|
||||
(name "Pin_3" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -12.7 0) (length 3.81)
|
||||
(name "Pin_30" (effects (font (size 1.27 1.27))))
|
||||
(number "30" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -15.24 0) (length 3.81)
|
||||
(name "Pin_31" (effects (font (size 1.27 1.27))))
|
||||
(number "31" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -17.78 0) (length 3.81)
|
||||
(name "Pin_32" (effects (font (size 1.27 1.27))))
|
||||
(number "32" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -20.32 0) (length 3.81)
|
||||
(name "Pin_33" (effects (font (size 1.27 1.27))))
|
||||
(number "33" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -22.86 0) (length 3.81)
|
||||
(name "Pin_34" (effects (font (size 1.27 1.27))))
|
||||
(number "34" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -25.4 0) (length 3.81)
|
||||
(name "Pin_35" (effects (font (size 1.27 1.27))))
|
||||
(number "35" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -27.94 0) (length 3.81)
|
||||
(name "Pin_36" (effects (font (size 1.27 1.27))))
|
||||
(number "36" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -30.48 0) (length 3.81)
|
||||
(name "Pin_37" (effects (font (size 1.27 1.27))))
|
||||
(number "37" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -33.02 0) (length 3.81)
|
||||
(name "Pin_38" (effects (font (size 1.27 1.27))))
|
||||
(number "38" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -35.56 0) (length 3.81)
|
||||
(name "Pin_39" (effects (font (size 1.27 1.27))))
|
||||
(number "39" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 53.34 0) (length 3.81)
|
||||
(name "Pin_4" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -38.1 0) (length 3.81)
|
||||
(name "Pin_40" (effects (font (size 1.27 1.27))))
|
||||
(number "40" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -40.64 0) (length 3.81)
|
||||
(name "Pin_41" (effects (font (size 1.27 1.27))))
|
||||
(number "41" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -43.18 0) (length 3.81)
|
||||
(name "Pin_41" (effects (font (size 1.27 1.27))))
|
||||
(number "42" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -45.72 0) (length 3.81)
|
||||
(name "Pin_43" (effects (font (size 1.27 1.27))))
|
||||
(number "43" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -48.26 0) (length 3.81)
|
||||
(name "Pin_44" (effects (font (size 1.27 1.27))))
|
||||
(number "44" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -50.8 0) (length 3.81)
|
||||
(name "Pin_45" (effects (font (size 1.27 1.27))))
|
||||
(number "45" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -53.34 0) (length 3.81)
|
||||
(name "Pin_46" (effects (font (size 1.27 1.27))))
|
||||
(number "46" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -55.88 0) (length 3.81)
|
||||
(name "Pin_47" (effects (font (size 1.27 1.27))))
|
||||
(number "47" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -58.42 0) (length 3.81)
|
||||
(name "Pin_48" (effects (font (size 1.27 1.27))))
|
||||
(number "48" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -60.96 0) (length 3.81)
|
||||
(name "Pin_49" (effects (font (size 1.27 1.27))))
|
||||
(number "49" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 50.8 0) (length 3.81)
|
||||
(name "Pin_5" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -63.5 0) (length 3.81)
|
||||
(name "Pin_50" (effects (font (size 1.27 1.27))))
|
||||
(number "50" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 48.26 0) (length 3.81)
|
||||
(name "Pin_6" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 45.72 0) (length 3.81)
|
||||
(name "Pin_7" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 43.18 0) (length 3.81)
|
||||
(name "Pin_8" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 40.64 0) (length 3.81)
|
||||
(name "Pin_9" (effects (font (size 1.27 1.27))))
|
||||
(number "9" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 -68.58 90) (length 3.81)
|
||||
(name "MP" (effects (font (size 1.27 1.27))))
|
||||
(number "MP" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "LIS3DHTR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U5" (at 0 19.05 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "LIS3DHTR" (at 0 16.51 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "XDCR_LIS3DHTR" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.st.com/content/ccc/resource/technical/document/datasheet/3c/ae/50/85/d6/b1/46/fe/CD00274221.pdf/files/CD00274221.pdf/jcr:content/translations/en.CD00274221.pdf" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "MAXIMUM_PACKAGE_HEIGHT" "1mm" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "STANDARD" "Manufacturer Recommendations" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MANUFACTURER" "STMicroelectronics" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "PARTREV" "2" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(symbol "LIS3DHTR_0_0"
|
||||
(rectangle (start -11.43 13.97) (end 11.43 -13.97)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(pin power_in line (at 16.51 8.89 180) (length 5.08)
|
||||
(name "VDD_IO" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin passive line (at 16.51 -6.35 180) (length 5.08)
|
||||
(name "RES" (effects (font (size 1.016 1.016))))
|
||||
(number "10" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin output line (at 16.51 2.54 180) (length 5.08)
|
||||
(name "INT1" (effects (font (size 1.016 1.016))))
|
||||
(number "11" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 16.51 -11.43 180) (length 5.08)
|
||||
(name "GND" (effects (font (size 1.016 1.016))))
|
||||
(number "12" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 6.35 0) (length 5.08)
|
||||
(name "ADC3" (effects (font (size 1.016 1.016))))
|
||||
(number "13" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 16.51 11.43 180) (length 5.08)
|
||||
(name "VDD" (effects (font (size 1.016 1.016))))
|
||||
(number "14" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 8.89 0) (length 5.08)
|
||||
(name "ADC2" (effects (font (size 1.016 1.016))))
|
||||
(number "15" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 11.43 0) (length 5.08)
|
||||
(name "ADC1" (effects (font (size 1.016 1.016))))
|
||||
(number "16" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 2.54 0) (length 5.08)
|
||||
(name "NC" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 0 0) (length 5.08)
|
||||
(name "NC" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input clock (at -16.51 -6.35 0) (length 5.08)
|
||||
(name "SCL/SPC" (effects (font (size 1.016 1.016))))
|
||||
(number "4" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 16.51 -8.89 180) (length 5.08)
|
||||
(name "GND" (effects (font (size 1.016 1.016))))
|
||||
(number "5" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -16.51 -8.89 0) (length 5.08)
|
||||
(name "SDA/SDI/SDO" (effects (font (size 1.016 1.016))))
|
||||
(number "6" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -16.51 -11.43 0) (length 5.08)
|
||||
(name "SDO/SA0" (effects (font (size 1.016 1.016))))
|
||||
(number "7" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 -3.81 0) (length 5.08)
|
||||
(name "CS" (effects (font (size 1.016 1.016))))
|
||||
(number "8" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin output line (at 16.51 0 180) (length 5.08)
|
||||
(name "INT2" (effects (font (size 1.016 1.016))))
|
||||
(number "9" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "TSSP77038" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U6" (at -1.27 11.43 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "TSSP77038" (at -1.27 8.89 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "omoteLib:Heimdall vertical" (at -1.27 -11.43 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.vishay.com/docs/82470/tssp770.pdf" (at 16.51 7.62 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "opto IR receiver" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "IR Receiver Modules for Remote Control Systems" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "Vishay*MOLD*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "TSSP77038_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 -5.08)
|
||||
(xy 0.127 -5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 5.08)
|
||||
(xy 0.127 5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(text "DEMOD" (at -3.175 0.254 900)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
)
|
||||
(symbol "TSSP77038_0_1"
|
||||
(rectangle (start -10.16 6.35) (end 7.62 -8.89)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(rectangle (start -6.096 5.588) (end 0.127 -5.588)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.763 0.381)
|
||||
(xy -9.652 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.763 0.381)
|
||||
(xy -9.271 0.381)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.763 0.381)
|
||||
(xy -8.763 0.889)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.636 -0.635)
|
||||
(xy -9.525 0.254)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.636 -0.635)
|
||||
(xy -9.144 -0.635)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.636 -0.635)
|
||||
(xy -8.636 -0.127)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.382 -1.016)
|
||||
(xy -6.731 -1.016)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -2.921)
|
||||
(xy 0.127 -2.921)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -1.905)
|
||||
(xy 1.27 -3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.397 -3.556)
|
||||
(xy 1.524 -3.556)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.651 -3.556)
|
||||
(xy 1.524 -3.556)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.651 -3.556)
|
||||
(xy 1.651 -3.302)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 0)
|
||||
(xy 1.905 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 4.445)
|
||||
(xy 1.905 5.08)
|
||||
(xy 2.54 5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.382 0.635)
|
||||
(xy -6.731 0.635)
|
||||
(xy -7.62 -1.016)
|
||||
(xy -8.382 0.635)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -6.096 1.397)
|
||||
(xy -7.62 1.397)
|
||||
(xy -7.62 -1.778)
|
||||
(xy -6.096 -1.778)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -3.175)
|
||||
(xy 1.905 -3.81)
|
||||
(xy 1.905 -5.08)
|
||||
(xy 2.54 -5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -2.54)
|
||||
(xy 1.905 -1.905)
|
||||
(xy 1.905 0)
|
||||
(xy 2.54 0)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start 2.54 1.27) (end 1.27 4.445)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "TSSP77038_1_1"
|
||||
(pin power_in line (at 10.16 -5.08 180) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin output line (at 10.16 0 180) (length 2.54)
|
||||
(name "OUT" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 10.16 5.08 180) (length 2.54)
|
||||
(name "Vs" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 10.16 -7.62 180) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "USBLC6-2P6" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U4" (at -7.62 8.89 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "USBLC6-2P6" (at 2.54 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-666" (at -1.27 17.78 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.st.com/resource/en/datasheet/usblc6-2.pdf" (at 8.89 -6.35 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "usb ethernet video" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Very low capacitance ESD protection diode, 2 data-line, SOT-666" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "SOT?666*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "USBLC6-2P6_0_1"
|
||||
(rectangle (start -7.62 7.62) (end 7.62 -2.54)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
)
|
||||
(symbol "USBLC6-2P6_1_1"
|
||||
(pin passive line (at -10.16 3.81 0) (length 2.54)
|
||||
(name "I/O1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 -5.08 90) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -10.16 1.27 0) (length 2.54)
|
||||
(name "I/O2" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 10.16 1.27 180) (length 2.54)
|
||||
(name "I/O2" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 10.16 270) (length 2.54)
|
||||
(name "VBUS" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 10.16 3.81 180) (length 2.54)
|
||||
(name "I/O1" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
815
PCB/project_libraries/symbols/omoteLib.kicad_sym
Normal file
815
PCB/project_libraries/symbols/omoteLib.kicad_sym
Normal file
|
@ -0,0 +1,815 @@
|
|||
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
|
||||
(symbol "Conn_01x50" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "J" (at 0 63.5 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "Conn_01x50" (at 0 -66.04 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "omoteLib:TFT_2.83IN_240X320_50PIN" (at 1.27 -68.58 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (at 0 12.7 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "connector" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Generic connector, single row, 01x50" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "Connector*:*_1x??_*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "Conn_01x50_1_1"
|
||||
(rectangle (start -1.27 -63.373) (end 0 -63.627)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -60.833) (end 0 -61.087)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -58.293) (end 0 -58.547)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -55.753) (end 0 -56.007)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -53.213) (end 0 -53.467)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -50.673) (end 0 -50.927)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -48.133) (end 0 -48.387)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -45.593) (end 0 -45.847)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -43.053) (end 0 -43.307)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -40.513) (end 0 -40.767)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -37.973) (end 0 -38.227)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -35.433) (end 0 -35.687)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -32.893) (end 0 -33.147)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -30.353) (end 0 -30.607)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -27.813) (end 0 -28.067)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -25.273) (end 0 -25.527)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -22.733) (end 0 -22.987)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -20.193) (end 0 -20.447)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -17.653) (end 0 -17.907)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -15.113) (end 0 -15.367)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -12.573) (end 0 -12.827)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -10.033) (end 0 -10.287)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -7.493) (end 0 -7.747)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -4.953) (end 0 -5.207)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 -2.413) (end 0 -2.667)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 0.127) (end 0 -0.127)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 2.667) (end 0 2.413)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 5.207) (end 0 4.953)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 7.747) (end 0 7.493)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 10.287) (end 0 10.033)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 12.827) (end 0 12.573)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 15.367) (end 0 15.113)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 17.907) (end 0 17.653)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 20.447) (end 0 20.193)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 22.987) (end 0 22.733)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 25.527) (end 0 25.273)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 28.067) (end 0 27.813)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 30.607) (end 0 30.353)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 33.147) (end 0 32.893)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 35.687) (end 0 35.433)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 38.227) (end 0 37.973)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 40.767) (end 0 40.513)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 43.307) (end 0 43.053)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 45.847) (end 0 45.593)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 48.387) (end 0 48.133)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 50.927) (end 0 50.673)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 53.467) (end 0 53.213)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 56.007) (end 0 55.753)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 58.547) (end 0 58.293)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 61.087) (end 0 60.833)
|
||||
(stroke (width 0.1524) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start -1.27 62.23) (end 1.27 -64.77)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(pin passive line (at -5.08 60.96 0) (length 3.81)
|
||||
(name "Pin_1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 38.1 0) (length 3.81)
|
||||
(name "Pin_10" (effects (font (size 1.27 1.27))))
|
||||
(number "10" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 35.56 0) (length 3.81)
|
||||
(name "Pin_11" (effects (font (size 1.27 1.27))))
|
||||
(number "11" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 33.02 0) (length 3.81)
|
||||
(name "Pin_12" (effects (font (size 1.27 1.27))))
|
||||
(number "12" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 30.48 0) (length 3.81)
|
||||
(name "Pin_13" (effects (font (size 1.27 1.27))))
|
||||
(number "13" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 27.94 0) (length 3.81)
|
||||
(name "Pin_14" (effects (font (size 1.27 1.27))))
|
||||
(number "14" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 25.4 0) (length 3.81)
|
||||
(name "Pin_15" (effects (font (size 1.27 1.27))))
|
||||
(number "15" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 22.86 0) (length 3.81)
|
||||
(name "Pin_16" (effects (font (size 1.27 1.27))))
|
||||
(number "16" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 20.32 0) (length 3.81)
|
||||
(name "Pin_17" (effects (font (size 1.27 1.27))))
|
||||
(number "17" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 17.78 0) (length 3.81)
|
||||
(name "Pin_18" (effects (font (size 1.27 1.27))))
|
||||
(number "18" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 15.24 0) (length 3.81)
|
||||
(name "Pin_19" (effects (font (size 1.27 1.27))))
|
||||
(number "19" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 58.42 0) (length 3.81)
|
||||
(name "Pin_2" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 12.7 0) (length 3.81)
|
||||
(name "Pin_20" (effects (font (size 1.27 1.27))))
|
||||
(number "20" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 10.16 0) (length 3.81)
|
||||
(name "Pin_21" (effects (font (size 1.27 1.27))))
|
||||
(number "21" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 7.62 0) (length 3.81)
|
||||
(name "Pin_22" (effects (font (size 1.27 1.27))))
|
||||
(number "22" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 5.08 0) (length 3.81)
|
||||
(name "Pin_23" (effects (font (size 1.27 1.27))))
|
||||
(number "23" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 2.54 0) (length 3.81)
|
||||
(name "Pin_24" (effects (font (size 1.27 1.27))))
|
||||
(number "24" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 0 0) (length 3.81)
|
||||
(name "Pin_25" (effects (font (size 1.27 1.27))))
|
||||
(number "25" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -2.54 0) (length 3.81)
|
||||
(name "Pin_26" (effects (font (size 1.27 1.27))))
|
||||
(number "26" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -5.08 0) (length 3.81)
|
||||
(name "Pin_27" (effects (font (size 1.27 1.27))))
|
||||
(number "27" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -7.62 0) (length 3.81)
|
||||
(name "Pin_28" (effects (font (size 1.27 1.27))))
|
||||
(number "28" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -10.16 0) (length 3.81)
|
||||
(name "Pin_29" (effects (font (size 1.27 1.27))))
|
||||
(number "29" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 55.88 0) (length 3.81)
|
||||
(name "Pin_3" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -12.7 0) (length 3.81)
|
||||
(name "Pin_30" (effects (font (size 1.27 1.27))))
|
||||
(number "30" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -15.24 0) (length 3.81)
|
||||
(name "Pin_31" (effects (font (size 1.27 1.27))))
|
||||
(number "31" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -17.78 0) (length 3.81)
|
||||
(name "Pin_32" (effects (font (size 1.27 1.27))))
|
||||
(number "32" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -20.32 0) (length 3.81)
|
||||
(name "Pin_33" (effects (font (size 1.27 1.27))))
|
||||
(number "33" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -22.86 0) (length 3.81)
|
||||
(name "Pin_34" (effects (font (size 1.27 1.27))))
|
||||
(number "34" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -25.4 0) (length 3.81)
|
||||
(name "Pin_35" (effects (font (size 1.27 1.27))))
|
||||
(number "35" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -27.94 0) (length 3.81)
|
||||
(name "Pin_36" (effects (font (size 1.27 1.27))))
|
||||
(number "36" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -30.48 0) (length 3.81)
|
||||
(name "Pin_37" (effects (font (size 1.27 1.27))))
|
||||
(number "37" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -33.02 0) (length 3.81)
|
||||
(name "Pin_38" (effects (font (size 1.27 1.27))))
|
||||
(number "38" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -35.56 0) (length 3.81)
|
||||
(name "Pin_39" (effects (font (size 1.27 1.27))))
|
||||
(number "39" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 53.34 0) (length 3.81)
|
||||
(name "Pin_4" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -38.1 0) (length 3.81)
|
||||
(name "Pin_40" (effects (font (size 1.27 1.27))))
|
||||
(number "40" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -40.64 0) (length 3.81)
|
||||
(name "Pin_41" (effects (font (size 1.27 1.27))))
|
||||
(number "41" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -43.18 0) (length 3.81)
|
||||
(name "Pin_41" (effects (font (size 1.27 1.27))))
|
||||
(number "42" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -45.72 0) (length 3.81)
|
||||
(name "Pin_43" (effects (font (size 1.27 1.27))))
|
||||
(number "43" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -48.26 0) (length 3.81)
|
||||
(name "Pin_44" (effects (font (size 1.27 1.27))))
|
||||
(number "44" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -50.8 0) (length 3.81)
|
||||
(name "Pin_45" (effects (font (size 1.27 1.27))))
|
||||
(number "45" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -53.34 0) (length 3.81)
|
||||
(name "Pin_46" (effects (font (size 1.27 1.27))))
|
||||
(number "46" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -55.88 0) (length 3.81)
|
||||
(name "Pin_47" (effects (font (size 1.27 1.27))))
|
||||
(number "47" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -58.42 0) (length 3.81)
|
||||
(name "Pin_48" (effects (font (size 1.27 1.27))))
|
||||
(number "48" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -60.96 0) (length 3.81)
|
||||
(name "Pin_49" (effects (font (size 1.27 1.27))))
|
||||
(number "49" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 50.8 0) (length 3.81)
|
||||
(name "Pin_5" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 -63.5 0) (length 3.81)
|
||||
(name "Pin_50" (effects (font (size 1.27 1.27))))
|
||||
(number "50" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 48.26 0) (length 3.81)
|
||||
(name "Pin_6" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 45.72 0) (length 3.81)
|
||||
(name "Pin_7" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 43.18 0) (length 3.81)
|
||||
(name "Pin_8" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -5.08 40.64 0) (length 3.81)
|
||||
(name "Pin_9" (effects (font (size 1.27 1.27))))
|
||||
(number "9" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 -68.58 90) (length 3.81)
|
||||
(name "MP" (effects (font (size 1.27 1.27))))
|
||||
(number "MP" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "LIS3DHTR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U5" (at 0 19.05 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "LIS3DHTR" (at 0 16.51 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "omoteLib:XDCR_LIS3DHTR" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.st.com/content/ccc/resource/technical/document/datasheet/3c/ae/50/85/d6/b1/46/fe/CD00274221.pdf/files/CD00274221.pdf/jcr:content/translations/en.CD00274221.pdf" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "MAXIMUM_PACKAGE_HEIGHT" "1mm" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "STANDARD" "Manufacturer Recommendations" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MANUFACTURER" "STMicroelectronics" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "PARTREV" "2" (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(symbol "LIS3DHTR_0_0"
|
||||
(rectangle (start -11.43 13.97) (end 11.43 -13.97)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(pin power_in line (at 16.51 8.89 180) (length 5.08)
|
||||
(name "VDD_IO" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin passive line (at 16.51 -6.35 180) (length 5.08)
|
||||
(name "RES" (effects (font (size 1.016 1.016))))
|
||||
(number "10" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin output line (at 16.51 2.54 180) (length 5.08)
|
||||
(name "INT1" (effects (font (size 1.016 1.016))))
|
||||
(number "11" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 16.51 -11.43 180) (length 5.08)
|
||||
(name "GND" (effects (font (size 1.016 1.016))))
|
||||
(number "12" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 6.35 0) (length 5.08)
|
||||
(name "ADC3" (effects (font (size 1.016 1.016))))
|
||||
(number "13" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 16.51 11.43 180) (length 5.08)
|
||||
(name "VDD" (effects (font (size 1.016 1.016))))
|
||||
(number "14" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 8.89 0) (length 5.08)
|
||||
(name "ADC2" (effects (font (size 1.016 1.016))))
|
||||
(number "15" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 11.43 0) (length 5.08)
|
||||
(name "ADC1" (effects (font (size 1.016 1.016))))
|
||||
(number "16" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 2.54 0) (length 5.08)
|
||||
(name "NC" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 0 0) (length 5.08)
|
||||
(name "NC" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input clock (at -16.51 -6.35 0) (length 5.08)
|
||||
(name "SCL/SPC" (effects (font (size 1.016 1.016))))
|
||||
(number "4" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin power_in line (at 16.51 -8.89 180) (length 5.08)
|
||||
(name "GND" (effects (font (size 1.016 1.016))))
|
||||
(number "5" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -16.51 -8.89 0) (length 5.08)
|
||||
(name "SDA/SDI/SDO" (effects (font (size 1.016 1.016))))
|
||||
(number "6" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin bidirectional line (at -16.51 -11.43 0) (length 5.08)
|
||||
(name "SDO/SA0" (effects (font (size 1.016 1.016))))
|
||||
(number "7" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -16.51 -3.81 0) (length 5.08)
|
||||
(name "CS" (effects (font (size 1.016 1.016))))
|
||||
(number "8" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin output line (at 16.51 0 180) (length 5.08)
|
||||
(name "INT2" (effects (font (size 1.016 1.016))))
|
||||
(number "9" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "TSSP77038" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U6" (at -1.27 11.43 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "TSSP77038" (at -1.27 8.89 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "omoteLib:Heimdall vertical" (at -1.27 -11.43 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.vishay.com/docs/82470/tssp770.pdf" (at 16.51 7.62 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "opto IR receiver" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "IR Receiver Modules for Remote Control Systems" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "Vishay*MOLD*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "TSSP77038_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 -5.08)
|
||||
(xy 0.127 -5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 5.08)
|
||||
(xy 0.127 5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(text "DEMOD" (at -3.175 0.254 900)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
)
|
||||
(symbol "TSSP77038_0_1"
|
||||
(rectangle (start -10.16 6.35) (end 7.62 -8.89)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(rectangle (start -6.096 5.588) (end 0.127 -5.588)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.763 0.381)
|
||||
(xy -9.652 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.763 0.381)
|
||||
(xy -9.271 0.381)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.763 0.381)
|
||||
(xy -8.763 0.889)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.636 -0.635)
|
||||
(xy -9.525 0.254)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.636 -0.635)
|
||||
(xy -9.144 -0.635)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.636 -0.635)
|
||||
(xy -8.636 -0.127)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.382 -1.016)
|
||||
(xy -6.731 -1.016)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -2.921)
|
||||
(xy 0.127 -2.921)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -1.905)
|
||||
(xy 1.27 -3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.397 -3.556)
|
||||
(xy 1.524 -3.556)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.651 -3.556)
|
||||
(xy 1.524 -3.556)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.651 -3.556)
|
||||
(xy 1.651 -3.302)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 0)
|
||||
(xy 1.905 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 4.445)
|
||||
(xy 1.905 5.08)
|
||||
(xy 2.54 5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.382 0.635)
|
||||
(xy -6.731 0.635)
|
||||
(xy -7.62 -1.016)
|
||||
(xy -8.382 0.635)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -6.096 1.397)
|
||||
(xy -7.62 1.397)
|
||||
(xy -7.62 -1.778)
|
||||
(xy -6.096 -1.778)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -3.175)
|
||||
(xy 1.905 -3.81)
|
||||
(xy 1.905 -5.08)
|
||||
(xy 2.54 -5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -2.54)
|
||||
(xy 1.905 -1.905)
|
||||
(xy 1.905 0)
|
||||
(xy 2.54 0)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(rectangle (start 2.54 1.27) (end 1.27 4.445)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "TSSP77038_1_1"
|
||||
(pin power_in line (at 10.16 -5.08 180) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin output line (at 10.16 0 180) (length 2.54)
|
||||
(name "OUT" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 10.16 5.08 180) (length 2.54)
|
||||
(name "Vs" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 10.16 -7.62 180) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "USBLC6-2P6" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U4" (at -7.62 8.89 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "USBLC6-2P6" (at 2.54 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "Package_TO_SOT_SMD:SOT-666" (at -1.27 17.78 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.st.com/resource/en/datasheet/usblc6-2.pdf" (at 8.89 -6.35 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "usb ethernet video" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Very low capacitance ESD protection diode, 2 data-line, SOT-666" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "SOT?666*" (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "USBLC6-2P6_0_1"
|
||||
(rectangle (start -7.62 7.62) (end 7.62 -2.54)
|
||||
(stroke (width 0.254) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
)
|
||||
(symbol "USBLC6-2P6_1_1"
|
||||
(pin passive line (at -10.16 3.81 0) (length 2.54)
|
||||
(name "I/O1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 -5.08 90) (length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at -10.16 1.27 0) (length 2.54)
|
||||
(name "I/O2" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 10.16 1.27 180) (length 2.54)
|
||||
(name "I/O2" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 10.16 270) (length 2.54)
|
||||
(name "VBUS" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 10.16 3.81 180) (length 2.54)
|
||||
(name "I/O1" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
82
Platformio/.vscode/settings.json
vendored
82
Platformio/.vscode/settings.json
vendored
|
@ -1,8 +1,86 @@
|
|||
{
|
||||
"cmake.configureOnOpen": false,
|
||||
"files.associations": {
|
||||
"*.json": "jsonc",
|
||||
"random": "cpp",
|
||||
"array": "cpp"
|
||||
"array": "cpp",
|
||||
"atomic": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cstring": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"deque": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"unordered_set": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"algorithm": "cpp",
|
||||
"functional": "cpp",
|
||||
"iterator": "cpp",
|
||||
"map": "cpp",
|
||||
"memory": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"numeric": "cpp",
|
||||
"optional": "cpp",
|
||||
"set": "cpp",
|
||||
"string": "cpp",
|
||||
"string_view": "cpp",
|
||||
"system_error": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"fstream": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"iomanip": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"iostream": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"new": "cpp",
|
||||
"ostream": "cpp",
|
||||
"sstream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"bit": "cpp",
|
||||
"compare": "cpp",
|
||||
"concepts": "cpp",
|
||||
"numbers": "cpp",
|
||||
"any": "cpp",
|
||||
"hash_map": "cpp",
|
||||
"strstream": "cpp",
|
||||
"bitset": "cpp",
|
||||
"charconv": "cpp",
|
||||
"chrono": "cpp",
|
||||
"complex": "cpp",
|
||||
"condition_variable": "cpp",
|
||||
"forward_list": "cpp",
|
||||
"list": "cpp",
|
||||
"ratio": "cpp",
|
||||
"format": "cpp",
|
||||
"future": "cpp",
|
||||
"mutex": "cpp",
|
||||
"semaphore": "cpp",
|
||||
"shared_mutex": "cpp",
|
||||
"span": "cpp",
|
||||
"stop_token": "cpp",
|
||||
"thread": "cpp",
|
||||
"cfenv": "cpp",
|
||||
"typeindex": "cpp",
|
||||
"valarray": "cpp",
|
||||
"variant": "cpp"
|
||||
},
|
||||
"cmake.sourceDirectory": "${workspaceFolder}/.pio/libdeps/esp32/Adafruit BusIO"
|
||||
"cmake.sourceDirectory": "${workspaceFolder}/.pio/libdeps/esp32/Adafruit BusIO",
|
||||
"editor.formatOnSave": true,
|
||||
"idf.portWin": "COM8"
|
||||
}
|
BIN
Platformio/HAL/Architecture.png
Normal file
BIN
Platformio/HAL/Architecture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
40
Platformio/HAL/Architecture.puml
Normal file
40
Platformio/HAL/Architecture.puml
Normal file
|
@ -0,0 +1,40 @@
|
|||
@startuml
|
||||
' KEY
|
||||
' --> : is a
|
||||
' *-- : must have
|
||||
' o-- : should have
|
||||
|
||||
namespace HAL{
|
||||
interface BatteryInterface
|
||||
interface WifiInterface
|
||||
interface OtherHWInterface
|
||||
|
||||
abstract HardwareAbstract
|
||||
|
||||
HardwareAbstract o-- BatteryInterface
|
||||
HardwareAbstract o-- WifiInterface
|
||||
HardwareAbstract o-- OtherHWInterface
|
||||
}
|
||||
|
||||
namespace Simulator{
|
||||
class BatterySimulator
|
||||
class WifiSimulator
|
||||
BatterySimulator --> HAL.BatteryInterface
|
||||
WifiSimulator --> HAL.WifiInterface
|
||||
}
|
||||
|
||||
namespace ESP32{
|
||||
class Battery
|
||||
class WifiHandler
|
||||
Battery --> HAL.BatteryInterface
|
||||
WifiHandler --> HAL.WifiInterface
|
||||
}
|
||||
|
||||
|
||||
namespace UI {
|
||||
class OmoteUI
|
||||
OmoteUI *-- HAL.HardwareAbstract
|
||||
}
|
||||
|
||||
|
||||
@enduml
|
5
Platformio/HAL/HardwareAbstract.cpp
Normal file
5
Platformio/HAL/HardwareAbstract.cpp
Normal file
|
@ -0,0 +1,5 @@
|
|||
#include "HardwareAbstract.hpp"
|
||||
|
||||
HardwareAbstract::HardwareAbstract(){
|
||||
|
||||
}
|
40
Platformio/HAL/HardwareAbstract.hpp
Normal file
40
Platformio/HAL/HardwareAbstract.hpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
// OMOTE Hardware Abstraction
|
||||
// 2023 Matthew Colvin
|
||||
#pragma once
|
||||
#include "BatteryInterface.h"
|
||||
#include "DisplayAbstract.h"
|
||||
#include "KeyPressAbstract.hpp"
|
||||
#include "wifiHandlerInterface.h"
|
||||
|
||||
#include "Notification.hpp"
|
||||
|
||||
#include <memory>
|
||||
|
||||
class HardwareAbstract {
|
||||
public:
|
||||
HardwareAbstract();
|
||||
|
||||
/// @brief Override in order to do setup of hardware devices post construction
|
||||
virtual void init() = 0;
|
||||
|
||||
/// @brief Override to processing in main thread
|
||||
virtual void loopHandler() = 0;
|
||||
|
||||
/// @brief Override to allow printing of a message for debugging
|
||||
/// @param message - Debug message
|
||||
virtual void debugPrint(const char *fmt, ...) = 0;
|
||||
|
||||
virtual std::shared_ptr<BatteryInterface> battery() = 0;
|
||||
virtual std::shared_ptr<DisplayAbstract> display() = 0;
|
||||
virtual std::shared_ptr<wifiHandlerInterface> wifi() = 0;
|
||||
virtual std::shared_ptr<KeyPressAbstract> keys() = 0;
|
||||
|
||||
virtual char getCurrentDevice() = 0;
|
||||
virtual void setCurrentDevice(char currentDevice) = 0;
|
||||
|
||||
virtual bool getWakeupByIMUEnabled() = 0;
|
||||
virtual void setWakeupByIMUEnabled(bool wakeupByIMUEnabled) = 0;
|
||||
|
||||
virtual uint16_t getSleepTimeout() = 0;
|
||||
virtual void setSleepTimeout(uint16_t sleepTimeout) = 0;
|
||||
};
|
20
Platformio/HAL/HardwareFactory.cpp
Normal file
20
Platformio/HAL/HardwareFactory.cpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
#include "HardwareFactory.hpp"
|
||||
|
||||
#if OMOTE_SIM
|
||||
#include "HardwareSimulator.hpp"
|
||||
#endif
|
||||
|
||||
#if OMOTE_ESP32
|
||||
#include "HardwareRevX.hpp"
|
||||
#endif
|
||||
|
||||
#if OMOTE_SIM
|
||||
std::unique_ptr<HardwareAbstract> HardwareFactory::mHardware =
|
||||
std::make_unique<HardwareSimulator>();
|
||||
#endif
|
||||
#if OMOTE_ESP32
|
||||
std::unique_ptr<HardwareAbstract> HardwareFactory::mHardware =
|
||||
std::make_unique<HardwareRevX>();
|
||||
#endif
|
||||
|
||||
HardwareAbstract &HardwareFactory::getAbstract() { return *mHardware; }
|
11
Platformio/HAL/HardwareFactory.hpp
Normal file
11
Platformio/HAL/HardwareFactory.hpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "HardwareAbstract.hpp"
|
||||
#include <memory>
|
||||
/**
|
||||
* @brief The HardwareFactory is responsible for making the
|
||||
*/
|
||||
class HardwareFactory {
|
||||
public:
|
||||
static HardwareAbstract &getAbstract();
|
||||
|
||||
static std::unique_ptr<HardwareAbstract> mHardware;
|
||||
};
|
9
Platformio/HAL/HardwareModules/BatteryInterface.h
Normal file
9
Platformio/HAL/HardwareModules/BatteryInterface.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
#include "Notification.hpp"
|
||||
|
||||
class BatteryInterface {
|
||||
public:
|
||||
BatteryInterface() = default;
|
||||
virtual int getPercentage() = 0;
|
||||
virtual bool isCharging() = 0;
|
||||
};
|
35
Platformio/HAL/HardwareModules/DisplayAbstract.cpp
Normal file
35
Platformio/HAL/HardwareModules/DisplayAbstract.cpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include "DisplayAbstract.h"
|
||||
|
||||
std::shared_ptr<DisplayAbstract> DisplayAbstract::mInstance = nullptr;
|
||||
|
||||
DisplayAbstract::DisplayAbstract(){
|
||||
lv_init();
|
||||
|
||||
lv_disp_draw_buf_init(&mdraw_buf, mbufA, mbufB,
|
||||
SCREEN_WIDTH * SCREEN_HEIGHT / 10);
|
||||
|
||||
// Initialize the display driver
|
||||
static lv_disp_drv_t disp_drv;
|
||||
lv_disp_drv_init(&disp_drv);
|
||||
disp_drv.hor_res = SCREEN_WIDTH;
|
||||
disp_drv.ver_res = SCREEN_HEIGHT;
|
||||
disp_drv.flush_cb = &DisplayAbstract::flushDisplayImpl;
|
||||
disp_drv.draw_buf = &mdraw_buf;
|
||||
lv_disp_drv_register(&disp_drv);
|
||||
|
||||
// Initialize the touchscreen driver
|
||||
static lv_indev_drv_t indev_drv;
|
||||
lv_indev_drv_init(&indev_drv);
|
||||
indev_drv.type = LV_INDEV_TYPE_POINTER;
|
||||
indev_drv.read_cb = &DisplayAbstract::screenInputImpl;
|
||||
lv_indev_drv_register(&indev_drv);
|
||||
|
||||
}
|
||||
|
||||
void DisplayAbstract::flushDisplayImpl(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {
|
||||
mInstance->flushDisplay(disp, area, color_p);
|
||||
}
|
||||
|
||||
void DisplayAbstract::screenInputImpl(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) {
|
||||
mInstance->screenInput(indev_driver, data);
|
||||
}
|
28
Platformio/HAL/HardwareModules/DisplayAbstract.h
Normal file
28
Platformio/HAL/HardwareModules/DisplayAbstract.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
#include <memory>
|
||||
#include "lvgl.h"
|
||||
class DisplayAbstract
|
||||
{
|
||||
public:
|
||||
DisplayAbstract();
|
||||
virtual void setBrightness(uint8_t brightness) = 0;
|
||||
virtual uint8_t getBrightness() = 0;
|
||||
virtual void turnOff() = 0;
|
||||
|
||||
protected:
|
||||
// Set this with a getInstance method in the Child Class
|
||||
static std::shared_ptr<DisplayAbstract> mInstance;
|
||||
|
||||
virtual void flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) = 0;
|
||||
virtual void screenInput(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) = 0;
|
||||
private:
|
||||
|
||||
// Used to satisfy LVGL APIs
|
||||
static void flushDisplayImpl(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
|
||||
static void screenInputImpl(lv_indev_drv_t *indev_driver, lv_indev_data_t *data);
|
||||
|
||||
// LVGL Screen Buffers
|
||||
lv_disp_draw_buf_t mdraw_buf;
|
||||
lv_color_t mbufA[SCREEN_WIDTH * SCREEN_HEIGHT / 10];
|
||||
lv_color_t mbufB[SCREEN_WIDTH * SCREEN_HEIGHT / 10];
|
||||
};
|
8
Platformio/HAL/HardwareModules/KeyPressAbstract.cpp
Normal file
8
Platformio/HAL/HardwareModules/KeyPressAbstract.cpp
Normal file
|
@ -0,0 +1,8 @@
|
|||
#include "KeyPressAbstract.hpp"
|
||||
|
||||
KeyPressAbstract::KeyPressAbstract() {}
|
||||
|
||||
void KeyPressAbstract::RegisterKeyPressHandler(
|
||||
std::function<bool(KeyPressAbstract::KeyEvent)> aKeyEventHandler) {
|
||||
mKeyEventHandler = std::move(aKeyEventHandler);
|
||||
}
|
73
Platformio/HAL/HardwareModules/KeyPressAbstract.hpp
Normal file
73
Platformio/HAL/HardwareModules/KeyPressAbstract.hpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
#pragma once
|
||||
#include "Notification.hpp"
|
||||
|
||||
#include <memory>
|
||||
class KeyPressAbstract {
|
||||
public:
|
||||
// Keys from Top Down left to right.
|
||||
enum class KeyId {
|
||||
Power,
|
||||
// Top 4 Buttons left to right
|
||||
Stop,
|
||||
Rewind,
|
||||
Play,
|
||||
FastForward,
|
||||
// Buttons around D Pad
|
||||
Menu,
|
||||
Info,
|
||||
Back,
|
||||
Source,
|
||||
// D Pad
|
||||
Up,
|
||||
Down,
|
||||
Left,
|
||||
Right,
|
||||
Center,
|
||||
// Volume Channel and 2 between
|
||||
VolUp,
|
||||
VolDown,
|
||||
Mute,
|
||||
Record,
|
||||
ChannelUp,
|
||||
ChannelDown,
|
||||
// Bottom 4 buttons left to right
|
||||
Aux1,
|
||||
Aux2,
|
||||
Aux3,
|
||||
Aux4,
|
||||
INVALID
|
||||
};
|
||||
|
||||
class KeyEvent {
|
||||
public:
|
||||
enum class Type { Press, Release, INVALID };
|
||||
|
||||
KeyEvent() = default;
|
||||
KeyEvent(const KeyId aId, const Type aType) : mId(aId), mType(aType) {}
|
||||
|
||||
KeyId mId = KeyId::INVALID;
|
||||
Type mType = Type::INVALID;
|
||||
};
|
||||
|
||||
KeyPressAbstract();
|
||||
|
||||
/// @brief Register a SINGLE handler to be used for proccessing keys
|
||||
/// @param aKeyEventHandler - Callable the Handles KeyEvent
|
||||
void RegisterKeyPressHandler(std::function<bool(KeyEvent)> aKeyEventHandler);
|
||||
|
||||
protected:
|
||||
/// @brief Function ment to be called regularly to allow
|
||||
/// proccesssing of key presses by calling mKeyEventHandler
|
||||
/// best case this is done on a seprate thread/task
|
||||
/// since it could take a while to handle a KeyPress
|
||||
virtual void HandleKeyPresses() = 0;
|
||||
|
||||
/// @brief Function to queue up Key events to be handled later on by
|
||||
/// HandleKeyPresses() hopefully on a seprate thread or task
|
||||
/// This function should be implemented in a way that makes it ISR
|
||||
/// safe
|
||||
/// @param aJustOccuredKeyEvent - A Key even that just occured
|
||||
virtual void QueueKeyEvent(KeyEvent aJustOccuredKeyEvent) = 0;
|
||||
|
||||
std::function<bool(KeyEvent)> mKeyEventHandler;
|
||||
};
|
17
Platformio/HAL/HardwareModules/UIInterface.h
Normal file
17
Platformio/HAL/HardwareModules/UIInterface.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
class UIInterface
|
||||
{
|
||||
public:
|
||||
virtual void setup() = 0;
|
||||
virtual void setup_ui() = 0;
|
||||
virtual void wifi_scan_complete(unsigned int size) = 0;
|
||||
virtual void clear_wifi_networks() = 0;
|
||||
virtual void update_wifi(bool connected) = 0;
|
||||
virtual void hide_keyboard() = 0;
|
||||
virtual void show_keyboard() = 0;
|
||||
virtual void update() = 0;
|
||||
virtual void reset_settings_menu() = 0;
|
||||
virtual void update_battery(int percentage, bool isCharging, bool isConnected) = 0;
|
||||
virtual void turnOff() = 0;
|
||||
};
|
54
Platformio/HAL/HardwareModules/wifiHandlerInterface.h
Normal file
54
Platformio/HAL/HardwareModules/wifiHandlerInterface.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
#pragma once
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class wifiHandlerInterface {
|
||||
public:
|
||||
wifiHandlerInterface() = default;
|
||||
struct WifiInfo {
|
||||
WifiInfo() = default;
|
||||
WifiInfo(std::string aSsid, int aRssi) : ssid(aSsid), rssi(aRssi) {}
|
||||
|
||||
std::string ssid = "";
|
||||
int rssi = 0;
|
||||
};
|
||||
|
||||
struct wifiStatus {
|
||||
wifiStatus() = default;
|
||||
wifiStatus(bool aConnected, std::string aIp, std::string aSsid)
|
||||
: isConnected(aConnected), IP(aIp), ssid(aSsid){};
|
||||
|
||||
bool isConnected = false;
|
||||
std::string IP = "";
|
||||
std::string ssid = "";
|
||||
};
|
||||
|
||||
typedef std::vector<WifiInfo> ScanDoneDataTy;
|
||||
typedef Notification<ScanDoneDataTy> ScanNotificationTy;
|
||||
|
||||
/// @brief Initialize the wifi handler
|
||||
virtual void begin() = 0;
|
||||
/// @brief Trigger a scan scan for wifi networks
|
||||
virtual void scan() = 0;
|
||||
/// @brief Attempt a connection to the wifi using the provided credentials
|
||||
virtual void connect(std::string ssid, std::string password) = 0;
|
||||
/// @brief Get the status of the current wifi connection
|
||||
virtual wifiStatus GetStatus() = 0;
|
||||
|
||||
// Register for Scan Notification to handle when scans are completed
|
||||
std::shared_ptr<ScanNotificationTy> ScanCompleteNotification() {
|
||||
return mScanNotification;
|
||||
};
|
||||
|
||||
// Register for Status notifications to handle changes in status
|
||||
std::shared_ptr<Notification<wifiStatus>> WifiStatusNotification() {
|
||||
return mStatusUpdate;
|
||||
};
|
||||
|
||||
protected:
|
||||
std::shared_ptr<ScanNotificationTy> mScanNotification =
|
||||
std::make_shared<ScanNotificationTy>();
|
||||
std::shared_ptr<Notification<wifiStatus>> mStatusUpdate =
|
||||
std::make_shared<Notification<wifiStatus>>();
|
||||
};
|
9
Platformio/HAL/MPMCQueueInterface.hpp
Normal file
9
Platformio/HAL/MPMCQueueInterface.hpp
Normal file
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
#include "SPSCQueueInterface.hpp"
|
||||
|
||||
template <typename T>
|
||||
class MPMCQueueInterface: public SPSCQueueInterface<T>
|
||||
{
|
||||
public:
|
||||
bool push(T obj, bool overwrite = false);
|
||||
};
|
90
Platformio/HAL/Notification.hpp
Normal file
90
Platformio/HAL/Notification.hpp
Normal file
|
@ -0,0 +1,90 @@
|
|||
#pragma once
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
||||
template <class... notifyData> class Handler;
|
||||
template <class... notifyData> class Notification {
|
||||
friend class Handler<notifyData...>;
|
||||
|
||||
public:
|
||||
typedef std::function<void(notifyData...)> HandlerTy;
|
||||
typedef int HandlerID;
|
||||
|
||||
Notification() { mIdMaker = 0; };
|
||||
void notify(notifyData... notifySendData);
|
||||
|
||||
protected:
|
||||
HandlerID onNotify(HandlerTy aHandler);
|
||||
void unregister(HandlerID aHandler);
|
||||
|
||||
private:
|
||||
std::map<HandlerID, HandlerTy> mFunctionHandlers;
|
||||
HandlerID mIdMaker;
|
||||
};
|
||||
|
||||
template <class... handlerData>
|
||||
int Notification<handlerData...>::onNotify(HandlerTy aHandler) {
|
||||
if (aHandler) {
|
||||
mFunctionHandlers[++mIdMaker] = std::move(aHandler);
|
||||
return mIdMaker;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
template <class... outboundData>
|
||||
void Notification<outboundData...>::notify(outboundData... notifySendData) {
|
||||
for (auto handler : mFunctionHandlers) {
|
||||
handler.second(notifySendData...);
|
||||
}
|
||||
}
|
||||
|
||||
template <class... handlerData>
|
||||
void Notification<handlerData...>::unregister(HandlerID aHandlerId) {
|
||||
auto handlerToUnRegister =
|
||||
std::find_if(mFunctionHandlers.begin(), mFunctionHandlers.end(),
|
||||
[aHandlerId](auto registeredHandler) {
|
||||
return aHandlerId == registeredHandler.first;
|
||||
});
|
||||
if (handlerToUnRegister != mFunctionHandlers.end()) {
|
||||
mFunctionHandlers.erase(handlerToUnRegister);
|
||||
}
|
||||
}
|
||||
|
||||
template <class... notifyData> class Handler {
|
||||
public:
|
||||
typedef std::function<void(notifyData...)> callableTy;
|
||||
void operator=(Handler &other) = delete;
|
||||
|
||||
Handler() = default;
|
||||
Handler(std::shared_ptr<Notification<notifyData...>> aNotification,
|
||||
callableTy aCallable = nullptr)
|
||||
: mNotification(aNotification),
|
||||
mHandlerId(aNotification->onNotify(aCallable)) {}
|
||||
|
||||
virtual ~Handler() {
|
||||
if (mHandlerId >= 0) {
|
||||
mNotification->unregister(mHandlerId);
|
||||
}
|
||||
}
|
||||
|
||||
void operator=(callableTy aHandler) {
|
||||
if (mHandlerId >= 0) {
|
||||
mNotification->unregister(mHandlerId);
|
||||
mHandlerId = -1;
|
||||
}
|
||||
if (aHandler) {
|
||||
mHandlerId = mNotification->onNotify(aHandler);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SetNotification(std::shared_ptr<Notification<notifyData...>> aNotification) {
|
||||
mNotification = aNotification;
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<Notification<notifyData...>> mNotification = nullptr;
|
||||
int mHandlerId = -1;
|
||||
};
|
12
Platformio/HAL/SPSCQueueInterface.hpp
Normal file
12
Platformio/HAL/SPSCQueueInterface.hpp
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
#include <optional>
|
||||
|
||||
template <typename T>
|
||||
class SPSCQueueInterface {
|
||||
public:
|
||||
virtual bool push(T obj) = 0;
|
||||
virtual std::optional<T> pop() = 0;
|
||||
virtual std::optional<T> peek() = 0;
|
||||
virtual bool isFull() = 0;
|
||||
virtual bool isEmpty() = 0;
|
||||
};
|
321
Platformio/HAL/Targets/ESP32/HardwareRevX.cpp
Normal file
321
Platformio/HAL/Targets/ESP32/HardwareRevX.cpp
Normal file
|
@ -0,0 +1,321 @@
|
|||
#include "HardwareRevX.hpp"
|
||||
#include "display.hpp"
|
||||
#include "wifihandler.hpp"
|
||||
|
||||
void HardwareRevX::initIO() {
|
||||
// Button Pin Definition
|
||||
pinMode(SW_1, OUTPUT);
|
||||
pinMode(SW_2, OUTPUT);
|
||||
pinMode(SW_3, OUTPUT);
|
||||
pinMode(SW_4, OUTPUT);
|
||||
pinMode(SW_5, OUTPUT);
|
||||
pinMode(SW_A, INPUT);
|
||||
pinMode(SW_B, INPUT);
|
||||
pinMode(SW_C, INPUT);
|
||||
pinMode(SW_D, INPUT);
|
||||
pinMode(SW_E, INPUT);
|
||||
|
||||
// Power Pin Definition
|
||||
pinMode(CRG_STAT, INPUT_PULLUP);
|
||||
pinMode(ADC_BAT, INPUT);
|
||||
|
||||
// IR Pin Definition
|
||||
pinMode(IR_RX, INPUT);
|
||||
pinMode(IR_LED, OUTPUT);
|
||||
pinMode(IR_VCC, OUTPUT);
|
||||
digitalWrite(IR_LED, HIGH); // HIGH off - LOW on
|
||||
digitalWrite(IR_VCC, LOW); // HIGH on - LOW off
|
||||
|
||||
// LCD Pin Definition
|
||||
pinMode(LCD_EN, OUTPUT);
|
||||
digitalWrite(LCD_EN, HIGH);
|
||||
pinMode(LCD_BL, OUTPUT);
|
||||
digitalWrite(LCD_BL, HIGH);
|
||||
|
||||
// Other Pin Definition
|
||||
pinMode(ACC_INT, INPUT);
|
||||
pinMode(USER_LED, OUTPUT);
|
||||
digitalWrite(USER_LED, LOW);
|
||||
|
||||
// Release GPIO hold in case we are coming out of standby
|
||||
gpio_hold_dis((gpio_num_t)SW_1);
|
||||
gpio_hold_dis((gpio_num_t)SW_2);
|
||||
gpio_hold_dis((gpio_num_t)SW_3);
|
||||
gpio_hold_dis((gpio_num_t)SW_4);
|
||||
gpio_hold_dis((gpio_num_t)SW_5);
|
||||
gpio_hold_dis((gpio_num_t)LCD_EN);
|
||||
gpio_hold_dis((gpio_num_t)LCD_BL);
|
||||
gpio_deep_sleep_hold_dis();
|
||||
}
|
||||
|
||||
HardwareRevX::HardwareRevX() : HardwareAbstract() {}
|
||||
|
||||
HardwareRevX::WakeReason getWakeReason() {
|
||||
// Find out wakeup cause
|
||||
if (esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_EXT1) {
|
||||
if (log(esp_sleep_get_ext1_wakeup_status()) / log(2) == 13)
|
||||
return HardwareRevX::WakeReason::IMU;
|
||||
else
|
||||
return HardwareRevX::WakeReason::KEYPAD;
|
||||
} else {
|
||||
return HardwareRevX::WakeReason::RESET;
|
||||
}
|
||||
}
|
||||
|
||||
void HardwareRevX::init() {
|
||||
// Make sure ESP32 is running at full speed
|
||||
setCpuFrequencyMhz(240);
|
||||
wakeup_reason = getWakeReason();
|
||||
initIO();
|
||||
Serial.begin(115200);
|
||||
|
||||
mDisplay = Display::getInstance();
|
||||
mBattery = std::make_shared<Battery>(ADC_BAT, CRG_STAT);
|
||||
mWifiHandler = wifiHandler::getInstance();
|
||||
mKeys = std::make_shared<Keys>();
|
||||
restorePreferences();
|
||||
|
||||
mTouchHandler.SetNotification(mDisplay->TouchNotification());
|
||||
mTouchHandler = [this]([[maybe_unused]] auto touchPoint) {
|
||||
standbyTimer = this->getSleepTimeout();
|
||||
};
|
||||
|
||||
setupIMU();
|
||||
setupIR();
|
||||
|
||||
debugPrint("Finished Hardware Setup in %d", millis());
|
||||
}
|
||||
|
||||
void HardwareRevX::debugPrint(const char *fmt, ...) {
|
||||
char result[100];
|
||||
va_list arguments;
|
||||
|
||||
va_start(arguments, fmt);
|
||||
vsnprintf(result, 100, fmt, arguments);
|
||||
va_end(arguments);
|
||||
|
||||
Serial.print(result);
|
||||
}
|
||||
|
||||
std::shared_ptr<wifiHandlerInterface> HardwareRevX::wifi() {
|
||||
return mWifiHandler;
|
||||
}
|
||||
|
||||
std::shared_ptr<BatteryInterface> HardwareRevX::battery() { return mBattery; }
|
||||
|
||||
std::shared_ptr<DisplayAbstract> HardwareRevX::display() { return mDisplay; }
|
||||
|
||||
std::shared_ptr<KeyPressAbstract> HardwareRevX::keys() { return mKeys; }
|
||||
|
||||
void HardwareRevX::activityDetection() {
|
||||
static int accXold;
|
||||
static int accYold;
|
||||
static int accZold;
|
||||
int accX = IMU.readFloatAccelX() * 1000;
|
||||
int accY = IMU.readFloatAccelY() * 1000;
|
||||
int accZ = IMU.readFloatAccelZ() * 1000;
|
||||
|
||||
// determine motion value as da/dt
|
||||
motion = (abs(accXold - accX) + abs(accYold - accY) + abs(accZold - accZ));
|
||||
// Calculate time to standby
|
||||
standbyTimer -= 100;
|
||||
if (standbyTimer < 0)
|
||||
standbyTimer = 0;
|
||||
// If the motion exceeds the threshold, the standbyTimer is reset
|
||||
if (motion > MOTION_THRESHOLD)
|
||||
standbyTimer = sleepTimeout;
|
||||
|
||||
// Store the current acceleration and time
|
||||
accXold = accX;
|
||||
accYold = accY;
|
||||
accZold = accZ;
|
||||
}
|
||||
|
||||
char HardwareRevX::getCurrentDevice() { return currentDevice; }
|
||||
|
||||
void HardwareRevX::setCurrentDevice(char currentDevice) {
|
||||
this->currentDevice = currentDevice;
|
||||
}
|
||||
|
||||
bool HardwareRevX::getWakeupByIMUEnabled() { return wakeupByIMUEnabled; }
|
||||
|
||||
void HardwareRevX::setWakeupByIMUEnabled(bool wakeupByIMUEnabled) {
|
||||
this->wakeupByIMUEnabled = wakeupByIMUEnabled;
|
||||
}
|
||||
|
||||
uint16_t HardwareRevX::getSleepTimeout() { return sleepTimeout; }
|
||||
|
||||
void HardwareRevX::setSleepTimeout(uint16_t sleepTimeout) {
|
||||
this->sleepTimeout = sleepTimeout;
|
||||
standbyTimer = sleepTimeout;
|
||||
}
|
||||
|
||||
void HardwareRevX::enterSleep() {
|
||||
// Save settings to internal flash memory
|
||||
preferences.putBool("wkpByIMU", wakeupByIMUEnabled);
|
||||
preferences.putUChar("blBrightness", mDisplay->getBrightness());
|
||||
preferences.putUChar("currentDevice", currentDevice);
|
||||
preferences.putUInt("sleepTimeout", sleepTimeout);
|
||||
if (!preferences.getBool("alreadySetUp"))
|
||||
preferences.putBool("alreadySetUp", true);
|
||||
preferences.end();
|
||||
|
||||
// Configure IMU
|
||||
uint8_t intDataRead;
|
||||
IMU.readRegister(&intDataRead, LIS3DH_INT1_SRC); // clear interrupt
|
||||
configIMUInterrupts();
|
||||
IMU.readRegister(&intDataRead,
|
||||
LIS3DH_INT1_SRC); // really clear interrupt
|
||||
|
||||
// Prepare IO states
|
||||
digitalWrite(LCD_DC, LOW); // LCD control signals off
|
||||
digitalWrite(LCD_CS, LOW);
|
||||
digitalWrite(LCD_MOSI, LOW);
|
||||
digitalWrite(LCD_SCK, LOW);
|
||||
digitalWrite(LCD_EN, HIGH); // LCD logic off
|
||||
digitalWrite(LCD_BL, HIGH); // LCD backlight off
|
||||
pinMode(CRG_STAT, INPUT); // Disable Pull-Up
|
||||
digitalWrite(IR_VCC, LOW); // IR Receiver off
|
||||
|
||||
// Configure button matrix for ext1 interrupt
|
||||
pinMode(SW_1, OUTPUT);
|
||||
pinMode(SW_2, OUTPUT);
|
||||
pinMode(SW_3, OUTPUT);
|
||||
pinMode(SW_4, OUTPUT);
|
||||
pinMode(SW_5, OUTPUT);
|
||||
digitalWrite(SW_1, HIGH);
|
||||
digitalWrite(SW_2, HIGH);
|
||||
digitalWrite(SW_3, HIGH);
|
||||
digitalWrite(SW_4, HIGH);
|
||||
digitalWrite(SW_5, HIGH);
|
||||
gpio_hold_en((gpio_num_t)SW_1);
|
||||
gpio_hold_en((gpio_num_t)SW_2);
|
||||
gpio_hold_en((gpio_num_t)SW_3);
|
||||
gpio_hold_en((gpio_num_t)SW_4);
|
||||
gpio_hold_en((gpio_num_t)SW_5);
|
||||
// Force display pins to high impedance
|
||||
// Without this the display might not wake up from sleep
|
||||
pinMode(LCD_BL, INPUT);
|
||||
pinMode(LCD_EN, INPUT);
|
||||
gpio_hold_en((gpio_num_t)LCD_BL);
|
||||
gpio_hold_en((gpio_num_t)LCD_EN);
|
||||
gpio_deep_sleep_hold_en();
|
||||
|
||||
esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH);
|
||||
|
||||
delay(100);
|
||||
// Sleep
|
||||
esp_deep_sleep_start();
|
||||
}
|
||||
|
||||
void HardwareRevX::configIMUInterrupts() {
|
||||
uint8_t dataToWrite = 0;
|
||||
|
||||
// LIS3DH_INT1_CFG
|
||||
// dataToWrite |= 0x80;//AOI, 0 = OR 1 = AND
|
||||
// dataToWrite |= 0x40;//6D, 0 = interrupt source, 1 = 6 direction source
|
||||
// Set these to enable individual axes of generation source (or direction)
|
||||
// -- high and low are used generically
|
||||
dataToWrite |= 0x20; // Z high
|
||||
// dataToWrite |= 0x10;//Z low
|
||||
dataToWrite |= 0x08; // Y high
|
||||
// dataToWrite |= 0x04;//Y low
|
||||
dataToWrite |= 0x02; // X high
|
||||
// dataToWrite |= 0x01;//X low
|
||||
if (wakeupByIMUEnabled)
|
||||
IMU.writeRegister(LIS3DH_INT1_CFG, 0b00101010);
|
||||
else
|
||||
IMU.writeRegister(LIS3DH_INT1_CFG, 0b00000000);
|
||||
|
||||
// LIS3DH_INT1_THS
|
||||
dataToWrite = 0;
|
||||
// Provide 7 bit value, 0x7F always equals max range by accelRange setting
|
||||
dataToWrite |= 0x45;
|
||||
IMU.writeRegister(LIS3DH_INT1_THS, dataToWrite);
|
||||
|
||||
// LIS3DH_INT1_DURATION
|
||||
dataToWrite = 0;
|
||||
// minimum duration of the interrupt
|
||||
// LSB equals 1/(sample rate)
|
||||
dataToWrite |= 0x00; // 1 * 1/50 s = 20ms
|
||||
IMU.writeRegister(LIS3DH_INT1_DURATION, dataToWrite);
|
||||
|
||||
// LIS3DH_CTRL_REG5
|
||||
// Int1 latch interrupt and 4D on int1 (preserve fifo en)
|
||||
IMU.readRegister(&dataToWrite, LIS3DH_CTRL_REG5);
|
||||
dataToWrite &= 0xF3; // Clear bits of interest
|
||||
dataToWrite |= 0x08; // Latch interrupt (Cleared by reading int1_src)
|
||||
// dataToWrite |= 0x04; //Pipe 4D detection from 6D recognition to int1?
|
||||
IMU.writeRegister(LIS3DH_CTRL_REG5, dataToWrite);
|
||||
|
||||
// LIS3DH_CTRL_REG3
|
||||
// Choose source for pin 1
|
||||
dataToWrite = 0;
|
||||
// dataToWrite |= 0x80; //Click detect on pin 1
|
||||
dataToWrite |= 0x40; // AOI1 event (Generator 1 interrupt on pin 1)
|
||||
dataToWrite |= 0x20; // AOI2 event ()
|
||||
// dataToWrite |= 0x10; //Data ready
|
||||
// dataToWrite |= 0x04; //FIFO watermark
|
||||
// dataToWrite |= 0x02; //FIFO overrun
|
||||
IMU.writeRegister(LIS3DH_CTRL_REG3, dataToWrite);
|
||||
}
|
||||
|
||||
void HardwareRevX::restorePreferences() {
|
||||
// Restore settings from internal flash memory
|
||||
int backlight_brightness = 255;
|
||||
preferences.begin("settings", false);
|
||||
if (preferences.getBool("alreadySetUp")) {
|
||||
wakeupByIMUEnabled = preferences.getBool("wkpByIMU");
|
||||
backlight_brightness = preferences.getUChar("blBrightness");
|
||||
currentDevice = preferences.getUChar("currentDevice");
|
||||
sleepTimeout = preferences.getUInt("sleepTimeout");
|
||||
// setting the default to prevent a 0ms sleep timeout
|
||||
if (sleepTimeout == 0) {
|
||||
sleepTimeout = SLEEP_TIMEOUT;
|
||||
}
|
||||
}
|
||||
mDisplay->setBrightness(backlight_brightness);
|
||||
}
|
||||
|
||||
void HardwareRevX::setupIMU() {
|
||||
// Setup hal
|
||||
IMU.settings.accelSampleRate =
|
||||
50; // Hz. Can be: 0,1,10,25,50,100,200,400,1600,5000 Hz
|
||||
IMU.settings.accelRange = 2; // Max G force readable. Can be: 2, 4, 8, 16
|
||||
IMU.settings.adcEnabled = 0;
|
||||
IMU.settings.tempEnabled = 0;
|
||||
IMU.settings.xAccelEnabled = 1;
|
||||
IMU.settings.yAccelEnabled = 1;
|
||||
IMU.settings.zAccelEnabled = 1;
|
||||
IMU.begin();
|
||||
uint8_t intDataRead;
|
||||
IMU.readRegister(&intDataRead, LIS3DH_INT1_SRC); // clear interrupt
|
||||
}
|
||||
|
||||
void HardwareRevX::setupIR() {
|
||||
// Setup IR
|
||||
IrSender.begin();
|
||||
digitalWrite(IR_VCC, HIGH); // Turn on IR receiver
|
||||
IrReceiver.enableIRIn(); // Start the receiver
|
||||
}
|
||||
|
||||
void HardwareRevX::startTasks() {}
|
||||
|
||||
void HardwareRevX::loopHandler() {
|
||||
standbyTimer < 2000 ? mDisplay->sleep() : mDisplay->wake();
|
||||
|
||||
// TODO move to debug task
|
||||
// Blink debug LED at 1 Hz
|
||||
digitalWrite(USER_LED, millis() % 1000 > 500);
|
||||
|
||||
// Refresh IMU data at 10Hz
|
||||
static unsigned long IMUTaskTimer = millis();
|
||||
if (millis() - IMUTaskTimer >= 100) {
|
||||
activityDetection();
|
||||
if (standbyTimer == 0) {
|
||||
Serial.println("Entering Sleep Mode. Goodbye.");
|
||||
enterSleep();
|
||||
}
|
||||
IMUTaskTimer = millis();
|
||||
}
|
||||
}
|
91
Platformio/HAL/Targets/ESP32/HardwareRevX.hpp
Normal file
91
Platformio/HAL/Targets/ESP32/HardwareRevX.hpp
Normal file
|
@ -0,0 +1,91 @@
|
|||
#pragma once
|
||||
#include "SparkFunLIS3DH.h"
|
||||
|
||||
#include "HardwareAbstract.hpp"
|
||||
#include "battery.hpp"
|
||||
#include "lvgl.h"
|
||||
#include "wifihandler.hpp"
|
||||
#include <Arduino.h>
|
||||
#include <IRrecv.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <IRutils.h>
|
||||
#include <Preferences.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
#include "omoteconfig.h"
|
||||
|
||||
#include "BatteryInterface.h"
|
||||
#include "display.hpp"
|
||||
#include "keys.hpp"
|
||||
#include "wifiHandlerInterface.h"
|
||||
|
||||
class HardwareRevX : public HardwareAbstract {
|
||||
public:
|
||||
enum class WakeReason { RESET, IMU, KEYPAD };
|
||||
|
||||
HardwareRevX();
|
||||
|
||||
// HardwareAbstract
|
||||
virtual void init() override;
|
||||
virtual void debugPrint(const char *fmt, ...) override;
|
||||
|
||||
virtual std::shared_ptr<BatteryInterface> battery() override;
|
||||
virtual std::shared_ptr<DisplayAbstract> display() override;
|
||||
virtual std::shared_ptr<wifiHandlerInterface> wifi() override;
|
||||
virtual std::shared_ptr<KeyPressAbstract> keys() override;
|
||||
|
||||
virtual char getCurrentDevice() override;
|
||||
virtual void setCurrentDevice(char currentDevice) override;
|
||||
|
||||
virtual bool getWakeupByIMUEnabled() override;
|
||||
virtual void setWakeupByIMUEnabled(bool wakeupByIMUEnabled) override;
|
||||
|
||||
virtual uint16_t getSleepTimeout() override;
|
||||
virtual void setSleepTimeout(uint16_t sleepTimeout) override;
|
||||
|
||||
/// @brief To be ran in loop out in main
|
||||
// TODO move to a freertos task
|
||||
void loopHandler() override;
|
||||
|
||||
protected:
|
||||
// Init Functions to setup hardware
|
||||
void initIO();
|
||||
void restorePreferences();
|
||||
void slowDisplayWakeup();
|
||||
void setupIMU();
|
||||
void setupIR();
|
||||
|
||||
void activityDetection();
|
||||
void enterSleep();
|
||||
void configIMUInterrupts();
|
||||
|
||||
// Tasks
|
||||
void startTasks();
|
||||
|
||||
private:
|
||||
std::shared_ptr<Battery> mBattery;
|
||||
std::shared_ptr<Display> mDisplay;
|
||||
std::shared_ptr<wifiHandler> mWifiHandler;
|
||||
std::shared_ptr<Keys> mKeys;
|
||||
// IMU Motion Detection
|
||||
LIS3DH IMU = LIS3DH(I2C_MODE, 0x19); // Default constructor is I2C, addr 0x19.
|
||||
int standbyTimer = SLEEP_TIMEOUT;
|
||||
int sleepTimeout = SLEEP_TIMEOUT;
|
||||
int motion = 0;
|
||||
WakeReason wakeup_reason;
|
||||
|
||||
Preferences preferences;
|
||||
bool wakeupByIMUEnabled = true;
|
||||
byte currentDevice = 1; // Current Device to control (allows switching
|
||||
// mappings between devices)
|
||||
|
||||
// IR declarations
|
||||
IRsend IrSender = IRsend(IR_LED, true);
|
||||
IRrecv IrReceiver = IRrecv(IR_RX);
|
||||
|
||||
static std::shared_ptr<HardwareRevX> mInstance;
|
||||
Handler<TS_Point> mTouchHandler;
|
||||
};
|
33
Platformio/HAL/Targets/ESP32/battery/battery.cpp
Normal file
33
Platformio/HAL/Targets/ESP32/battery/battery.cpp
Normal file
|
@ -0,0 +1,33 @@
|
|||
#include "battery.hpp"
|
||||
#include <Arduino.h>
|
||||
|
||||
Battery::Battery(int adc_pin, int charging_pin): BatteryInterface(),
|
||||
mAdcPin(adc_pin),
|
||||
mChargingPin(charging_pin)
|
||||
{
|
||||
mAdcPin = adc_pin;
|
||||
mChargingPin = charging_pin;
|
||||
// Power Pin Definition
|
||||
pinMode(mChargingPin, INPUT_PULLUP);
|
||||
pinMode(mAdcPin, INPUT);
|
||||
}
|
||||
|
||||
int Battery::getPercentage()
|
||||
{
|
||||
return constrain(map(this->getVoltage(), 3700, 4200, 0, 100), 0, 100);
|
||||
}
|
||||
|
||||
bool Battery::isCharging()
|
||||
{
|
||||
return !digitalRead(mChargingPin);
|
||||
}
|
||||
|
||||
bool Battery::isConnected()
|
||||
{
|
||||
return ((!isCharging()) && (getVoltage() < 4350));
|
||||
}
|
||||
|
||||
int Battery::getVoltage()
|
||||
{
|
||||
return analogRead(mAdcPin)*2*3300/4095 + 350;
|
||||
}
|
58
Platformio/HAL/Targets/ESP32/battery/battery.hpp
Normal file
58
Platformio/HAL/Targets/ESP32/battery/battery.hpp
Normal file
|
@ -0,0 +1,58 @@
|
|||
#pragma once
|
||||
#include "BatteryInterface.h"
|
||||
#include "DisplayAbstract.h"
|
||||
|
||||
class Battery: public BatteryInterface {
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief Get the Percentage of the battery
|
||||
*
|
||||
* @return int Percentage of the battery
|
||||
*/
|
||||
virtual int getPercentage() override;
|
||||
|
||||
/**
|
||||
* @brief Function to determine if the battery is charging or not
|
||||
*
|
||||
* @return true Battery is currently charging
|
||||
* @return false Battery is currently not charging
|
||||
*/
|
||||
virtual bool isCharging() override;
|
||||
|
||||
/**
|
||||
* @brief Function to determine if the battery is connected
|
||||
*
|
||||
* @return true Battery is connected
|
||||
* @return false Battery is not connected
|
||||
*/
|
||||
bool isConnected();
|
||||
|
||||
Battery(int adc_pin, int charging_pin);
|
||||
|
||||
// Not sure why this is needed but shared_ptr seems to really
|
||||
// need it possibly a compiler template handling limitation
|
||||
// none the less we really should not use it.
|
||||
Battery() = default;
|
||||
private:
|
||||
|
||||
/**
|
||||
* @brief Function to get the current voltage of the battery
|
||||
*
|
||||
* @return int Voltage of the battery in mV
|
||||
*/
|
||||
int getVoltage();
|
||||
|
||||
/**
|
||||
* @brief Variable to store which pin should be used for ADC
|
||||
*
|
||||
*/
|
||||
int mAdcPin;
|
||||
|
||||
/**
|
||||
* @brief Variable to store which pin is used to indicate if the battery is currently charging or not
|
||||
*
|
||||
*/
|
||||
int mChargingPin;
|
||||
|
||||
};
|
184
Platformio/HAL/Targets/ESP32/display/display.cpp
Normal file
184
Platformio/HAL/Targets/ESP32/display/display.cpp
Normal file
|
@ -0,0 +1,184 @@
|
|||
|
||||
#include "display.hpp"
|
||||
#include "Wire.h"
|
||||
#include "driver/ledc.h"
|
||||
#include "omoteconfig.h"
|
||||
|
||||
std::shared_ptr<Display> Display::getInstance() {
|
||||
if (DisplayAbstract::mInstance == nullptr) {
|
||||
DisplayAbstract::mInstance =
|
||||
std::shared_ptr<Display>(new Display(LCD_BL, LCD_EN));
|
||||
}
|
||||
return std::static_pointer_cast<Display>(mInstance);
|
||||
}
|
||||
|
||||
Display::Display(int backlight_pin, int enable_pin)
|
||||
: DisplayAbstract(), mBacklightPin(backlight_pin), mEnablePin(enable_pin),
|
||||
tft(TFT_eSPI()), touch(Adafruit_FT6206()) {
|
||||
pinMode(mEnablePin, OUTPUT);
|
||||
digitalWrite(mEnablePin, HIGH);
|
||||
pinMode(mBacklightPin, OUTPUT);
|
||||
digitalWrite(mBacklightPin, HIGH);
|
||||
|
||||
setupBacklight(); // This eliminates the flash of the backlight
|
||||
|
||||
// Slowly charge the VSW voltage to prevent a brownout
|
||||
// Workaround for hardware rev 1!
|
||||
for (int i = 0; i < 100; i++) {
|
||||
digitalWrite(this->mEnablePin, HIGH); // LCD Logic off
|
||||
delayMicroseconds(1);
|
||||
digitalWrite(this->mEnablePin, LOW); // LCD Logic on
|
||||
}
|
||||
|
||||
setupTFT();
|
||||
setupTouchScreen();
|
||||
mFadeTaskMutex = xSemaphoreCreateBinary();
|
||||
xSemaphoreGive(mFadeTaskMutex);
|
||||
}
|
||||
|
||||
void Display::setupBacklight() {
|
||||
// Configure the backlight PWM
|
||||
// Manual setup because ledcSetup() briefly turns on the backlight
|
||||
ledc_channel_config_t ledc_channel_left;
|
||||
ledc_channel_left.gpio_num = (gpio_num_t)mBacklightPin;
|
||||
ledc_channel_left.speed_mode = LEDC_HIGH_SPEED_MODE;
|
||||
ledc_channel_left.channel = LEDC_CHANNEL_5;
|
||||
ledc_channel_left.intr_type = LEDC_INTR_DISABLE;
|
||||
ledc_channel_left.timer_sel = LEDC_TIMER_1;
|
||||
ledc_channel_left.flags.output_invert = 1; // Can't do this with ledcSetup()
|
||||
ledc_channel_left.duty = 0;
|
||||
ledc_channel_left.hpoint = 0;
|
||||
ledc_timer_config_t ledc_timer;
|
||||
ledc_timer.speed_mode = LEDC_HIGH_SPEED_MODE;
|
||||
ledc_timer.duty_resolution = LEDC_TIMER_8_BIT;
|
||||
ledc_timer.timer_num = LEDC_TIMER_1;
|
||||
ledc_timer.clk_cfg = LEDC_AUTO_CLK;
|
||||
ledc_timer.freq_hz = 640;
|
||||
ledc_channel_config(&ledc_channel_left);
|
||||
ledc_timer_config(&ledc_timer);
|
||||
}
|
||||
|
||||
void Display::setupTFT() {
|
||||
delay(100);
|
||||
tft.init();
|
||||
tft.initDMA();
|
||||
tft.setRotation(0);
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setSwapBytes(true);
|
||||
}
|
||||
|
||||
void Display::setupTouchScreen() {
|
||||
// Configure i2c pins and set frequency to 400kHz
|
||||
Wire.begin(TFT_SDA, TFT_SCL, 400000);
|
||||
touch.begin(128); // Initialize touchscreen and set sensitivity threshold
|
||||
}
|
||||
|
||||
void Display::setBrightness(uint8_t brightness) {
|
||||
mAwakeBrightness = brightness;
|
||||
Serial.print("Set Brightness:");
|
||||
Serial.println(mAwakeBrightness);
|
||||
startFade();
|
||||
}
|
||||
|
||||
uint8_t Display::getBrightness() { return mAwakeBrightness; }
|
||||
|
||||
void Display::setCurrentBrightness(uint8_t brightness) {
|
||||
mBrightness = brightness;
|
||||
auto duty = static_cast<int>(mBrightness);
|
||||
ledcWrite(LCD_BACKLIGHT_LEDC_CHANNEL, duty);
|
||||
// Serial.print("Current Brightness:");
|
||||
// Serial.println(mBrightness);
|
||||
}
|
||||
|
||||
void Display::turnOff() {
|
||||
digitalWrite(this->mBacklightPin, HIGH);
|
||||
digitalWrite(this->mEnablePin, HIGH);
|
||||
pinMode(this->mBacklightPin, INPUT);
|
||||
pinMode(this->mEnablePin, INPUT);
|
||||
gpio_hold_en((gpio_num_t)mBacklightPin);
|
||||
gpio_hold_en((gpio_num_t)mEnablePin);
|
||||
}
|
||||
|
||||
void Display::screenInput(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) {
|
||||
// int16_t touchX, touchY;
|
||||
touchPoint = touch.getPoint();
|
||||
int16_t touchX = touchPoint.x;
|
||||
int16_t touchY = touchPoint.y;
|
||||
bool touched = false;
|
||||
if ((touchX > 0) || (touchY > 0)) {
|
||||
touched = true;
|
||||
mTouchEvent->notify(touchPoint);
|
||||
}
|
||||
|
||||
if (!touched) {
|
||||
data->state = LV_INDEV_STATE_REL;
|
||||
} else {
|
||||
data->state = LV_INDEV_STATE_PR;
|
||||
|
||||
// Set the coordinates
|
||||
data->point.x = SCREEN_WIDTH - touchX;
|
||||
data->point.y = SCREEN_HEIGHT - touchY;
|
||||
|
||||
// Serial.print( "touchpoint: x" );
|
||||
// Serial.print( touchX );
|
||||
// Serial.print( " y" );
|
||||
// Serial.println( touchY );
|
||||
// tft.drawFastHLine(0, screenHeight - touchY, screenWidth, TFT_RED);
|
||||
// tft.drawFastVLine(screenWidth - touchX, 0, screenHeight, TFT_RED);
|
||||
}
|
||||
}
|
||||
|
||||
void Display::fadeImpl(void *) {
|
||||
bool fadeDone = false;
|
||||
while (!fadeDone) {
|
||||
fadeDone = getInstance()->fade();
|
||||
vTaskDelay(3 / portTICK_PERIOD_MS); // 3 miliseconds between steps
|
||||
// 0 - 255 will take about .75 seconds to fade up.
|
||||
}
|
||||
|
||||
xSemaphoreTake(getInstance()->mFadeTaskMutex, portMAX_DELAY);
|
||||
getInstance()->mDisplayFadeTask = nullptr;
|
||||
xSemaphoreGive(getInstance()->mFadeTaskMutex);
|
||||
|
||||
vTaskDelete(nullptr); // Delete Fade Task
|
||||
}
|
||||
|
||||
bool Display::fade() {
|
||||
// Early return no fade needed.
|
||||
if (mBrightness == mAwakeBrightness || isAsleep && mBrightness == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool fadeDown = isAsleep || mBrightness > mAwakeBrightness;
|
||||
if (fadeDown) {
|
||||
setCurrentBrightness(mBrightness - 1);
|
||||
auto setPoint = isAsleep ? 0 : mAwakeBrightness;
|
||||
return mBrightness == setPoint;
|
||||
} else {
|
||||
setCurrentBrightness(mBrightness + 1);
|
||||
return mBrightness == mAwakeBrightness;
|
||||
}
|
||||
}
|
||||
|
||||
void Display::startFade() {
|
||||
xSemaphoreTake(mFadeTaskMutex, portMAX_DELAY);
|
||||
// Only Create Task if it is needed
|
||||
if (mDisplayFadeTask == nullptr) {
|
||||
xTaskCreate(&Display::fadeImpl, "Display Fade Task", 1024, nullptr, 5,
|
||||
&mDisplayFadeTask);
|
||||
}
|
||||
xSemaphoreGive(mFadeTaskMutex);
|
||||
}
|
||||
|
||||
void Display::flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area,
|
||||
lv_color_t *color_p) {
|
||||
uint32_t w = (area->x2 - area->x1 + 1);
|
||||
uint32_t h = (area->y2 - area->y1 + 1);
|
||||
|
||||
tft.startWrite();
|
||||
tft.setAddrWindow(area->x1, area->y1, w, h);
|
||||
tft.pushPixelsDMA((uint16_t *)&color_p->full, w * h);
|
||||
tft.endWrite();
|
||||
|
||||
lv_disp_flush_ready(disp);
|
||||
}
|
86
Platformio/HAL/Targets/ESP32/display/display.hpp
Normal file
86
Platformio/HAL/Targets/ESP32/display/display.hpp
Normal file
|
@ -0,0 +1,86 @@
|
|||
#pragma once
|
||||
#include "DisplayAbstract.h"
|
||||
#include "HardwareAbstract.hpp"
|
||||
#include "Notification.hpp"
|
||||
#include "driver/ledc.h"
|
||||
#include <Adafruit_FT6206.h>
|
||||
#include <TFT_eSPI.h>
|
||||
#include <memory>
|
||||
|
||||
/*LEDC Channel to use for the LCD backlight*/
|
||||
#define LCD_BACKLIGHT_LEDC_CHANNEL LEDC_CHANNEL_5
|
||||
|
||||
#define LCD_BACKLIGHT_LEDC_FREQUENCY 640
|
||||
|
||||
#define LCD_BACKLIGHT_LEDC_BIT_RESOLUTION 8
|
||||
|
||||
#define DEFAULT_BACKLIGHT_BRIGHTNESS 128
|
||||
|
||||
class Display : public DisplayAbstract {
|
||||
public:
|
||||
static std::shared_ptr<Display> getInstance();
|
||||
|
||||
/// @brief Set brightness setting and fade to it
|
||||
/// @param brightness
|
||||
virtual void setBrightness(uint8_t brightness) override;
|
||||
virtual uint8_t getBrightness() override;
|
||||
virtual void turnOff() override;
|
||||
|
||||
std::shared_ptr<Notification<TS_Point>> TouchNotification() {
|
||||
return mTouchEvent;
|
||||
}
|
||||
|
||||
inline void wake() {
|
||||
if (isAsleep) {
|
||||
isAsleep = false;
|
||||
startFade();
|
||||
}
|
||||
}
|
||||
inline void sleep() {
|
||||
if (!isAsleep) {
|
||||
isAsleep = true;
|
||||
startFade();
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual void flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area,
|
||||
lv_color_t *color_p);
|
||||
virtual void screenInput(lv_indev_drv_t *indev_driver,
|
||||
lv_indev_data_t *data) override;
|
||||
|
||||
/// @brief Fade toward brightness based on isAwake
|
||||
/// @return True - Fade complete
|
||||
/// False - Fade set point not reached
|
||||
bool fade();
|
||||
/// @brief Start the Fade task
|
||||
void startFade();
|
||||
|
||||
/// @brief Set the actual display brightness right now
|
||||
/// @param brightness
|
||||
void setCurrentBrightness(uint8_t brightness);
|
||||
|
||||
private:
|
||||
Display(int backlight_pin, int enable_pin);
|
||||
void setupTFT();
|
||||
void setupTouchScreen();
|
||||
void setupBacklight();
|
||||
|
||||
int mEnablePin;
|
||||
int mBacklightPin;
|
||||
TFT_eSPI tft;
|
||||
|
||||
Adafruit_FT6206 touch;
|
||||
TS_Point touchPoint;
|
||||
TS_Point oldPoint;
|
||||
std::shared_ptr<Notification<TS_Point>> mTouchEvent =
|
||||
std::make_shared<Notification<TS_Point>>();
|
||||
|
||||
TaskHandle_t mDisplayFadeTask = nullptr;
|
||||
SemaphoreHandle_t mFadeTaskMutex = nullptr;
|
||||
static void fadeImpl(void *aBrightness);
|
||||
|
||||
uint8_t mBrightness = 0; // Current display brightness
|
||||
uint8_t mAwakeBrightness = 100; // Current setting for brightness when awake
|
||||
bool isAsleep = false;
|
||||
};
|
70
Platformio/HAL/Targets/ESP32/freeRTOSMPMCQueue.cpp
Normal file
70
Platformio/HAL/Targets/ESP32/freeRTOSMPMCQueue.cpp
Normal file
|
@ -0,0 +1,70 @@
|
|||
#include "freeRTOSMPMCQueue.hpp"
|
||||
|
||||
template <typename T>
|
||||
freeRTOSMPMCQueue<T>::freeRTOSMPMCQueue(uint32_t size)
|
||||
{
|
||||
this->queue = xQueueCreate(size, sizeof(T));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
freeRTOSMPMCQueue<T>::~freeRTOSMPMCQueue()
|
||||
{
|
||||
vQueueDelete(this->queue);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool freeRTOSMPMCQueue<T>::push(T obj)
|
||||
{
|
||||
return xQueueSendToBack(this->queue, &obj, 0) == pdTRUE;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool freeRTOSMPMCQueue<T>::push(T obj, bool overwrite)
|
||||
{
|
||||
if (overwrite == true)
|
||||
{
|
||||
xQueueOverwrite(this->queue, obj);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this->push(obj);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> freeRTOSMPMCQueue<T>::pop()
|
||||
{
|
||||
T retval;
|
||||
|
||||
if (xQueueReceive(this->queue, &retval, 0) == pdTRUE)
|
||||
{
|
||||
return retval;
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> freeRTOSMPMCQueue<T>::peek()
|
||||
{
|
||||
T retval;
|
||||
|
||||
if (xQueuePeek(this->queue, &retval, 0) == pdTRUE)
|
||||
{
|
||||
return retval;
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool freeRTOSMPMCQueue<T>::isFull()
|
||||
{
|
||||
return (xQueueIsQueueFullFromISR(this->queue) == pdTRUE);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool freeRTOSMPMCQueue<T>::isEmpty()
|
||||
{
|
||||
return (xQueueIsQueueEmptyFromISR(this->queue) == pdTRUE);
|
||||
}
|
18
Platformio/HAL/Targets/ESP32/freeRTOSMPMCQueue.hpp
Normal file
18
Platformio/HAL/Targets/ESP32/freeRTOSMPMCQueue.hpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
#include "MPMCQueueInterface.hpp"
|
||||
#include "Arduino.h"
|
||||
template <typename T>
|
||||
class freeRTOSMPMCQueue: public MPMCQueueInterface<T>
|
||||
{
|
||||
public:
|
||||
freeRTOSMPMCQueue(uint32_t size);
|
||||
~freeRTOSMPMCQueue();
|
||||
bool push (T obj);
|
||||
bool push (T obj, bool overwrite);
|
||||
std::optional<T> pop();
|
||||
std::optional<T> peek();
|
||||
bool isFull();
|
||||
bool isEmpty();
|
||||
private:
|
||||
QueueHandle_t queue;
|
||||
};
|
61
Platformio/HAL/Targets/ESP32/keys/keys.cpp
Normal file
61
Platformio/HAL/Targets/ESP32/keys/keys.cpp
Normal file
|
@ -0,0 +1,61 @@
|
|||
#include "keys.hpp"
|
||||
|
||||
Keys::Keys() {
|
||||
static constexpr auto MaxQueueableKeyPresses = 5;
|
||||
mKeyPressQueueHandle = xQueueCreate(MaxQueueableKeyPresses, sizeof(KeyEvent));
|
||||
xTaskCreate(KeyGrabberTask, "KeyGrabber", 1024, this, 1, &mKeyGrabbingTask);
|
||||
xTaskCreate(KeyProccessor, "KeyProccessor", 4096, this, 1, &mKeyHandlingTask);
|
||||
}
|
||||
|
||||
void Keys::KeyGrabberTask(void *aSelf) {
|
||||
auto self = reinterpret_cast<Keys *>(aSelf);
|
||||
while (true) {
|
||||
self->GrabKeys();
|
||||
vTaskDelay(5 / portTICK_PERIOD_MS); // 5 ms between key grabs
|
||||
}
|
||||
}
|
||||
void Keys::KeyProccessor(void *aSelf) {
|
||||
auto self = reinterpret_cast<Keys *>(aSelf);
|
||||
while (true) {
|
||||
self->HandleKeyPresses();
|
||||
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}
|
||||
|
||||
void Keys::HandleKeyPresses() {
|
||||
KeyPressAbstract::KeyEvent eventToHandle;
|
||||
while (xQueueReceive(mKeyPressQueueHandle, &eventToHandle, 0) == pdTRUE) {
|
||||
if (mKeyEventHandler) {
|
||||
mKeyEventHandler(eventToHandle);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void Keys::QueueKeyEvent(KeyEvent aJustOccuredKeyEvent) {
|
||||
BaseType_t higherPriorityTaskAwoke;
|
||||
xQueueSendFromISR(mKeyPressQueueHandle, &aJustOccuredKeyEvent,
|
||||
&higherPriorityTaskAwoke);
|
||||
};
|
||||
|
||||
void Keys::GrabKeys() {
|
||||
if (!customKeypad.getKeys()) {
|
||||
return; // no activity return early.
|
||||
}
|
||||
for (int i = 0; i < LIST_MAX; i++) {
|
||||
if (customKeypad.key[i].kstate == PRESSED ||
|
||||
customKeypad.key[i].kstate == RELEASED) {
|
||||
// May need to think about resetting sleep timer in key handler....
|
||||
// standbyTimer =
|
||||
// sleepTimeout; // Reset the sleep timer when a button is
|
||||
// pressed
|
||||
auto eventType = customKeypad.key[i].kstate == PRESSED
|
||||
? KeyEvent::Type::Press
|
||||
: KeyEvent::Type::Release;
|
||||
const auto keyChar = customKeypad.key[i].kchar;
|
||||
auto stateChange = customKeypad.key[i].stateChanged;
|
||||
if (charKeyToKeyIds.count(keyChar) > 0 && stateChange) {
|
||||
QueueKeyEvent(KeyEvent(charKeyToKeyIds.at(keyChar), eventType));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
76
Platformio/HAL/Targets/ESP32/keys/keys.hpp
Normal file
76
Platformio/HAL/Targets/ESP32/keys/keys.hpp
Normal file
|
@ -0,0 +1,76 @@
|
|||
#pragma once
|
||||
#include "KeyPressAbstract.hpp"
|
||||
#include "omoteconfig.h"
|
||||
#include <Keypad.h> // modified for inverted logic
|
||||
#include <map>
|
||||
|
||||
class Keys : public KeyPressAbstract {
|
||||
public:
|
||||
Keys();
|
||||
void HandleKeyPresses() override;
|
||||
void QueueKeyEvent(KeyEvent aJustOccuredKeyEvent) override;
|
||||
|
||||
protected:
|
||||
void GrabKeys();
|
||||
|
||||
private:
|
||||
static void KeyGrabberTask(void *aSelf);
|
||||
static void KeyProccessor(void *aSelf);
|
||||
|
||||
QueueHandle_t mKeyPressQueueHandle;
|
||||
TaskHandle_t mKeyGrabbingTask;
|
||||
TaskHandle_t mKeyHandlingTask;
|
||||
|
||||
// Keypad declarations
|
||||
static const byte ROWS = 5; // four rows
|
||||
static const byte COLS = 5; // four columns
|
||||
// define the symbols on the buttons of the keypads
|
||||
char hexaKeys[ROWS][COLS] = {
|
||||
{'s', '^', '-', 'm', 'r'}, // source, channel+, Volume-, mute, record
|
||||
{'i', 'R', '+', 'k', 'd'}, // info, right, Volume+, OK, down
|
||||
{'4', 'v', '1', '3', '2'}, // blue, channel-, red, yellow, green
|
||||
{'>', 'o', 'b', 'u', 'L'}, // forward, off, back, up, left
|
||||
{'?', 'p', 'c', '<', '='} // ?, play, config, rewind, stop
|
||||
};
|
||||
// TODO what is '?' lol
|
||||
|
||||
// TODO Should be able to optomize this out by reordering Ids at some point
|
||||
// or even using interrupts to trigger key press queueing
|
||||
static inline const std::map<char, KeyId> charKeyToKeyIds{
|
||||
{'o', KeyId::Power},
|
||||
// Top 4 Buttons left to right
|
||||
{'=', KeyId::Stop},
|
||||
{'<', KeyId::Rewind},
|
||||
{'p', KeyId::Play},
|
||||
{'>', KeyId::FastForward},
|
||||
// Buttons around D Pad
|
||||
{'c', KeyId::Menu},
|
||||
{'i', KeyId::Info},
|
||||
{'b', KeyId::Back},
|
||||
{'s', KeyId::Source},
|
||||
// D Pad
|
||||
{'u', KeyId::Up},
|
||||
{'d', KeyId::Down},
|
||||
{'L', KeyId::Left},
|
||||
{'R', KeyId::Right},
|
||||
{'k', KeyId::Center},
|
||||
// Volume Channel and 2 between
|
||||
{'+', KeyId::VolUp},
|
||||
{'-', KeyId::VolDown},
|
||||
{'m', KeyId::Mute},
|
||||
{'r', KeyId::Record},
|
||||
{'^', KeyId::ChannelUp},
|
||||
{'v', KeyId::ChannelDown},
|
||||
// Bottom 4 buttons left to right
|
||||
{'1', KeyId::Aux1},
|
||||
{'2', KeyId::Aux2},
|
||||
{'3', KeyId::Aux3},
|
||||
{'4', KeyId::Aux4}};
|
||||
|
||||
byte rowPins[ROWS] = {SW_A, SW_B, SW_C, SW_D,
|
||||
SW_E}; // connect to the row pinouts of the keypad
|
||||
byte colPins[COLS] = {SW_1, SW_2, SW_3, SW_4,
|
||||
SW_5}; // connect to the column pinouts of the keypad
|
||||
Keypad customKeypad =
|
||||
Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
|
||||
};
|
52
Platformio/HAL/Targets/ESP32/omoteconfig.h
Normal file
52
Platformio/HAL/Targets/ESP32/omoteconfig.h
Normal file
|
@ -0,0 +1,52 @@
|
|||
#pragma once
|
||||
|
||||
#define IS_SIMULATOR false
|
||||
|
||||
// Comment out to disable connected features
|
||||
#define ENABLE_WIFI
|
||||
#define WIFI_SSID "YOUR_WIFI_SSID"
|
||||
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
|
||||
#define MQTT_SERVER "YOUR_MQTT_SERVER_IP"
|
||||
|
||||
// time until device enters sleep mode in milliseconds
|
||||
#define SLEEP_TIMEOUT 20000
|
||||
|
||||
// motion above threshold keeps device awake
|
||||
#define MOTION_THRESHOLD 50
|
||||
|
||||
// IO34+IO35+IO37+IO38+IO39(+IO13)
|
||||
#define BUTTON_PIN_BITMASK 0b1110110000000000000000000010000000000000
|
||||
|
||||
// Pin assignment
|
||||
// -----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define LCD_DC 9 // defined in TFT_eSPI User_Setup.h
|
||||
#define LCD_CS 5
|
||||
#define LCD_MOSI 23
|
||||
#define LCD_SCK 18
|
||||
#define LCD_BL 4
|
||||
#define LCD_EN 10
|
||||
|
||||
#define USER_LED 2
|
||||
|
||||
#define SW_1 32 // 1...5: Output
|
||||
#define SW_2 26
|
||||
#define SW_3 27
|
||||
#define SW_4 14
|
||||
#define SW_5 12
|
||||
#define SW_A 37 // A...E: Input
|
||||
#define SW_B 38
|
||||
#define SW_C 39
|
||||
#define SW_D 34
|
||||
#define SW_E 35
|
||||
|
||||
#define IR_RX 15 // IR receiver input
|
||||
#define ADC_BAT 36 // Battery voltage sense input (1/2 divider)
|
||||
#define IR_VCC 25 // IR receiver power
|
||||
#define IR_LED 33 // IR LED output
|
||||
|
||||
#define TFT_SCL 22
|
||||
#define TFT_SDA 19
|
||||
#define ACC_INT 20
|
||||
|
||||
#define CRG_STAT 21 // battery charger feedback
|
116
Platformio/HAL/Targets/ESP32/wifiHandler/wifihandler.cpp
Normal file
116
Platformio/HAL/Targets/ESP32/wifiHandler/wifihandler.cpp
Normal file
|
@ -0,0 +1,116 @@
|
|||
#include "wifihandler.hpp"
|
||||
#include "HardwareAbstract.hpp"
|
||||
#include <Arduino.h>
|
||||
#include <Preferences.h>
|
||||
#include <WiFi.h>
|
||||
|
||||
std::shared_ptr<wifiHandler> wifiHandler::mInstance = nullptr;
|
||||
std::shared_ptr<wifiHandler> wifiHandler::getInstance() {
|
||||
if (mInstance) {
|
||||
return mInstance;
|
||||
}
|
||||
mInstance = std::shared_ptr<wifiHandler>(new wifiHandler());
|
||||
return mInstance;
|
||||
};
|
||||
|
||||
void wifiHandler::WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t aEventInfo) {
|
||||
int no_networks = 0;
|
||||
switch (event) {
|
||||
case ARDUINO_EVENT_WIFI_SCAN_DONE: {
|
||||
no_networks = WiFi.scanComplete();
|
||||
auto info = std::vector<WifiInfo>(no_networks);
|
||||
for (int i = 0; i < no_networks; i++) {
|
||||
auto ssid =
|
||||
WiFi.SSID(i).c_str() ? std::string(WiFi.SSID(i).c_str()) : "No SSID";
|
||||
info[i] = WifiInfo(ssid, WiFi.RSSI(i));
|
||||
}
|
||||
mScanNotification->notify(info);
|
||||
if (WiFi.isConnected() == false) {
|
||||
WiFi.reconnect();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
||||
StoreCredentials();
|
||||
WiFi.setAutoConnect(true);
|
||||
UpdateStatus();
|
||||
break;
|
||||
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
||||
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
||||
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
||||
case ARDUINO_EVENT_WIFI_STA_STOP:
|
||||
UpdateStatus();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void wifiHandler::UpdateStatus() {
|
||||
Serial.println("UpdateStatus");
|
||||
mCurrentStatus.isConnected = WiFi.isConnected();
|
||||
mCurrentStatus.IP = WiFi.localIP().toString().c_str();
|
||||
mCurrentStatus.ssid =
|
||||
mCurrentStatus.isConnected ? WiFi.SSID().c_str() : mConnectionAttemptSSID;
|
||||
|
||||
mStatusUpdate->notify(mCurrentStatus);
|
||||
}
|
||||
|
||||
void wifiHandler::StoreCredentials() {
|
||||
// No connection was attempted so don't try to to save the creds
|
||||
if (!mIsConnectionAttempt) {
|
||||
return;
|
||||
}
|
||||
mPassword = mConnectionAttemptPassword;
|
||||
mSSID = mConnectionAttemptSSID;
|
||||
|
||||
Preferences preferences;
|
||||
preferences.begin("wifiSettings", false);
|
||||
preferences.putString("password", mPassword.c_str());
|
||||
preferences.putString("SSID", mSSID.c_str());
|
||||
preferences.end();
|
||||
|
||||
mConnectionAttemptPassword.clear();
|
||||
mConnectionAttemptSSID.clear();
|
||||
mIsConnectionAttempt = false;
|
||||
}
|
||||
|
||||
void wifiHandler::scan() {
|
||||
Serial.println("scan called");
|
||||
WiFi.setAutoReconnect(false);
|
||||
WiFi.scanNetworks(true);
|
||||
}
|
||||
|
||||
void wifiHandler::begin() {
|
||||
WiFi.setHostname("OMOTE");
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t aEventInfo) {
|
||||
mInstance->WiFiEvent(event, aEventInfo);
|
||||
});
|
||||
|
||||
Preferences preferences;
|
||||
preferences.begin("wifiSettings", false);
|
||||
String ssid = preferences.getString("SSID");
|
||||
String password = preferences.getString("password");
|
||||
preferences.end();
|
||||
|
||||
// Attempt Connection with stored Credentials
|
||||
if (!ssid.isEmpty()) {
|
||||
connect(ssid.c_str(), password.c_str());
|
||||
} else {
|
||||
Serial.println("no SSID or password stored");
|
||||
WiFi.disconnect();
|
||||
}
|
||||
|
||||
WiFi.setSleep(true);
|
||||
}
|
||||
|
||||
void wifiHandler::connect(std::string ssid, std::string password) {
|
||||
Serial.printf("Attempting Wifi Connection To %s \n", ssid.c_str());
|
||||
mIsConnectionAttempt = true;
|
||||
mConnectionAttemptPassword = password;
|
||||
mConnectionAttemptSSID = ssid;
|
||||
auto status = WiFi.begin(mConnectionAttemptSSID.c_str(),
|
||||
mConnectionAttemptPassword.c_str());
|
||||
}
|
53
Platformio/HAL/Targets/ESP32/wifiHandler/wifihandler.hpp
Normal file
53
Platformio/HAL/Targets/ESP32/wifiHandler/wifihandler.hpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
#pragma once
|
||||
#include "Notification.hpp"
|
||||
#include "memory.h"
|
||||
#include "wifiHandlerInterface.h"
|
||||
#include <WiFi.h>
|
||||
|
||||
class wifiHandler : public wifiHandlerInterface {
|
||||
public:
|
||||
static std::shared_ptr<wifiHandler> getInstance();
|
||||
|
||||
// wifiHandlerInterface Implementation
|
||||
void begin() override;
|
||||
void scan() override;
|
||||
void connect(std::string ssid, std::string password) override;
|
||||
wifiStatus GetStatus() override { return mCurrentStatus; };
|
||||
//
|
||||
|
||||
protected:
|
||||
wifiHandler() = default;
|
||||
static std::shared_ptr<wifiHandler> mInstance;
|
||||
|
||||
/**
|
||||
* @brief Function to store the credentials when we have had a
|
||||
* successful connection
|
||||
*/
|
||||
void StoreCredentials();
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Handler for incoming arduino wifi events
|
||||
* @param event - a Wifi event
|
||||
*/
|
||||
void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t aEventInfo);
|
||||
|
||||
/**
|
||||
* @brief Update Internal status and send out a notification
|
||||
*/
|
||||
void UpdateStatus();
|
||||
wifiStatus mCurrentStatus;
|
||||
|
||||
/**
|
||||
* @brief Variables used to track wifi connection attempts
|
||||
*/
|
||||
bool mIsConnectionAttempt = false;
|
||||
std::string mConnectionAttemptPassword;
|
||||
std::string mConnectionAttemptSSID;
|
||||
|
||||
/**
|
||||
* @brief Verified Working User and Pass to Wifi network
|
||||
*/
|
||||
std::string mPassword;
|
||||
std::string mSSID;
|
||||
};
|
62
Platformio/HAL/Targets/Simulator/HardwareSimulator.cpp
Normal file
62
Platformio/HAL/Targets/Simulator/HardwareSimulator.cpp
Normal file
|
@ -0,0 +1,62 @@
|
|||
#include "HardwareSimulator.hpp"
|
||||
|
||||
#include "SDLDisplay.hpp"
|
||||
#include <sstream>
|
||||
|
||||
HardwareSimulator::HardwareSimulator()
|
||||
: HardwareAbstract(), mTickThread([]() {
|
||||
while (true) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(2));
|
||||
lv_tick_inc(2); /*Tell lvgl that 2 milliseconds were elapsed*/
|
||||
}
|
||||
}),
|
||||
mBattery(std::make_shared<BatterySimulator>()),
|
||||
mDisplay(SDLDisplay::getInstance()),
|
||||
mWifiHandler(std::make_shared<wifiHandlerSim>()),
|
||||
mKeys(std::make_shared<KeyPressSim>()) {
|
||||
mHardwareStatusTitleUpdate = std::thread([this] {
|
||||
int dataToShow = 0;
|
||||
while (true) {
|
||||
std::stringstream title;
|
||||
switch (dataToShow) {
|
||||
case 0:
|
||||
title << "Batt:" << mBattery->getPercentage() << "%" << std::endl;
|
||||
break;
|
||||
case 1:
|
||||
title << "BKLght: " << static_cast<int>(mDisplay->getBrightness())
|
||||
<< std::endl;
|
||||
dataToShow = -1;
|
||||
break;
|
||||
default:
|
||||
dataToShow = -1;
|
||||
}
|
||||
dataToShow++;
|
||||
|
||||
mDisplay->setTitle(title.str());
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
std::shared_ptr<BatteryInterface> HardwareSimulator::battery() {
|
||||
return mBattery;
|
||||
}
|
||||
std::shared_ptr<DisplayAbstract> HardwareSimulator::display() {
|
||||
return mDisplay;
|
||||
}
|
||||
std::shared_ptr<wifiHandlerInterface> HardwareSimulator::wifi() {
|
||||
return mWifiHandler;
|
||||
}
|
||||
std::shared_ptr<KeyPressAbstract> HardwareSimulator::keys() { return mKeys; }
|
||||
|
||||
char HardwareSimulator::getCurrentDevice() { return 0; }
|
||||
|
||||
void HardwareSimulator::setCurrentDevice(char currentDevice) {}
|
||||
|
||||
bool HardwareSimulator::getWakeupByIMUEnabled() { return true; }
|
||||
|
||||
void HardwareSimulator::setWakeupByIMUEnabled(bool wakeupByIMUEnabled) {}
|
||||
|
||||
uint16_t HardwareSimulator::getSleepTimeout() { return 20000; }
|
||||
|
||||
void HardwareSimulator::setSleepTimeout(uint16_t sleepTimeout) {}
|
47
Platformio/HAL/Targets/Simulator/HardwareSimulator.hpp
Normal file
47
Platformio/HAL/Targets/Simulator/HardwareSimulator.hpp
Normal file
|
@ -0,0 +1,47 @@
|
|||
#pragma once
|
||||
#include "HardwareAbstract.hpp"
|
||||
|
||||
#include "KeyPressSim.hpp"
|
||||
#include "SDLDisplay.hpp"
|
||||
#include "batterySimulator.hpp"
|
||||
#include "wifiHandlerSim.hpp"
|
||||
|
||||
#include <thread>
|
||||
|
||||
class HardwareSimulator : public HardwareAbstract {
|
||||
public:
|
||||
HardwareSimulator();
|
||||
|
||||
void init() override{};
|
||||
void loopHandler() override{};
|
||||
|
||||
void debugPrint(const char *fmt, ...) override {
|
||||
va_list arguments;
|
||||
va_start(arguments, fmt);
|
||||
vprintf(fmt, arguments);
|
||||
va_end(arguments);
|
||||
}
|
||||
|
||||
std::shared_ptr<BatteryInterface> battery() override;
|
||||
std::shared_ptr<DisplayAbstract> display() override;
|
||||
std::shared_ptr<wifiHandlerInterface> wifi() override;
|
||||
std::shared_ptr<KeyPressAbstract> keys() override;
|
||||
|
||||
char getCurrentDevice() override;
|
||||
void setCurrentDevice(char currentDevice) override;
|
||||
|
||||
bool getWakeupByIMUEnabled() override;
|
||||
void setWakeupByIMUEnabled(bool wakeupByIMUEnabled) override;
|
||||
|
||||
uint16_t getSleepTimeout() override;
|
||||
void setSleepTimeout(uint16_t sleepTimeout) override;
|
||||
|
||||
private:
|
||||
std::thread mTickThread;
|
||||
std::thread mHardwareStatusTitleUpdate;
|
||||
|
||||
std::shared_ptr<BatterySimulator> mBattery;
|
||||
std::shared_ptr<SDLDisplay> mDisplay;
|
||||
std::shared_ptr<wifiHandlerSim> mWifiHandler;
|
||||
std::shared_ptr<KeyPressSim> mKeys;
|
||||
};
|
44
Platformio/HAL/Targets/Simulator/KeyPressSim.cpp
Normal file
44
Platformio/HAL/Targets/Simulator/KeyPressSim.cpp
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include "KeyPressSim.hpp"
|
||||
|
||||
#include <memory>
|
||||
|
||||
KeyPressSim::KeyPressSim()
|
||||
: mKeyHandlerThread([this] {
|
||||
while (true) {
|
||||
HandleKeyPresses();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||
}
|
||||
}) {
|
||||
SDL_AddEventWatch(KeyPressSim::GrabKeyImpl, this);
|
||||
};
|
||||
|
||||
int KeyPressSim::GrabKeyImpl(void *aSelf, SDL_Event *aEvent) {
|
||||
reinterpret_cast<KeyPressSim *>(aSelf)->GrabKeys(aEvent);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void KeyPressSim::GrabKeys(SDL_Event *aEvent) {
|
||||
if (aEvent->type == SDL_KEYDOWN || aEvent->type == SDL_KEYUP) {
|
||||
auto keyEventType = aEvent->type == SDL_KEYDOWN ? KeyEvent::Type::Press
|
||||
: KeyEvent::Type::Release;
|
||||
const auto SDLK_key = aEvent->key.keysym.sym;
|
||||
if (KeyMap.count(SDLK_key) > 0) {
|
||||
QueueKeyEvent(KeyEvent(KeyMap.at(SDLK_key), keyEventType));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void KeyPressSim::HandleKeyPresses() {
|
||||
std::lock_guard lock(mQueueGaurd);
|
||||
while (!mKeyEventQueue.empty()) {
|
||||
if (mKeyEventHandler) {
|
||||
mKeyEventHandler(mKeyEventQueue.front());
|
||||
}
|
||||
mKeyEventQueue.pop();
|
||||
}
|
||||
};
|
||||
|
||||
void KeyPressSim::QueueKeyEvent(KeyEvent aJustOccuredKeyEvent) {
|
||||
std::lock_guard lock(mQueueGaurd);
|
||||
mKeyEventQueue.push(aJustOccuredKeyEvent);
|
||||
};
|
59
Platformio/HAL/Targets/Simulator/KeyPressSim.hpp
Normal file
59
Platformio/HAL/Targets/Simulator/KeyPressSim.hpp
Normal file
|
@ -0,0 +1,59 @@
|
|||
#include "KeyPressAbstract.hpp"
|
||||
#include "SDL2/SDL.h"
|
||||
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
#include <thread>
|
||||
|
||||
class KeyPressSim : public KeyPressAbstract {
|
||||
public:
|
||||
static constexpr auto MaxQueueableKeyEvents = 3;
|
||||
|
||||
KeyPressSim();
|
||||
|
||||
static int GrabKeyImpl(void *aSelf, SDL_Event *aEvent);
|
||||
void GrabKeys(SDL_Event *aEvent);
|
||||
|
||||
void HandleKeyPresses() override;
|
||||
void QueueKeyEvent(KeyEvent aJustOccuredKeyEvent) override;
|
||||
|
||||
private:
|
||||
std::thread mKeyGrabberThread;
|
||||
std::thread mKeyHandlerThread;
|
||||
std::queue<KeyEvent> mKeyEventQueue;
|
||||
std::mutex mQueueGaurd;
|
||||
|
||||
using Key = KeyPressAbstract::KeyId;
|
||||
static inline const std::map<SDL_Keycode, KeyPressAbstract::KeyId> KeyMap{
|
||||
{SDLK_p, Key::Power},
|
||||
// Video Control row
|
||||
{SDLK_5, Key::Stop},
|
||||
{SDLK_6, Key::Rewind},
|
||||
{SDLK_7, Key::Play},
|
||||
{SDLK_8, Key::FastForward},
|
||||
// D-Pad
|
||||
{SDLK_UP, Key::Up},
|
||||
{SDLK_DOWN, Key::Down},
|
||||
{SDLK_LEFT, Key::Left},
|
||||
{SDLK_RIGHT, Key::Right},
|
||||
{SDLK_SPACE, Key::Center},
|
||||
// General Keys
|
||||
{SDLK_h, Key::Menu},
|
||||
{SDLK_j, Key::Info},
|
||||
{SDLK_l, Key::Back},
|
||||
{SDLK_k, Key::Source},
|
||||
// Volume/ Channel UP and down
|
||||
{SDLK_w, Key::VolUp},
|
||||
{SDLK_s, Key::VolDown},
|
||||
{SDLK_e, Key::ChannelUp},
|
||||
{SDLK_d, Key::ChannelDown},
|
||||
// Mute & record
|
||||
{SDLK_x, Key::Mute},
|
||||
{SDLK_c, Key::Record},
|
||||
// Aux Keys
|
||||
{SDLK_1, Key::Aux1},
|
||||
{SDLK_2, Key::Aux2},
|
||||
{SDLK_3, Key::Aux3},
|
||||
{SDLK_4, Key::Aux4}};
|
||||
};
|
39
Platformio/HAL/Targets/Simulator/SDLDisplay.cpp
Normal file
39
Platformio/HAL/Targets/Simulator/SDLDisplay.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include "SDLDisplay.hpp"
|
||||
#include "sdl/sdl.h"
|
||||
#include <string>
|
||||
|
||||
std::shared_ptr<SDLDisplay> SDLDisplay::getInstance() {
|
||||
if (!DisplayAbstract::mInstance) {
|
||||
DisplayAbstract::mInstance = std::shared_ptr<SDLDisplay>(new SDLDisplay());
|
||||
}
|
||||
return std::static_pointer_cast<SDLDisplay>(mInstance);
|
||||
}
|
||||
|
||||
void SDLDisplay::setBrightness(uint8_t brightness) { mBrightness = brightness; }
|
||||
|
||||
uint8_t SDLDisplay::getBrightness() { return mBrightness; }
|
||||
|
||||
void SDLDisplay::turnOff() {}
|
||||
|
||||
void SDLDisplay::flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area,
|
||||
lv_color_t *color_p) {
|
||||
sdl_display_flush(disp, area, color_p);
|
||||
}
|
||||
|
||||
void SDLDisplay::screenInput(lv_indev_drv_t *indev_driver,
|
||||
lv_indev_data_t *data) {
|
||||
sdl_mouse_read(indev_driver, data);
|
||||
}
|
||||
|
||||
void SDLDisplay::setTitle(std::string aNewTitle) {
|
||||
SDL_SetWindowTitle(mSimWindow, aNewTitle.c_str());
|
||||
}
|
||||
|
||||
SDLDisplay::SDLDisplay() : DisplayAbstract() {
|
||||
sdl_init();
|
||||
|
||||
// Get the SDL window via an event
|
||||
SDL_Event aWindowIdFinder;
|
||||
SDL_PollEvent(&aWindowIdFinder);
|
||||
mSimWindow = SDL_GetWindowFromID(aWindowIdFinder.window.windowID);
|
||||
}
|
27
Platformio/HAL/Targets/Simulator/SDLDisplay.hpp
Normal file
27
Platformio/HAL/Targets/Simulator/SDLDisplay.hpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
#include "DisplayAbstract.h"
|
||||
#include "SDL2/SDL.h"
|
||||
#include <stdint.h>
|
||||
|
||||
class SDLDisplay : public DisplayAbstract {
|
||||
|
||||
public:
|
||||
static std::shared_ptr<SDLDisplay> getInstance();
|
||||
|
||||
virtual void setBrightness(uint8_t brightness) override;
|
||||
virtual uint8_t getBrightness() override;
|
||||
virtual void turnOff() override;
|
||||
|
||||
void setTitle(std::string aNewTitle);
|
||||
|
||||
protected:
|
||||
virtual void flushDisplay(lv_disp_drv_t *disp, const lv_area_t *area,
|
||||
lv_color_t *color_p) override;
|
||||
virtual void screenInput(lv_indev_drv_t *indev_driver,
|
||||
lv_indev_data_t *data) override;
|
||||
|
||||
private:
|
||||
SDLDisplay();
|
||||
uint8_t mBrightness;
|
||||
SDL_Window *mSimWindow;
|
||||
};
|
77
Platformio/HAL/Targets/Simulator/SimulatorMPMCQueue.cpp
Normal file
77
Platformio/HAL/Targets/Simulator/SimulatorMPMCQueue.cpp
Normal file
|
@ -0,0 +1,77 @@
|
|||
#include "SimulatorMPMCQueue.hpp"
|
||||
|
||||
template <typename T>
|
||||
bool SimulatorMPMCQueue<T>::push(T obj)
|
||||
{
|
||||
return this->push(obj, false);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool SimulatorMPMCQueue<T>::push(T obj, bool overwrite)
|
||||
{
|
||||
bool retval = false;
|
||||
if (this->mtx.try_lock())
|
||||
{
|
||||
if (this->isFull() && overwrite)
|
||||
{
|
||||
/* If we should overwrite already written data and the buffer is full, we increment the rd_index as well.
|
||||
This has to be done in the mutex so we do not overwrite data which is already being read*/
|
||||
this->rd_index = this->incrementIndex(this->rd_index);
|
||||
}
|
||||
|
||||
/* If the buffer is full, we can not write to the buffer. If overwrite is set to true, this check will never
|
||||
fail as we move the rd_index if the buffer would otherwise be full*/
|
||||
if (!this->isFull())
|
||||
{
|
||||
retval = true;
|
||||
this->data[this->wr_index] = obj;
|
||||
this->wr_index = this->incrementIndex(this->wr_index);
|
||||
}
|
||||
this->mtx.unlock();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> SimulatorMPMCQueue<T>::pop()
|
||||
{
|
||||
T retval;
|
||||
if (this->mtx.try_lock()){
|
||||
|
||||
if (this->isEmpty())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
retval = this->data[this->rd_index];
|
||||
this->rd_index = this->incrementIndex(this->rd_index);
|
||||
this->mtx.unlock();
|
||||
return retval;
|
||||
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> SimulatorMPMCQueue<T>::peek()
|
||||
{
|
||||
T retval;
|
||||
if (this->mtx.try_lock())
|
||||
{
|
||||
if (this->isEmpty())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
retval = this->data[this->rd_index];
|
||||
this->mtx.unlock();
|
||||
return retval;
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
uint32_t SimulatorMPMCQueue<T>::incrementIndex(uint32_t index)
|
||||
{
|
||||
return (index + 1) % this->size;
|
||||
}
|
24
Platformio/HAL/Targets/Simulator/SimulatorMPMCQueue.hpp
Normal file
24
Platformio/HAL/Targets/Simulator/SimulatorMPMCQueue.hpp
Normal file
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
#include "MPMCQueueInterface.hpp"
|
||||
#include "SimulatorSPSCQueue.hpp"
|
||||
#include <mutex>
|
||||
|
||||
template <typename T>
|
||||
class SimulatorMPMCQueue: public SimulatorSPSCQueue<T>, public MPMCQueueInterface<T>
|
||||
{
|
||||
public:
|
||||
SimulatorMPMCQueue(uint32_t size): SimulatorSPSCQueue<T>(size){};
|
||||
bool push (T obj);
|
||||
bool push (T obj, bool overwrite);
|
||||
std::optional<T> pop();
|
||||
std::optional<T> peek();
|
||||
bool isFull();
|
||||
bool isEmpty();
|
||||
private:
|
||||
T* data;
|
||||
uint32_t size;
|
||||
uint32_t rd_index;
|
||||
uint32_t wr_index;
|
||||
uint32_t incrementIndex(uint32_t index);
|
||||
std::mutex mtx;
|
||||
};
|
68
Platformio/HAL/Targets/Simulator/SimulatorSPSCQueue.cpp
Normal file
68
Platformio/HAL/Targets/Simulator/SimulatorSPSCQueue.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include "SimulatorSPSCQueue.hpp"
|
||||
|
||||
template <typename T>
|
||||
SimulatorSPSCQueue<T>::SimulatorSPSCQueue(uint32_t size)
|
||||
{
|
||||
this->size = size;
|
||||
this->data = new T[this->size + 1];
|
||||
this->rd_index = 0;
|
||||
this->wr_index = 0;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
SimulatorSPSCQueue<T>::~SimulatorSPSCQueue()
|
||||
{
|
||||
free(this->data);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool SimulatorSPSCQueue<T>::isFull()
|
||||
{
|
||||
return ((this->wr_index + 1) % this->size) == this->rd_index;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool SimulatorSPSCQueue<T>::isEmpty()
|
||||
{
|
||||
return this->rd_index == this->wr_index;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool SimulatorSPSCQueue<T>::push(T obj)
|
||||
{
|
||||
bool retval = false;
|
||||
if (!this->isFull())
|
||||
{
|
||||
retval = true;
|
||||
this->data[this->wr_index] = obj;
|
||||
this->wr_index = this->incrementIndex(this->wr_index);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> SimulatorSPSCQueue<T>::pop()
|
||||
{
|
||||
std::optional<T> retval;
|
||||
|
||||
retval = this->peek();
|
||||
|
||||
this->rd_index = this->incrementIndex(this->rd_index);
|
||||
return retval;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> SimulatorSPSCQueue<T>::peek()
|
||||
{
|
||||
if (this->isEmpty())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
return this->data[this->rd_index];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
uint32_t SimulatorSPSCQueue<T>::incrementIndex(uint32_t index)
|
||||
{
|
||||
return (index + 1) % this->size;
|
||||
}
|
22
Platformio/HAL/Targets/Simulator/SimulatorSPSCQueue.hpp
Normal file
22
Platformio/HAL/Targets/Simulator/SimulatorSPSCQueue.hpp
Normal file
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
#include "SPSCQueueInterface.hpp"
|
||||
#include <cstdint>
|
||||
|
||||
template <typename T>
|
||||
class SimulatorSPSCQueue: public SPSCQueueInterface<T>
|
||||
{
|
||||
public:
|
||||
SimulatorSPSCQueue(uint32_t size);
|
||||
~SimulatorSPSCQueue();
|
||||
bool push (T obj);
|
||||
std::optional<T> pop();
|
||||
std::optional<T> peek();
|
||||
bool isFull();
|
||||
bool isEmpty();
|
||||
private:
|
||||
T* data;
|
||||
uint32_t size;
|
||||
uint32_t rd_index;
|
||||
uint32_t wr_index;
|
||||
uint32_t incrementIndex(uint32_t index);
|
||||
};
|
23
Platformio/HAL/Targets/Simulator/batterySimulator.hpp
Normal file
23
Platformio/HAL/Targets/Simulator/batterySimulator.hpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
#include "BatteryInterface.h"
|
||||
#include <chrono>
|
||||
#include <cmath>
|
||||
class BatterySimulator: public BatteryInterface{
|
||||
public:
|
||||
BatterySimulator() :
|
||||
mCreationTime(std::chrono::high_resolution_clock::now())
|
||||
{};
|
||||
~BatterySimulator(){}
|
||||
|
||||
virtual int getPercentage() override {
|
||||
auto now = std::chrono::high_resolution_clock::now();
|
||||
auto batteryRunTime = std::chrono::duration_cast<std::chrono::seconds>(now - mCreationTime);
|
||||
constexpr auto minToBatteryZero = 3;
|
||||
auto fakeBattPercentage = 100 - ((batteryRunTime / std::chrono::duration<float,std::ratio<60LL>>(minToBatteryZero)) * 100);
|
||||
return std::floor(fakeBattPercentage < 100 ? fakeBattPercentage : 0);
|
||||
}
|
||||
|
||||
virtual bool isCharging() override { return false; }
|
||||
|
||||
private:
|
||||
std::chrono::_V2::system_clock::time_point mCreationTime;
|
||||
};
|
3
Platformio/HAL/Targets/Simulator/omoteconfig.h
Normal file
3
Platformio/HAL/Targets/Simulator/omoteconfig.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#pragma once
|
||||
|
||||
#define IS_SIMULATOR true
|
|
@ -0,0 +1,35 @@
|
|||
#include "wifiHandlerSim.hpp"
|
||||
|
||||
using WifiInfo = wifiHandlerInterface::WifiInfo;
|
||||
|
||||
wifiHandlerSim::wifiHandlerSim() {}
|
||||
|
||||
void wifiHandlerSim::begin() {}
|
||||
|
||||
void wifiHandlerSim::connect(std::string ssid, std::string password) {
|
||||
if (mFakeStatusThread.joinable()) {
|
||||
mFakeStatusThread.join();
|
||||
mCurrentStatus.ssid = ssid;
|
||||
mCurrentStatus.isConnected = true;
|
||||
mFakeStatusThread = std::thread([this] {
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
mStatusUpdate->notify(mCurrentStatus);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static const WifiInfo wifis[] = {
|
||||
WifiInfo("High Signal Wifi", -49), WifiInfo("Mid Signal Wifi", -55),
|
||||
WifiInfo("Low Signal Wifi", -65), WifiInfo("No Signal Wifi", -90)};
|
||||
|
||||
void wifiHandlerSim::scan() {
|
||||
if (mFakeScanThread.joinable()) {
|
||||
mFakeScanThread.join();
|
||||
mFakeScanThread = std::thread([this] {
|
||||
std::vector<WifiInfo> info =
|
||||
std::vector(std::begin(wifis), std::end(wifis));
|
||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||
mScanNotification->notify(info);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
#include "Notification.hpp"
|
||||
#include "wifiHandlerInterface.h"
|
||||
#include <atomic>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
|
||||
class wifiHandlerSim : public wifiHandlerInterface {
|
||||
public:
|
||||
wifiHandlerSim();
|
||||
|
||||
void begin() override;
|
||||
void scan() override;
|
||||
void connect(std::string ssid, std::string password) override;
|
||||
wifiStatus GetStatus() override { return mCurrentStatus; };
|
||||
|
||||
private:
|
||||
std::thread mFakeScanThread = std::thread([] {});
|
||||
std::thread mFakeStatusThread = std::thread([] {});
|
||||
wifiStatus mCurrentStatus = wifiStatus(true, "172.0.0.1", "FakeNet");
|
||||
};
|
534
Platformio/OmoteUI/UIs/Basic/OmoteUI.cpp
Normal file
534
Platformio/OmoteUI/UIs/Basic/OmoteUI.cpp
Normal file
|
@ -0,0 +1,534 @@
|
|||
#include "OmoteUI.hpp"
|
||||
#include "lvgl.h"
|
||||
#include "omoteconfig.h"
|
||||
#include <functional>
|
||||
|
||||
using namespace UI::Basic;
|
||||
|
||||
std::shared_ptr<OmoteUI> OmoteUI::mInstance = nullptr;
|
||||
|
||||
// This can be used to flag out specific code for SIM only
|
||||
// #if defined(IS_SIMULATOR) && (IS_SIMULATOR == true)
|
||||
// #endif
|
||||
|
||||
OmoteUI::OmoteUI(std::shared_ptr<HardwareAbstract> aHardware)
|
||||
: UIBase(aHardware) {}
|
||||
|
||||
// Set the page indicator scroll position relative to the tabview scroll
|
||||
// position
|
||||
void OmoteUI::store_scroll_value_event_cb(lv_event_t *e) {
|
||||
float bias = (150.0 + 8.0) / 240.0;
|
||||
int offset = 240 / 2 - 150 / 2 - 8 - 50 - 3;
|
||||
lv_obj_t *screen = lv_event_get_target(e);
|
||||
lv_obj_scroll_to_x(panel, lv_obj_get_scroll_x(screen) * bias - offset,
|
||||
LV_ANIM_OFF);
|
||||
}
|
||||
|
||||
// Update current device when the tabview page is changes
|
||||
void OmoteUI::tabview_device_event_cb(lv_event_t *e) {
|
||||
currentDevice = lv_tabview_get_tab_act(lv_event_get_target(e));
|
||||
this->mHardware->setCurrentDevice(currentDevice);
|
||||
}
|
||||
|
||||
// Slider Event handler
|
||||
void OmoteUI::bl_slider_event_cb(lv_event_t *e) {
|
||||
lv_obj_t *slider = lv_event_get_target(e);
|
||||
auto newBrightness = std::clamp(lv_slider_get_value(slider), 60, 255);
|
||||
mHardware->display()->setBrightness(newBrightness);
|
||||
}
|
||||
|
||||
// Apple Key Event handler
|
||||
void OmoteUI::appleKey_event_cb(lv_event_t *e) {
|
||||
// Send IR command based on the event user data
|
||||
// mHardware->debugPrint(std::to_string(50 + (int)e->user_data));
|
||||
}
|
||||
|
||||
// Wakeup by IMU Switch Event handler
|
||||
void OmoteUI::WakeEnableSetting_event_cb(lv_event_t *e) {
|
||||
this->mHardware->setWakeupByIMUEnabled(
|
||||
lv_obj_has_state(lv_event_get_target(e), LV_STATE_CHECKED));
|
||||
}
|
||||
|
||||
// Wakeup timeout dropdown Event handler
|
||||
void OmoteUI::wakeTimeoutSetting_event_cb(lv_event_t *e) {
|
||||
lv_obj_t *drop = lv_event_get_target(e);
|
||||
|
||||
int sleepTimeout = sleepTimeoutMap[lv_dropdown_get_selected(drop)];
|
||||
mHardware->setSleepTimeout(sleepTimeout);
|
||||
}
|
||||
|
||||
// Smart Home Toggle Event handler
|
||||
void OmoteUI::smartHomeToggle_event_cb(lv_event_t *e) {
|
||||
char payload[8];
|
||||
if (lv_obj_has_state(lv_event_get_target(e), LV_STATE_CHECKED))
|
||||
strcpy(payload, "true");
|
||||
else
|
||||
strcpy(payload, "false");
|
||||
// Publish an MQTT message based on the event user data
|
||||
// if ((int)e->user_data == 1)
|
||||
// mHardware->MQTTPublish("bulb1_set", payload);
|
||||
// if ((int)e->user_data == 2)
|
||||
// mHardware->MQTTPublish("bulb2_set", payload);
|
||||
}
|
||||
|
||||
// Smart Home Toggle Event handler
|
||||
void OmoteUI::smartHomeSlider_event_cb(lv_event_t *e) {
|
||||
lv_obj_t *slider = lv_event_get_target(e);
|
||||
char payload[8];
|
||||
auto sliderValue = lv_slider_get_value(slider);
|
||||
|
||||
// TODO convert this dtostrf to somethign more portable.
|
||||
// I gave it a stab here but not sure it is the same.
|
||||
// dtostrf(lv_slider_get_value(slider), 1, 2, payload);
|
||||
snprintf(payload, sizeof(payload), "%8.2f", sliderValue);
|
||||
|
||||
// Publish an MQTT message based on the event user data
|
||||
// if ((int)e->user_data == 1)
|
||||
// mHardware->MQTTPublish("bulb1_setbrightness", payload);
|
||||
// if ((int)e->user_data == 2)
|
||||
// mHardware->MQTTPublish("bulb2_setbrightness", payload);
|
||||
}
|
||||
|
||||
void OmoteUI::virtualKeypad_event_cb(lv_event_t *e) {
|
||||
lv_obj_t *target = lv_event_get_target(e);
|
||||
lv_obj_t *cont = lv_event_get_current_target(e);
|
||||
if (target == cont)
|
||||
return;
|
||||
|
||||
char buffer[100];
|
||||
// sprintf(buffer, "check it out: %d\n",
|
||||
// virtualKeyMapTechnisat[(int)target->user_data]);
|
||||
// mHardware->debugPrint(buffer);
|
||||
}
|
||||
|
||||
void OmoteUI::loopHandler() {
|
||||
lv_timer_handler();
|
||||
lv_task_handler();
|
||||
}
|
||||
|
||||
void OmoteUI::create_status_bar() {
|
||||
// Create a status bar
|
||||
lv_obj_t *statusbar = lv_btn_create(lv_scr_act());
|
||||
lv_obj_set_size(statusbar, 240, 20);
|
||||
lv_obj_set_style_shadow_width(statusbar, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(statusbar, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_style_radius(statusbar, 0, LV_PART_MAIN);
|
||||
lv_obj_align(statusbar, LV_ALIGN_TOP_MID, 0, 0);
|
||||
|
||||
this->WifiLabel = lv_label_create(statusbar);
|
||||
lv_label_set_text(this->WifiLabel, "");
|
||||
lv_obj_align(this->WifiLabel, LV_ALIGN_LEFT_MID, -8, 0);
|
||||
lv_obj_set_style_text_font(this->WifiLabel, &lv_font_montserrat_12,
|
||||
LV_PART_MAIN);
|
||||
|
||||
this->objBattPercentage = lv_label_create(statusbar);
|
||||
lv_label_set_text(this->objBattPercentage, "");
|
||||
lv_obj_align(this->objBattPercentage, LV_ALIGN_RIGHT_MID, -16, 0);
|
||||
lv_obj_set_style_text_font(this->objBattPercentage, &lv_font_montserrat_12,
|
||||
LV_PART_MAIN);
|
||||
|
||||
this->objBattIcon = lv_label_create(statusbar);
|
||||
lv_label_set_text(this->objBattIcon, LV_SYMBOL_BATTERY_EMPTY);
|
||||
lv_obj_align(this->objBattIcon, LV_ALIGN_RIGHT_MID, 8, 0);
|
||||
lv_obj_set_style_text_font(this->objBattIcon, &lv_font_montserrat_16,
|
||||
LV_PART_MAIN);
|
||||
|
||||
batteryPoller = std::make_unique<poller>(
|
||||
[&batteryIcon = objBattIcon, battery = mHardware->battery()]() {
|
||||
auto percent = battery->getPercentage();
|
||||
if (percent > 95)
|
||||
lv_label_set_text(batteryIcon, LV_SYMBOL_BATTERY_FULL);
|
||||
else if (percent > 75)
|
||||
lv_label_set_text(batteryIcon, LV_SYMBOL_BATTERY_3);
|
||||
else if (percent > 50)
|
||||
lv_label_set_text(batteryIcon, LV_SYMBOL_BATTERY_2);
|
||||
else if (percent > 25)
|
||||
lv_label_set_text(batteryIcon, LV_SYMBOL_BATTERY_1);
|
||||
else
|
||||
lv_label_set_text(batteryIcon, LV_SYMBOL_BATTERY_EMPTY);
|
||||
});
|
||||
}
|
||||
|
||||
void OmoteUI::setup_settings(lv_obj_t *parent) {
|
||||
// Add content to the settings tab
|
||||
// With a flex layout, setting groups/boxes will position themselves
|
||||
// automatically
|
||||
lv_obj_set_layout(parent, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(parent, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
// Add a label, then a box for the display settings
|
||||
this->settingsMenu = lv_menu_create(parent);
|
||||
lv_obj_set_width(this->settingsMenu, 210);
|
||||
|
||||
/* Create main page for settings this->settingsMenu*/
|
||||
this->settingsMainPage = lv_menu_page_create(this->settingsMenu, NULL);
|
||||
lv_obj_t *cont = lv_menu_cont_create(this->settingsMainPage);
|
||||
lv_obj_set_layout(cont, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
// lv_obj_set_width(cont, lv_obj_get_width(parent));
|
||||
this->display_settings(cont);
|
||||
|
||||
this->create_wifi_settings(this->settingsMenu, cont);
|
||||
|
||||
// Another setting for the battery
|
||||
lv_obj_t *menuLabel = lv_label_create(cont);
|
||||
lv_label_set_text(menuLabel, "Battery");
|
||||
lv_obj_t *menuBox = lv_obj_create(cont);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 125);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
lv_menu_set_page(this->settingsMenu, this->settingsMainPage);
|
||||
}
|
||||
|
||||
void OmoteUI::ta_kb_event_cb(lv_event_t *e) {
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t *ta = lv_event_get_target(e);
|
||||
lv_obj_t *kb = (lv_obj_t *)lv_event_get_user_data(e);
|
||||
switch (code) {
|
||||
case LV_EVENT_FOCUSED:
|
||||
lv_keyboard_set_textarea(kb, ta);
|
||||
lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
|
||||
lv_obj_move_foreground(kb);
|
||||
break;
|
||||
case LV_EVENT_DEFOCUSED:
|
||||
lv_keyboard_set_textarea(kb, NULL);
|
||||
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OmoteUI::create_keyboard() {
|
||||
this->kb = lv_keyboard_create(lv_scr_act());
|
||||
lv_obj_add_flag(this->kb, LV_OBJ_FLAG_HIDDEN);
|
||||
lv_obj_set_y(this->kb, 0);
|
||||
}
|
||||
|
||||
void OmoteUI::hide_keyboard() { lv_obj_add_flag(this->kb, LV_OBJ_FLAG_HIDDEN); }
|
||||
|
||||
void OmoteUI::reset_settings_menu() {
|
||||
lv_menu_set_page(this->settingsMenu, this->settingsMainPage);
|
||||
}
|
||||
|
||||
void OmoteUI::attach_keyboard(lv_obj_t *textarea) {
|
||||
if (this->kb == NULL) {
|
||||
this->create_keyboard();
|
||||
}
|
||||
lv_keyboard_set_textarea(this->kb, textarea);
|
||||
lv_obj_add_event_cb(
|
||||
textarea, [](lv_event_t *e) { mInstance->ta_kb_event_cb(e); },
|
||||
LV_EVENT_FOCUSED, this->kb);
|
||||
lv_obj_add_event_cb(
|
||||
textarea, [](lv_event_t *e) { mInstance->ta_kb_event_cb(e); },
|
||||
LV_EVENT_DEFOCUSED, this->kb);
|
||||
}
|
||||
|
||||
void OmoteUI::layout_UI() {
|
||||
|
||||
// Set the background color
|
||||
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_black(), LV_PART_MAIN);
|
||||
this->create_keyboard();
|
||||
// Setup a scrollable tabview for devices and settings
|
||||
lv_obj_t *tabview;
|
||||
tabview =
|
||||
lv_tabview_create(lv_scr_act(), LV_DIR_TOP,
|
||||
0); // Hide tab labels by setting their height to 0
|
||||
lv_obj_set_style_bg_color(tabview, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_size(tabview, SCREEN_WIDTH,
|
||||
270); // 270 = screenHeight(320) - panel(30) - statusbar(20)
|
||||
lv_obj_align(tabview, LV_ALIGN_TOP_MID, 0, 20);
|
||||
|
||||
// Add 4 tabs (names are irrelevant since the labels are hidden)
|
||||
lv_obj_t *tab1 = lv_tabview_add_tab(tabview, "Settings");
|
||||
lv_obj_t *tab2 = lv_tabview_add_tab(tabview, "Technisat");
|
||||
lv_obj_t *tab3 = lv_tabview_add_tab(tabview, "Apple TV");
|
||||
lv_obj_t *tab4 = lv_tabview_add_tab(tabview, "Smart Home");
|
||||
|
||||
// Configure number button grid
|
||||
static lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST}; // equal x distribution
|
||||
static lv_coord_t row_dsc[] = {
|
||||
52, 52, 52, 52, LV_GRID_TEMPLATE_LAST}; // manual y distribution to
|
||||
// compress the grid a bit
|
||||
|
||||
// Create a container with grid for tab2
|
||||
lv_obj_set_style_pad_all(tab2, 0, LV_PART_MAIN);
|
||||
lv_obj_t *cont = lv_obj_create(tab2);
|
||||
lv_obj_set_style_shadow_width(cont, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(cont, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(cont, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_grid_column_dsc_array(cont, col_dsc, 0);
|
||||
lv_obj_set_style_grid_row_dsc_array(cont, row_dsc, 0);
|
||||
lv_obj_set_size(cont, 240, 270);
|
||||
lv_obj_set_layout(cont, LV_LAYOUT_GRID);
|
||||
lv_obj_align(cont, LV_ALIGN_TOP_MID, 0, 0);
|
||||
lv_obj_set_style_radius(cont, 0, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t *buttonLabel;
|
||||
lv_obj_t *obj;
|
||||
|
||||
// Iterate through grid buttons configure them
|
||||
for (int i = 0; i < 12; i++) {
|
||||
uint8_t col = i % 3;
|
||||
uint8_t row = i / 3;
|
||||
// Create the button object
|
||||
if ((row == 3) && ((col == 0) || (col == 2)))
|
||||
continue; // Do not create a complete fourth row, only a 0 button
|
||||
obj = lv_btn_create(cont);
|
||||
lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_STRETCH, col, 1,
|
||||
LV_GRID_ALIGN_STRETCH, row, 1);
|
||||
lv_obj_set_style_bg_color(obj, this->color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_radius(obj, 14, LV_PART_MAIN);
|
||||
lv_obj_set_style_shadow_color(obj, lv_color_hex(0x404040), LV_PART_MAIN);
|
||||
lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE); // Clicking a button causes
|
||||
// a event in its container
|
||||
// Create Labels for each button
|
||||
buttonLabel = lv_label_create(obj);
|
||||
if (i < 9) {
|
||||
lv_label_set_text_fmt(buttonLabel, std::to_string(i + 1).c_str(), col,
|
||||
row);
|
||||
lv_obj_set_user_data(obj,
|
||||
(void *)i); // Add user data so we can identify which
|
||||
// button caused the container event
|
||||
} else {
|
||||
lv_label_set_text_fmt(buttonLabel, "0", col, row);
|
||||
lv_obj_set_user_data(obj, (void *)9);
|
||||
}
|
||||
lv_obj_set_style_text_font(buttonLabel, &lv_font_montserrat_24,
|
||||
LV_PART_MAIN);
|
||||
lv_obj_center(buttonLabel);
|
||||
}
|
||||
// Create a shared event for all button inside container
|
||||
lv_obj_add_event_cb(
|
||||
cont, [](lv_event_t *e) { mInstance->virtualKeypad_event_cb(e); },
|
||||
LV_EVENT_CLICKED, NULL);
|
||||
|
||||
// Add content to the Apple TV tab (3)
|
||||
// Add a nice apple tv logo
|
||||
lv_obj_t *appleImg = imgs.addAppleTVIcon(tab3);
|
||||
// create two buttons and add their icons accordingly
|
||||
lv_obj_t *button = lv_btn_create(tab3);
|
||||
lv_obj_align(button, LV_ALIGN_BOTTOM_LEFT, 10, 0);
|
||||
lv_obj_set_size(button, 60, 60);
|
||||
lv_obj_set_style_radius(button, 30, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(button, color_primary, LV_PART_MAIN);
|
||||
lv_obj_add_event_cb(
|
||||
button, [](lv_event_t *e) { mInstance->appleKey_event_cb(e); },
|
||||
LV_EVENT_CLICKED, (void *)1);
|
||||
|
||||
appleImg = imgs.addAppleDisplayImage(button);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, -3, 0);
|
||||
lv_obj_set_style_img_recolor(appleImg, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(appleImg, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, -3, 0);
|
||||
|
||||
button = lv_btn_create(tab3);
|
||||
lv_obj_align(button, LV_ALIGN_BOTTOM_RIGHT, -10, 0);
|
||||
lv_obj_set_size(button, 60, 60);
|
||||
lv_obj_set_style_radius(button, 30, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(button, color_primary, LV_PART_MAIN);
|
||||
lv_obj_add_event_cb(
|
||||
button, [](lv_event_t *e) { mInstance->appleKey_event_cb(e); },
|
||||
LV_EVENT_CLICKED, (void *)2);
|
||||
|
||||
appleImg = imgs.addAppleDisplayImage(button);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_img_recolor(appleImg, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_img_recolor_opa(appleImg, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_align(appleImg, LV_ALIGN_CENTER, 0, 0);
|
||||
|
||||
this->setup_settings(tab1);
|
||||
|
||||
// Add content to the smart home tab (4)
|
||||
lv_obj_set_layout(tab4, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(tab4, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(tab4, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
|
||||
// Add a label, then a box for the light controls
|
||||
lv_obj_t *menuLabel = lv_label_create(tab4);
|
||||
lv_label_set_text(menuLabel, "Living Room");
|
||||
|
||||
lv_obj_t *menuBox = lv_obj_create(tab4);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 79);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t *bulbIcon = imgs.addLightBulbIcon(menuBox);
|
||||
lv_obj_align(bulbIcon, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Floor Lamp");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 22, 3);
|
||||
lv_obj_t *lightToggleA = lv_switch_create(menuBox);
|
||||
lv_obj_set_size(lightToggleA, 40, 22);
|
||||
lv_obj_align(lightToggleA, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
lv_obj_set_style_bg_color(lightToggleA, lv_color_lighten(color_primary, 50),
|
||||
LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(lightToggleA, color_primary, LV_PART_INDICATOR);
|
||||
lv_obj_add_event_cb(
|
||||
lightToggleA,
|
||||
[](lv_event_t *e) { mInstance->smartHomeToggle_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, (void *)1);
|
||||
|
||||
lv_obj_t *slider = lv_slider_create(menuBox);
|
||||
lv_slider_set_range(slider, 0, 100);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(lv_color_black(), 30),
|
||||
LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_color(
|
||||
slider, lv_color_lighten(lv_palette_main(LV_PALETTE_AMBER), 180),
|
||||
LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_dir(slider, LV_GRAD_DIR_HOR, LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_white(), LV_PART_KNOB);
|
||||
lv_obj_set_style_bg_opa(slider, 255, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(color_primary, 50),
|
||||
LV_PART_MAIN);
|
||||
lv_slider_set_value(slider, 255, LV_ANIM_OFF);
|
||||
lv_obj_set_size(slider, lv_pct(90), 10);
|
||||
lv_obj_align(slider, LV_ALIGN_TOP_MID, 0, 37);
|
||||
lv_obj_add_event_cb(
|
||||
slider, [](lv_event_t *e) { mInstance->smartHomeSlider_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, (void *)1);
|
||||
|
||||
// Add another this->settingsMenu box for a second appliance
|
||||
menuBox = lv_obj_create(tab4);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 79);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
bulbIcon = imgs.addLightBulbIcon(menuBox);
|
||||
lv_obj_align(bulbIcon, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Ceiling Light");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 22, 3);
|
||||
lv_obj_t *lightToggleB = lv_switch_create(menuBox);
|
||||
lv_obj_set_size(lightToggleB, 40, 22);
|
||||
lv_obj_align(lightToggleB, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
lv_obj_set_style_bg_color(lightToggleB, lv_color_lighten(color_primary, 50),
|
||||
LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(lightToggleB, color_primary, LV_PART_INDICATOR);
|
||||
lv_obj_add_event_cb(
|
||||
lightToggleB,
|
||||
[](lv_event_t *e) { mInstance->smartHomeToggle_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, (void *)2);
|
||||
|
||||
slider = lv_slider_create(menuBox);
|
||||
lv_slider_set_range(slider, 0, 100);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(lv_color_black(), 30),
|
||||
LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_color(
|
||||
slider, lv_color_lighten(lv_palette_main(LV_PALETTE_AMBER), 180),
|
||||
LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_grad_dir(slider, LV_GRAD_DIR_HOR, LV_PART_INDICATOR);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_white(), LV_PART_KNOB);
|
||||
lv_obj_set_style_bg_opa(slider, 255, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(color_primary, 50),
|
||||
LV_PART_MAIN);
|
||||
lv_slider_set_value(slider, 255, LV_ANIM_OFF);
|
||||
lv_obj_set_size(slider, lv_pct(90), 10);
|
||||
lv_obj_align(slider, LV_ALIGN_TOP_MID, 0, 37);
|
||||
lv_obj_add_event_cb(
|
||||
slider, [](lv_event_t *e) { mInstance->smartHomeSlider_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, (void *)2);
|
||||
|
||||
// Add another room (empty for now)
|
||||
menuLabel = lv_label_create(tab4);
|
||||
lv_label_set_text(menuLabel, "Kitchen");
|
||||
|
||||
menuBox = lv_obj_create(tab4);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 79);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
// Set current page according to the current Device
|
||||
currentDevice = this->mHardware->getCurrentDevice();
|
||||
lv_tabview_set_act(tabview, currentDevice, LV_ANIM_OFF);
|
||||
|
||||
// Create a page indicator
|
||||
panel = lv_obj_create(lv_scr_act());
|
||||
lv_obj_clear_flag(
|
||||
panel, LV_OBJ_FLAG_CLICKABLE); // This indicator will not be clickable
|
||||
lv_obj_set_size(panel, SCREEN_WIDTH, 30);
|
||||
lv_obj_set_flex_flow(panel, LV_FLEX_FLOW_ROW);
|
||||
lv_obj_align(panel, LV_ALIGN_BOTTOM_MID, 0, 0);
|
||||
lv_obj_set_scrollbar_mode(panel, LV_SCROLLBAR_MODE_OFF);
|
||||
// This small hidden button enables the page indicator to scroll further
|
||||
lv_obj_t *btn = lv_btn_create(panel);
|
||||
lv_obj_set_size(btn, 50, lv_pct(100));
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_opa(btn, LV_OPA_TRANSP, LV_PART_MAIN);
|
||||
// Create actual (non-clickable) buttons for every tab
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
lv_obj_t *label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Settings");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Technisat");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Apple TV");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_set_size(btn, 150, lv_pct(100));
|
||||
label = lv_label_create(btn);
|
||||
lv_label_set_text_fmt(label, "Smart Home");
|
||||
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(btn, color_primary, LV_PART_MAIN);
|
||||
// This small hidden button enables the page indicator to scroll further
|
||||
btn = lv_btn_create(panel);
|
||||
lv_obj_set_size(btn, 50, lv_pct(100));
|
||||
lv_obj_set_style_shadow_width(btn, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_opa(btn, LV_OPA_TRANSP, LV_PART_MAIN);
|
||||
|
||||
// Make the indicator scroll together with the tabs by creating a scroll event
|
||||
lv_obj_add_event_cb(
|
||||
lv_tabview_get_content(tabview),
|
||||
[](lv_event_t *e) { mInstance->store_scroll_value_event_cb(e); },
|
||||
LV_EVENT_SCROLL, NULL);
|
||||
lv_obj_add_event_cb(
|
||||
tabview, [](lv_event_t *e) { mInstance->tabview_device_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, NULL);
|
||||
// Initialize scroll position for the indicator
|
||||
lv_event_send(lv_tabview_get_content(tabview), LV_EVENT_SCROLL, NULL);
|
||||
|
||||
// Style the panel background
|
||||
static lv_style_t style_btn;
|
||||
lv_style_init(&style_btn);
|
||||
lv_style_set_pad_all(&style_btn, 3);
|
||||
lv_style_set_border_width(&style_btn, 0);
|
||||
lv_style_set_bg_opa(&style_btn, LV_OPA_TRANSP);
|
||||
lv_obj_add_style(panel, &style_btn, 0);
|
||||
|
||||
// Make the indicator fade out at the sides using gradient bitmaps
|
||||
lv_obj_t *img1 = imgs.addLeftGradiant(lv_scr_act());
|
||||
lv_obj_align(img1, LV_ALIGN_BOTTOM_LEFT, 0, 0);
|
||||
lv_obj_set_size(img1, 30, 30); // stretch the 1-pixel high image to 30px
|
||||
lv_obj_t *img2 = imgs.addRightGradiant(lv_scr_act());
|
||||
lv_obj_align(img2, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
|
||||
lv_obj_set_size(img2, 30, 30);
|
||||
|
||||
this->create_status_bar();
|
||||
this->mHardware->wifi()->begin();
|
||||
}
|
250
Platformio/OmoteUI/UIs/Basic/OmoteUI.hpp
Normal file
250
Platformio/OmoteUI/UIs/Basic/OmoteUI.hpp
Normal file
|
@ -0,0 +1,250 @@
|
|||
// OMOTE UI
|
||||
// 2023 Matthew Colvin
|
||||
#pragma once
|
||||
|
||||
#include "Images.hpp"
|
||||
#include "UIBase.hpp"
|
||||
#include "lvgl.h"
|
||||
#include "poller.hpp"
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
|
||||
namespace UI::Basic {
|
||||
/// @brief Singleton to allow UI code to live separately from the Initialization
|
||||
/// of resources.
|
||||
class OmoteUI : public UIBase {
|
||||
public:
|
||||
OmoteUI(std::shared_ptr<HardwareAbstract> aHardware);
|
||||
|
||||
static std::weak_ptr<OmoteUI> getRefrence() { return getInstance(); };
|
||||
static std::shared_ptr<OmoteUI>
|
||||
getInstance(std::shared_ptr<HardwareAbstract> aHardware = nullptr) {
|
||||
if (mInstance) {
|
||||
return mInstance;
|
||||
} else if (aHardware) {
|
||||
mInstance = std::make_shared<OmoteUI>(aHardware);
|
||||
}
|
||||
return mInstance;
|
||||
};
|
||||
|
||||
// Set the page indicator scroll position relative to the tabview scroll
|
||||
// position
|
||||
void store_scroll_value_event_cb(lv_event_t *e);
|
||||
// Update current device when the tabview page is changes
|
||||
void tabview_device_event_cb(lv_event_t *e);
|
||||
// Update wake timeout handler
|
||||
void wakeTimeoutSetting_event_cb(lv_event_t *e);
|
||||
// Slider Event handler
|
||||
void bl_slider_event_cb(lv_event_t *e);
|
||||
// Apple Key Event handler
|
||||
void appleKey_event_cb(lv_event_t *e);
|
||||
// Wakeup by IMU Switch Event handler
|
||||
void WakeEnableSetting_event_cb(lv_event_t *e);
|
||||
// Smart Home Toggle Event handler
|
||||
void smartHomeToggle_event_cb(lv_event_t *e);
|
||||
// Smart Home Toggle Event handler
|
||||
void smartHomeSlider_event_cb(lv_event_t *e);
|
||||
// Virtual Keypad Event handler
|
||||
void virtualKeypad_event_cb(lv_event_t *e);
|
||||
void wifi_settings_cb(lv_event_t *event);
|
||||
|
||||
void connect_btn_cb(lv_event_t *event);
|
||||
|
||||
void password_field_event_cb(lv_event_t *e);
|
||||
// Use LVGL to layout the ui and register the callbacks
|
||||
void layout_UI();
|
||||
|
||||
void ta_kb_event_cb(lv_event_t *e);
|
||||
|
||||
void wifi_scan_done(std::shared_ptr<std::vector<WifiInfo>> info);
|
||||
void loopHandler();
|
||||
/**
|
||||
* @brief Function to hide the keyboard. If the keyboard is attached to a text
|
||||
* area, it will be hidden when the text area is defocused. This function can
|
||||
* be used if the keyboard need to be hidden due to some script event.
|
||||
*
|
||||
*/
|
||||
void hide_keyboard();
|
||||
|
||||
/**
|
||||
* @brief Function to show the keyboard. If a text area needs the keybaord, it
|
||||
* should be attached to the text area using the approbiate function. The
|
||||
* keyboard will then show up when the text area is focused. This function is
|
||||
* needed if the keyboard should be shown due to some script or other trigger.
|
||||
*
|
||||
*/
|
||||
void show_keyboard();
|
||||
|
||||
private:
|
||||
static std::shared_ptr<OmoteUI> mInstance;
|
||||
|
||||
std::unique_ptr<poller> batteryPoller;
|
||||
|
||||
int sleepTimeoutMap[5] = {10000,30000,60000,180000,600000};
|
||||
|
||||
void reset_settings_menu();
|
||||
void attach_keyboard(lv_obj_t *textarea);
|
||||
std::shared_ptr<std::vector<WifiInfo>> found_wifi_networks;
|
||||
/**
|
||||
* @brief Keyboard object used whenever a keyboard is needed.
|
||||
*
|
||||
*/
|
||||
lv_obj_t *kb;
|
||||
|
||||
/**
|
||||
* @brief Function to create the keyboard object which can then be attached to
|
||||
* different text areas.
|
||||
*
|
||||
*/
|
||||
void create_keyboard();
|
||||
|
||||
/**
|
||||
* @brief Set the up settings object
|
||||
*
|
||||
* @param parent
|
||||
*/
|
||||
void setup_settings(lv_obj_t *parent);
|
||||
|
||||
/**
|
||||
* @brief LVGL Menu for settings pages as needed.
|
||||
*
|
||||
*/
|
||||
lv_obj_t *settingsMenu;
|
||||
|
||||
/**
|
||||
* @brief Main page of the settings menu
|
||||
*
|
||||
*/
|
||||
lv_obj_t *settingsMainPage;
|
||||
|
||||
/**
|
||||
* @brief Battery percentage label
|
||||
*
|
||||
*/
|
||||
lv_obj_t *objBattPercentage;
|
||||
|
||||
/**
|
||||
* @brief Battery icon object in the status bar
|
||||
*
|
||||
*/
|
||||
lv_obj_t *objBattIcon;
|
||||
|
||||
void create_status_bar();
|
||||
|
||||
lv_obj_t *panel = nullptr;
|
||||
Images imgs = Images();
|
||||
uint_fast8_t currentDevice = 4;
|
||||
lv_color_t color_primary = lv_color_hex(0x303030); // gray
|
||||
|
||||
inline static const uint_fast8_t virtualKeyMapTechnisat[10] = {
|
||||
0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x0};
|
||||
|
||||
/************************************** WIFI Settings Menu
|
||||
* *******************************************************/
|
||||
/**
|
||||
* @brief Container within the wifi selection page
|
||||
*/
|
||||
lv_obj_t *wifi_setting_cont;
|
||||
|
||||
/**
|
||||
* @brief Wifi settings entry point on the settings tab
|
||||
*
|
||||
*/
|
||||
lv_obj_t *wifiOverview;
|
||||
|
||||
/**
|
||||
* @brief Label in the wifi password page. This label is updated with the
|
||||
* selected SSID when the credentials for a wifi network is entered.
|
||||
*
|
||||
*/
|
||||
lv_obj_t *wifi_password_label;
|
||||
|
||||
/**
|
||||
* @brief Menu Subpage for the wifi password
|
||||
*/
|
||||
lv_obj_t *wifi_password_page;
|
||||
|
||||
/**
|
||||
* @brief Menu Subpage for wifi selection
|
||||
*/
|
||||
lv_obj_t *wifi_selection_page;
|
||||
|
||||
/**
|
||||
* @brief Wifi Label shown in the top status bar
|
||||
*/
|
||||
lv_obj_t *WifiLabel;
|
||||
|
||||
/**
|
||||
* @brief Number of wifi subpage needed to display the found wifi networks
|
||||
*
|
||||
*/
|
||||
unsigned int no_subpages;
|
||||
|
||||
/**
|
||||
* @brief number of wifi networks found
|
||||
*
|
||||
*/
|
||||
unsigned int no_wifi_networks;
|
||||
|
||||
void wifi_status(std::shared_ptr<wifiStatus> status);
|
||||
/**
|
||||
* @brief callback function to get next wifi subpage. This callback can be
|
||||
* used to get the next or previous page
|
||||
*
|
||||
* @param e lvgl event object
|
||||
*/
|
||||
void next_wifi_selection_subpage(lv_event_t *e);
|
||||
|
||||
/**
|
||||
* @brief Create a wifi selection sub page object
|
||||
*
|
||||
* @param menu LVGL Menu where the sub page should be added to
|
||||
* @return lv_obj_t* Menu sub page object pointer
|
||||
*/
|
||||
lv_obj_t *create_wifi_selection_page(lv_obj_t *menu);
|
||||
|
||||
/**
|
||||
* @brief Method to create the wifi password sub page
|
||||
*
|
||||
* @param menu Menu where the sub page should be created
|
||||
* @return lv_obj_t* menu sub page object pointer
|
||||
*/
|
||||
lv_obj_t *create_wifi_password_page(lv_obj_t *menu);
|
||||
|
||||
/**
|
||||
* @brief Method to create the wifi settings on the main page
|
||||
*
|
||||
* @param parent lv object parent where the main settings page should be
|
||||
* added to
|
||||
*/
|
||||
void create_wifi_main_page(lv_obj_t *parent);
|
||||
|
||||
/**
|
||||
* @brief Method to create wifi settings. This method will call the
|
||||
* create_wifi_selection_page, the create_wifi_password_page, and the
|
||||
* create_wifi_main_page
|
||||
*
|
||||
* @param menu Settings menu where the sub pages should be added to
|
||||
* @param parent lv object parent where the main settings page should be
|
||||
* added to
|
||||
*/
|
||||
void create_wifi_settings(lv_obj_t *menu, lv_obj_t *parent);
|
||||
|
||||
/**
|
||||
* @brief Function to update the wifi selection sub page
|
||||
*
|
||||
* @param page index of the page to display
|
||||
*/
|
||||
void update_wifi_selection_subpage(int page);
|
||||
|
||||
/**
|
||||
* @brief Function to create the display settings page.
|
||||
*
|
||||
* @param parent LVGL object acting as a parent for the display settings page
|
||||
*/
|
||||
void display_settings(lv_obj_t *parent);
|
||||
};
|
||||
|
||||
} // namespace UI::Basic
|
78
Platformio/OmoteUI/UIs/Basic/displaySettings.cpp
Normal file
78
Platformio/OmoteUI/UIs/Basic/displaySettings.cpp
Normal file
|
@ -0,0 +1,78 @@
|
|||
#include "OmoteUI.hpp"
|
||||
|
||||
using namespace UI::Basic;
|
||||
|
||||
void OmoteUI::display_settings(lv_obj_t *parent) {
|
||||
|
||||
lv_obj_t *menuLabel = lv_label_create(parent);
|
||||
lv_label_set_text(menuLabel, "Display");
|
||||
|
||||
lv_obj_t *menuBox = lv_obj_create(parent);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 109);
|
||||
lv_obj_set_style_bg_color(menuBox, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(menuBox, 0, LV_PART_MAIN);
|
||||
|
||||
lv_obj_t *brightnessIcon = imgs.addLowBrightnessIcon(menuBox);
|
||||
lv_obj_align(brightnessIcon, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
lv_obj_t *slider = lv_slider_create(menuBox);
|
||||
lv_slider_set_range(slider, 0, 255);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_white(), LV_PART_KNOB);
|
||||
lv_obj_set_style_bg_opa(slider, LV_OPA_COVER, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(slider, lv_color_lighten(color_primary, 50),
|
||||
LV_PART_MAIN);
|
||||
lv_slider_set_value(slider, mHardware->display()->getBrightness(),
|
||||
LV_ANIM_OFF);
|
||||
lv_obj_set_size(slider, lv_pct(66), 10);
|
||||
lv_obj_align(slider, LV_ALIGN_TOP_MID, 0, 3);
|
||||
brightnessIcon = imgs.addHighBrightnessIcon(menuBox);
|
||||
lv_obj_align(brightnessIcon, LV_ALIGN_TOP_RIGHT, 0, -1);
|
||||
lv_obj_add_event_cb(
|
||||
slider, [](lv_event_t *e) { mInstance->bl_slider_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, nullptr);
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Lift to Wake");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 0, 32);
|
||||
lv_obj_t *wakeToggle = lv_switch_create(menuBox);
|
||||
lv_obj_set_size(wakeToggle, 40, 22);
|
||||
lv_obj_align(wakeToggle, LV_ALIGN_TOP_RIGHT, 0, 29);
|
||||
lv_obj_set_style_bg_color(wakeToggle, lv_color_hex(0x505050), LV_PART_MAIN);
|
||||
lv_obj_add_event_cb(
|
||||
wakeToggle,
|
||||
[](lv_event_t *e) { mInstance->WakeEnableSetting_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, NULL);
|
||||
if (mHardware->getWakeupByIMUEnabled())
|
||||
lv_obj_add_state(wakeToggle, LV_STATE_CHECKED); // set default state
|
||||
|
||||
menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Timeout");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_LEFT, 0, 64);
|
||||
lv_obj_t *drop = lv_dropdown_create(menuBox);
|
||||
lv_dropdown_set_options(drop, "10s\n"
|
||||
"30s\n"
|
||||
"1m\n"
|
||||
"3m");
|
||||
lv_obj_align(drop, LV_ALIGN_TOP_RIGHT, 0, 61);
|
||||
lv_obj_set_size(drop, 70, 22);
|
||||
// lv_obj_set_style_text_font(drop, &lv_font_montserrat_12, LV_PART_MAIN);
|
||||
// lv_obj_set_style_text_font(lv_dropdown_get_list(drop),
|
||||
// &lv_font_montserrat_12, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_top(drop, 1, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(drop, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(lv_dropdown_get_list(drop), color_primary,
|
||||
LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(lv_dropdown_get_list(drop), 1, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_color(lv_dropdown_get_list(drop),
|
||||
lv_color_hex(0x505050), LV_PART_MAIN);
|
||||
|
||||
int sleepTimeoutMapSize =
|
||||
sizeof(sleepTimeoutMap) / sizeof(sleepTimeoutMap[0]);
|
||||
int currentTimeout = mHardware->getSleepTimeout();
|
||||
for (int i = 0; i < sleepTimeoutMapSize; i++) {
|
||||
if (currentTimeout == sleepTimeoutMap[i])
|
||||
lv_dropdown_set_selected(drop, i);
|
||||
}
|
||||
lv_obj_add_event_cb(
|
||||
drop, [](lv_event_t *e) { mInstance->wakeTimeoutSetting_event_cb(e); },
|
||||
LV_EVENT_VALUE_CHANGED, NULL);
|
||||
}
|
314
Platformio/OmoteUI/UIs/Basic/wifiSettings.cpp
Normal file
314
Platformio/OmoteUI/UIs/Basic/wifiSettings.cpp
Normal file
|
@ -0,0 +1,314 @@
|
|||
#include "OmoteUI.hpp"
|
||||
|
||||
#define WIFI_SUBPAGE_SIZE 3
|
||||
static char* ssid;
|
||||
|
||||
using namespace UI::Basic;
|
||||
|
||||
lv_obj_t* OmoteUI::create_wifi_selection_page(lv_obj_t* menu)
|
||||
{
|
||||
/* Create sub page for wifi*/
|
||||
lv_obj_t* subpage = lv_menu_page_create(menu, NULL);
|
||||
this->wifi_setting_cont = lv_menu_cont_create(subpage);
|
||||
lv_obj_set_layout(this->wifi_setting_cont, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(this->wifi_setting_cont, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(this->wifi_setting_cont, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
|
||||
lv_obj_t* menuLabel = lv_label_create(this->wifi_setting_cont);
|
||||
lv_label_set_text(menuLabel, "Searching for wifi networks");
|
||||
|
||||
|
||||
return subpage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Callback function for the show password checkbox. Checking the box will show the password while unchecked the
|
||||
* password will be shown as dots.
|
||||
*
|
||||
* @param e Pointer to event object for the event where this callback is called
|
||||
*/
|
||||
static void show_password_cb(lv_event_t* e)
|
||||
{
|
||||
lv_obj_t* password_field = (lv_obj_t*) e->user_data;
|
||||
if (lv_obj_has_state(e->target, LV_STATE_CHECKED)){
|
||||
lv_textarea_set_password_mode(password_field, false);
|
||||
}
|
||||
else{
|
||||
lv_textarea_set_password_mode(password_field, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Textarea callback function for the password field. In case the enter key is pressed in the text area, the
|
||||
* function will try to connect to the network with the provided password.
|
||||
*
|
||||
* @param e Pointer to event object for the event where this callback is called
|
||||
*/
|
||||
void OmoteUI::password_field_event_cb(lv_event_t* e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * ta = lv_event_get_target(e);
|
||||
lv_obj_t * kb = (lv_obj_t*) lv_event_get_user_data(e);
|
||||
|
||||
const char* password = lv_textarea_get_text(ta);
|
||||
switch(code){
|
||||
case LV_EVENT_READY:
|
||||
this->mHardware->wifi()->connect(std::make_shared<std::string>(std::string(ssid)), std::make_shared<std::string>(std::string(password)));
|
||||
lv_obj_clear_state(ta, LV_STATE_FOCUSED);
|
||||
this->hide_keyboard();
|
||||
this->reset_settings_menu();
|
||||
/* Fall through on purpose. Pressing enter should disable the keyboard as well*/
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Callback which is triggered when clicking the connect button. It triggers the wifi connection.
|
||||
*
|
||||
* @param event Pointer to event object for the event where this callback is called
|
||||
*/
|
||||
void OmoteUI::connect_btn_cb(lv_event_t* event)
|
||||
{
|
||||
lv_obj_t* ta = (lv_obj_t*) event->user_data;
|
||||
const char* password = lv_textarea_get_text(ta);
|
||||
|
||||
this->mHardware->wifi()->connect(std::make_shared<std::string>(std::string(ssid)), std::make_shared<std::string>(std::string(password)));
|
||||
//Trigger wifi connection here
|
||||
//wifihandler.connect(ssid, password);
|
||||
lv_obj_clear_state(ta, LV_STATE_FOCUSED);
|
||||
this->hide_keyboard();
|
||||
this->reset_settings_menu();
|
||||
|
||||
}
|
||||
|
||||
void OmoteUI::create_wifi_main_page(lv_obj_t* parent)
|
||||
{
|
||||
lv_obj_t* menuLabel = lv_label_create(parent);
|
||||
lv_label_set_text(menuLabel, "Wi-Fi");
|
||||
this->wifiOverview = lv_obj_create(parent);
|
||||
lv_obj_set_size(this->wifiOverview, lv_pct(100), 80);
|
||||
lv_obj_set_style_bg_color(this->wifiOverview, color_primary, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(this->wifiOverview, 0, LV_PART_MAIN);
|
||||
menuLabel = lv_label_create(this->wifiOverview);
|
||||
|
||||
lv_obj_t* arrow = lv_label_create(this->wifiOverview);
|
||||
lv_label_set_text(arrow, LV_SYMBOL_RIGHT);
|
||||
lv_obj_align(arrow, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
|
||||
lv_obj_t* ip_label = lv_label_create(this->wifiOverview);
|
||||
lv_label_set_text(ip_label, "IP:");
|
||||
lv_obj_align(ip_label, LV_ALIGN_BOTTOM_LEFT, 0, 0);
|
||||
|
||||
lv_obj_t* ip = lv_label_create(this->wifiOverview);
|
||||
lv_obj_align(ip, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
|
||||
|
||||
lv_label_set_text(menuLabel, "Disconnected");
|
||||
lv_label_set_text(ip, "-");
|
||||
|
||||
lv_menu_set_load_page_event(this->settingsMenu, this->wifiOverview, this->wifi_selection_page);
|
||||
lv_obj_add_event_cb(this->wifiOverview, [] (lv_event_t* e) {mInstance->wifi_settings_cb(e);}, LV_EVENT_CLICKED, this->wifi_setting_cont);
|
||||
}
|
||||
|
||||
void OmoteUI::wifi_scan_done(std::shared_ptr<std::vector<WifiInfo>> info)
|
||||
{
|
||||
unsigned int size = info->size();
|
||||
this->no_subpages = (size + WIFI_SUBPAGE_SIZE - 1)/WIFI_SUBPAGE_SIZE;
|
||||
this->no_wifi_networks = size;
|
||||
this->found_wifi_networks = info;
|
||||
|
||||
if (size == 0)
|
||||
{
|
||||
lv_obj_t* menuBox = lv_obj_create(this->wifi_setting_cont);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 45);
|
||||
lv_obj_set_scrollbar_mode(menuBox, LV_SCROLLBAR_MODE_OFF);
|
||||
lv_obj_t* menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "no networks found");
|
||||
}
|
||||
else
|
||||
{
|
||||
this->update_wifi_selection_subpage(0);
|
||||
}
|
||||
}
|
||||
void OmoteUI::next_wifi_selection_subpage(lv_event_t* e)
|
||||
{
|
||||
int subpage = (uintptr_t) lv_event_get_user_data(e);
|
||||
this->update_wifi_selection_subpage(subpage);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Callback function in case a wifi is selected. This callback function will change the label of the wifi password
|
||||
* sub page to the selected wifi network.
|
||||
*
|
||||
* @param e Pointer to event object for the event where this callback is called
|
||||
*/
|
||||
static void wifi_selected_cb(lv_event_t* e)
|
||||
{
|
||||
lv_obj_t* label = lv_obj_get_child(e->target, 0);
|
||||
lv_label_set_text((lv_obj_t*) e->user_data, lv_label_get_text(label));
|
||||
ssid = lv_label_get_text(label);
|
||||
}
|
||||
|
||||
|
||||
void OmoteUI::update_wifi_selection_subpage(int page)
|
||||
{
|
||||
if (page < this->no_subpages)
|
||||
{
|
||||
lv_obj_clean(this->wifi_setting_cont);
|
||||
|
||||
lv_obj_t* pageLabel = lv_label_create(this->wifi_setting_cont);
|
||||
lv_label_set_text_fmt(pageLabel, "Page %d/%d", page + 1, this->no_subpages);
|
||||
if (page > 0)
|
||||
{
|
||||
lv_obj_t* menuBox = lv_obj_create(this->wifi_setting_cont);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 45);
|
||||
lv_obj_set_scrollbar_mode(menuBox, LV_SCROLLBAR_MODE_OFF);
|
||||
|
||||
lv_obj_t* menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Previous");
|
||||
lv_obj_align(menuLabel, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
lv_obj_add_event_cb(menuBox, [](lv_event_t* e) {mInstance->next_wifi_selection_subpage(e);},LV_EVENT_CLICKED, (void*)(page - 1));
|
||||
lv_obj_t* arrow = lv_label_create(menuBox);
|
||||
lv_label_set_text(arrow, LV_SYMBOL_LEFT);
|
||||
lv_obj_align(arrow, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
}
|
||||
|
||||
for (int i = 0; i < WIFI_SUBPAGE_SIZE && (page*WIFI_SUBPAGE_SIZE + i) < this->no_wifi_networks; i++)
|
||||
{
|
||||
lv_obj_t* menuBox = lv_obj_create(this->wifi_setting_cont);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 45);
|
||||
lv_obj_set_scrollbar_mode(menuBox, LV_SCROLLBAR_MODE_OFF);
|
||||
|
||||
lv_obj_add_flag(menuBox, LV_OBJ_FLAG_EVENT_BUBBLE);
|
||||
|
||||
lv_obj_t* menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, this->found_wifi_networks->at(page*WIFI_SUBPAGE_SIZE + i).ssid.c_str());
|
||||
lv_obj_t* wifi_image;
|
||||
|
||||
int RSSI = this->found_wifi_networks->at(page*WIFI_SUBPAGE_SIZE + i).rssi;
|
||||
|
||||
if (RSSI > -50)
|
||||
{
|
||||
wifi_image = imgs.addWifiHighSignal(menuBox);
|
||||
}
|
||||
else if (RSSI > -60)
|
||||
{
|
||||
wifi_image = imgs.addWifiMidSignal(menuBox);
|
||||
}
|
||||
else if (RSSI > -70)
|
||||
{
|
||||
wifi_image = imgs.addWifiLowSignal(menuBox);
|
||||
}
|
||||
else
|
||||
{
|
||||
wifi_image = imgs.addWifiLowSignal(menuBox);
|
||||
}
|
||||
lv_obj_align(wifi_image, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
lv_menu_set_load_page_event(this->settingsMenu, menuBox, this->wifi_password_page);
|
||||
lv_obj_add_event_cb(menuBox, wifi_selected_cb, LV_EVENT_CLICKED, this->wifi_password_label);
|
||||
}
|
||||
|
||||
if ((page + 1) < this->no_subpages)
|
||||
{
|
||||
lv_obj_t* menuBox = lv_obj_create(this->wifi_setting_cont);
|
||||
lv_obj_set_size(menuBox, lv_pct(100), 45);
|
||||
lv_obj_set_scrollbar_mode(menuBox, LV_SCROLLBAR_MODE_OFF);
|
||||
|
||||
lv_obj_t* menuLabel = lv_label_create(menuBox);
|
||||
lv_label_set_text(menuLabel, "Next");
|
||||
lv_obj_add_event_cb(menuBox, [](lv_event_t* e) {mInstance->next_wifi_selection_subpage(e);}, LV_EVENT_CLICKED, (void*)(page + 1));
|
||||
|
||||
lv_obj_t* arrow = lv_label_create(menuBox);
|
||||
lv_label_set_text(arrow, LV_SYMBOL_RIGHT);
|
||||
lv_obj_align(arrow, LV_ALIGN_TOP_RIGHT, 0, 0);
|
||||
|
||||
}
|
||||
lv_obj_scroll_to_y(this->wifi_setting_cont, 0, LV_ANIM_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
void OmoteUI::create_wifi_settings(lv_obj_t* menu, lv_obj_t* parent)
|
||||
{
|
||||
this->wifi_selection_page = this->create_wifi_selection_page(menu);
|
||||
this->wifi_password_page = this->create_wifi_password_page(this->settingsMenu);
|
||||
this->create_wifi_main_page(parent);
|
||||
this->mHardware->wifi()->onScanDone([] (std::shared_ptr<std::vector<WifiInfo>> info) {mInstance->wifi_scan_done(info);});
|
||||
this->mHardware->wifi()->onStatusUpdate([] (std::shared_ptr<wifiStatus> status) {mInstance->wifi_status(status);});
|
||||
}
|
||||
|
||||
void OmoteUI::wifi_status(std::shared_ptr<wifiStatus> status)
|
||||
{
|
||||
this->mHardware->debugPrint("connected %d\n", status->isConnected);
|
||||
this->mHardware->debugPrint("IP %s\n", status->IP);
|
||||
this->mHardware->debugPrint("SSID %s\n", status->ssid);
|
||||
|
||||
lv_obj_t* ip_label = lv_obj_get_child(this->wifiOverview, 3);
|
||||
lv_obj_t* ssid_label = lv_obj_get_child(this->wifiOverview, 0);
|
||||
|
||||
if (status->isConnected)
|
||||
{
|
||||
lv_label_set_text(this->WifiLabel, LV_SYMBOL_WIFI);
|
||||
lv_label_set_text(ssid_label, status->ssid.c_str());
|
||||
lv_label_set_text(ip_label, status->IP.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
lv_label_set_text(this->WifiLabel, "");
|
||||
lv_label_set_text(ssid_label, "Disconnected");
|
||||
lv_label_set_text(ip_label, "-");
|
||||
}
|
||||
}
|
||||
|
||||
lv_obj_t* OmoteUI::create_wifi_password_page(lv_obj_t* menu)
|
||||
{
|
||||
lv_obj_t* ret_val = lv_menu_page_create(menu, NULL);
|
||||
lv_obj_t* cont = lv_menu_cont_create(ret_val);
|
||||
lv_obj_set_layout(cont, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_ACTIVE);
|
||||
|
||||
this->wifi_password_label = lv_label_create(cont);
|
||||
lv_label_set_text(this->wifi_password_label, "Password");
|
||||
lv_obj_t* password_input = lv_textarea_create(cont);
|
||||
lv_obj_set_width(password_input, lv_pct(100));
|
||||
lv_textarea_set_password_mode(password_input, true);
|
||||
lv_textarea_set_one_line(password_input, true);
|
||||
lv_textarea_set_placeholder_text(password_input, "Password");
|
||||
lv_obj_add_event_cb(password_input, [] (lv_event_t* e) {mInstance->password_field_event_cb(e);} , LV_EVENT_READY, NULL );
|
||||
this->attach_keyboard(password_input);
|
||||
|
||||
lv_obj_t* show_password = lv_checkbox_create(cont);
|
||||
lv_checkbox_set_text(show_password, "Show password");
|
||||
lv_obj_add_event_cb(show_password, show_password_cb, LV_EVENT_VALUE_CHANGED, password_input);
|
||||
|
||||
lv_obj_t* connect_button = lv_btn_create(cont);
|
||||
lv_obj_t* label = lv_label_create(connect_button);
|
||||
lv_label_set_text(label, "Connect");
|
||||
lv_obj_add_event_cb(connect_button,[] (lv_event_t* e) { mInstance->connect_btn_cb(e);}, LV_EVENT_CLICKED, password_input);
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Callback which is triggered when the wifi settings are opened (the wifi settings are pressed in the settings
|
||||
* main page). This function will trigger the asynchronous scan for wifi networks and update the label of the wifi
|
||||
* selection page to indicate that wifi networks are being searched for. The wifi event callback function then has to
|
||||
* call the API function to fill the page with the found networks.
|
||||
*
|
||||
* @param event Pointer to event object for the event where this callback is called
|
||||
*/
|
||||
void OmoteUI::wifi_settings_cb(lv_event_t* event)
|
||||
{
|
||||
lv_obj_t* cont = (lv_obj_t*) lv_event_get_user_data(event);
|
||||
lv_obj_clean(cont);
|
||||
lv_obj_t* label = lv_label_create(cont);
|
||||
lv_label_set_text(label, "Searching for wifi networks");
|
||||
mHardware->debugPrint("Wifi settings cb called\n");
|
||||
mHardware->wifi()->scan();
|
||||
//This will trigger an asynchronouse network scan
|
||||
// We need to trigger wifi search via HAL
|
||||
//wifihandler.scan();
|
||||
}
|
21
Platformio/OmoteUI/UIs/BasicRefactored/BasicUI.cpp
Normal file
21
Platformio/OmoteUI/UIs/BasicRefactored/BasicUI.cpp
Normal file
|
@ -0,0 +1,21 @@
|
|||
#include "BasicUI.hpp"
|
||||
#include "HardwareFactory.hpp"
|
||||
#include "HomeScreen.hpp"
|
||||
#include "ScreenManager.hpp"
|
||||
|
||||
using namespace UI;
|
||||
|
||||
BasicUI::BasicUI() : UIBase() {
|
||||
|
||||
HardwareFactory::getAbstract().keys()->RegisterKeyPressHandler(
|
||||
[](auto aKeyEvent) {
|
||||
return Screen::Manager::getInstance().distributeKeyEvent(aKeyEvent);
|
||||
// Could potentially add a check here and display that a key event was
|
||||
// unused.
|
||||
});
|
||||
|
||||
Screen::Manager::getInstance().pushScreen(
|
||||
std::make_unique<Screen::HomeScreen>());
|
||||
|
||||
HardwareFactory::getAbstract().wifi()->begin();
|
||||
}
|
11
Platformio/OmoteUI/UIs/BasicRefactored/BasicUI.hpp
Normal file
11
Platformio/OmoteUI/UIs/BasicRefactored/BasicUI.hpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
#include "UIBase.hpp"
|
||||
|
||||
namespace UI {
|
||||
|
||||
class BasicUI : public UIBase {
|
||||
public:
|
||||
BasicUI();
|
||||
};
|
||||
|
||||
} // namespace UI
|
51
Platformio/OmoteUI/UIs/BasicRefactored/page/Demo.cpp
Normal file
51
Platformio/OmoteUI/UIs/BasicRefactored/page/Demo.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
#include "Demo.hpp"
|
||||
#include "Slider.hpp"
|
||||
|
||||
using namespace UI::Page;
|
||||
|
||||
Demo::Demo() : Base(ID::Pages::Demo) {}
|
||||
|
||||
void Demo::AddSlider() {
|
||||
auto fakeSlider = std::make_unique<Widget::Slider>([](auto data) {});
|
||||
fakeSlider->SetHeight(lv_pct(10));
|
||||
fakeSlider->SetWidth(GetContentWidth());
|
||||
if (sliders.empty()) {
|
||||
fakeSlider->AlignTo(this, LV_ALIGN_TOP_MID);
|
||||
} else {
|
||||
auto nextY = sliders.back()->GetY() + sliders.back()->GetHeight();
|
||||
fakeSlider->SetY(nextY + 10);
|
||||
}
|
||||
|
||||
sliders.push_back(AddElement(std::move(fakeSlider)));
|
||||
}
|
||||
|
||||
bool Demo::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
|
||||
using id = KeyPressAbstract::KeyId;
|
||||
using eventType = KeyPressAbstract::KeyEvent::Type;
|
||||
bool used = true;
|
||||
switch (aKeyEvent.mId) {
|
||||
case id::Aux1:
|
||||
if (aKeyEvent.mType == eventType::Press) {
|
||||
AddSlider();
|
||||
}
|
||||
break;
|
||||
case id::Aux2:
|
||||
if (aKeyEvent.mType == eventType::Release) {
|
||||
if (sliders.size() > 0) {
|
||||
RemoveElement(sliders[0]);
|
||||
sliders.erase(
|
||||
sliders.begin()); // sliders is non owning so after removing delete
|
||||
// it from non owning array
|
||||
}
|
||||
}
|
||||
break;
|
||||
case id::Aux3:
|
||||
break;
|
||||
case id::Aux4:
|
||||
break;
|
||||
default:
|
||||
used = Page::Base::OnKeyEvent(aKeyEvent);
|
||||
break;
|
||||
}
|
||||
return used;
|
||||
}
|
20
Platformio/OmoteUI/UIs/BasicRefactored/page/Demo.hpp
Normal file
20
Platformio/OmoteUI/UIs/BasicRefactored/page/Demo.hpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
#include "PageBase.hpp"
|
||||
|
||||
namespace UI::Page {
|
||||
|
||||
class Demo : public Base {
|
||||
public:
|
||||
Demo();
|
||||
|
||||
void AddSlider();
|
||||
|
||||
void OnShow() override{};
|
||||
void OnHide() override{};
|
||||
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent);
|
||||
|
||||
private:
|
||||
std::vector<UIElement *> sliders;
|
||||
};
|
||||
|
||||
} // namespace UI::Page
|
|
@ -0,0 +1,16 @@
|
|||
#include "DisplaySettings.hpp"
|
||||
#include "BrightnessSlider.hpp"
|
||||
#include "Label.hpp"
|
||||
|
||||
using namespace UI::Page;
|
||||
|
||||
DisplaySettings::DisplaySettings(std::shared_ptr<DisplayAbstract> aDisplay)
|
||||
: Base(UI::ID::Pages::DisplaySettings), mDisplay(aDisplay),
|
||||
mBrightnessSlider(AddElement<Widget::BrightnessSlider>(
|
||||
std::make_unique<Widget::BrightnessSlider>(mDisplay))) {
|
||||
SetBgColor(Color::GREY);
|
||||
|
||||
mBrightnessSlider->SetWidth(GetContentWidth());
|
||||
mBrightnessSlider->SetHeight(80);
|
||||
mBrightnessSlider->AlignTo(this, LV_ALIGN_TOP_MID);
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
#include "DisplayAbstract.h"
|
||||
#include "DropDown.hpp"
|
||||
#include "PageBase.hpp"
|
||||
|
||||
namespace UI::Widget {
|
||||
class BrightnessSlider;
|
||||
} // namespace UI::Widget
|
||||
|
||||
namespace UI::Page {
|
||||
class DisplaySettings : public Base {
|
||||
public:
|
||||
DisplaySettings(std::shared_ptr<DisplayAbstract> aDisplay);
|
||||
|
||||
std::string GetTitle() override { return "Display Settings"; };
|
||||
|
||||
private:
|
||||
std::shared_ptr<DisplayAbstract> mDisplay;
|
||||
Widget::BrightnessSlider *mBrightnessSlider;
|
||||
};
|
||||
} // namespace UI::Page
|
43
Platformio/OmoteUI/UIs/BasicRefactored/page/SettingsPage.cpp
Normal file
43
Platformio/OmoteUI/UIs/BasicRefactored/page/SettingsPage.cpp
Normal file
|
@ -0,0 +1,43 @@
|
|||
#include "SettingsPage.hpp"
|
||||
#include "BackgroundScreen.hpp"
|
||||
#include "Button.hpp"
|
||||
#include "Colors.hpp"
|
||||
#include "DisplaySettings.hpp"
|
||||
#include "HardwareFactory.hpp"
|
||||
#include "List.hpp"
|
||||
#include "PopUpScreen.hpp"
|
||||
#include "ScreenManager.hpp"
|
||||
#include "Slider.hpp"
|
||||
#include "SystemSettings.hpp"
|
||||
#include "WifiSettings.hpp"
|
||||
|
||||
using namespace UI::Page;
|
||||
using namespace UI::Color;
|
||||
|
||||
SettingsPage::SettingsPage()
|
||||
: Base(ID::Pages::Settings), mSettingsList(AddElement<Widget::List>(
|
||||
std::make_unique<Widget::List>())) {
|
||||
|
||||
mSettingsList->AddItem("Display", LV_SYMBOL_EYE_OPEN,
|
||||
[this] { PushDisplaySettings(); });
|
||||
mSettingsList->AddItem("Wifi", LV_SYMBOL_WIFI,
|
||||
[this] { PushWifiSettings(); });
|
||||
mSettingsList->AddItem("System", LV_SYMBOL_SETTINGS,
|
||||
[this] { PushSystemSettings(); });
|
||||
}
|
||||
|
||||
void SettingsPage::PushDisplaySettings() {
|
||||
UI::Screen::Manager::getInstance().pushPopUp(
|
||||
std::make_unique<DisplaySettings>(
|
||||
HardwareFactory::getAbstract().display()));
|
||||
}
|
||||
|
||||
void SettingsPage::PushSystemSettings() {
|
||||
UI::Screen::Manager::getInstance().pushPopUp(
|
||||
std::make_unique<SystemSettings>());
|
||||
}
|
||||
|
||||
void SettingsPage::PushWifiSettings() {
|
||||
UI::Screen::Manager::getInstance().pushPopUp(
|
||||
std::make_unique<WifiSettings>(HardwareFactory::getAbstract().wifi()));
|
||||
}
|
28
Platformio/OmoteUI/UIs/BasicRefactored/page/SettingsPage.hpp
Normal file
28
Platformio/OmoteUI/UIs/BasicRefactored/page/SettingsPage.hpp
Normal file
|
@ -0,0 +1,28 @@
|
|||
#include "HardwareAbstract.hpp"
|
||||
#include "PageBase.hpp"
|
||||
|
||||
namespace UI::Widget {
|
||||
class Button;
|
||||
class List;
|
||||
} // namespace UI::Widget
|
||||
namespace UI::Page {
|
||||
class SettingsPage : public Base {
|
||||
public:
|
||||
SettingsPage();
|
||||
|
||||
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override {
|
||||
return false;
|
||||
};
|
||||
|
||||
void PushDisplaySettings();
|
||||
void PushSystemSettings();
|
||||
void PushWifiSettings();
|
||||
|
||||
protected:
|
||||
void OnShow() override{};
|
||||
void OnHide() override{};
|
||||
|
||||
Widget::Button *mButton;
|
||||
Widget::List *mSettingsList;
|
||||
};
|
||||
} // namespace UI::Page
|
|
@ -0,0 +1,27 @@
|
|||
#include "SystemSettings.hpp"
|
||||
#include "HardwareFactory.hpp"
|
||||
#include "Label.hpp"
|
||||
|
||||
using namespace UI::Page;
|
||||
|
||||
SystemSettings::SystemSettings()
|
||||
: Base(ID::Pages::SystemSettings),
|
||||
mTimeoutLabel(AddElement<Widget::Label>(
|
||||
std::make_unique<Widget::Label>("TimeOut"))),
|
||||
mScreenTimeOutDropDown(AddElement<Widget::DropDown<int>>(
|
||||
std::make_unique<Widget::DropDown<int>>([this](int aTimeout) {
|
||||
HardwareFactory::getAbstract().setSleepTimeout(aTimeout);
|
||||
}))) {
|
||||
|
||||
mTimeoutLabel->AlignTo(this, LV_ALIGN_TOP_MID);
|
||||
mTimeoutLabel->SetHeight(15);
|
||||
|
||||
mScreenTimeOutDropDown->SetHeight(30);
|
||||
mScreenTimeOutDropDown->SetWidth(GetContentWidth());
|
||||
mScreenTimeOutDropDown->AddItem("10 Seconds", 10000);
|
||||
mScreenTimeOutDropDown->AddItem("15 Seconds", 15000);
|
||||
mScreenTimeOutDropDown->AddItem("20 Seconds", 20000);
|
||||
mScreenTimeOutDropDown->AlignTo(mTimeoutLabel, LV_ALIGN_OUT_BOTTOM_MID);
|
||||
mScreenTimeOutDropDown->SetSelected(
|
||||
HardwareFactory::getAbstract().getSleepTimeout());
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
#pragma once
|
||||
#include "DropDown.hpp"
|
||||
#include "PageBase.hpp"
|
||||
|
||||
namespace UI::Widget {
|
||||
class Label;
|
||||
}
|
||||
|
||||
namespace UI::Page {
|
||||
|
||||
class SystemSettings : public Base {
|
||||
public:
|
||||
SystemSettings();
|
||||
|
||||
protected:
|
||||
std::string GetTitle() override { return "System Settings"; }
|
||||
|
||||
private:
|
||||
Widget::Label *mTimeoutLabel;
|
||||
Widget::DropDown<int> *mScreenTimeOutDropDown;
|
||||
};
|
||||
|
||||
} // namespace UI::Page
|
79
Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.cpp
Normal file
79
Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.cpp
Normal file
|
@ -0,0 +1,79 @@
|
|||
#include "WifiSettings.hpp"
|
||||
#include "Keyboard.hpp"
|
||||
#include "Label.hpp"
|
||||
#include "List.hpp"
|
||||
#include "LvglResourceManager.hpp"
|
||||
|
||||
using namespace UI;
|
||||
using namespace UI::Page;
|
||||
|
||||
WifiSettings::WifiSettings(std::shared_ptr<wifiHandlerInterface> aWifi)
|
||||
: Base(ID::Pages::WifiSettings), mWifi(aWifi),
|
||||
mScanCompleteHandler(mWifi->ScanCompleteNotification()),
|
||||
mScanStatusHandler(mWifi->WifiStatusNotification()),
|
||||
mScanningText(AddElement<Widget::Label>(
|
||||
std::make_unique<Widget::Label>("Scanning..."))),
|
||||
mWifiNetworks(AddElement<Widget::List>(std::make_unique<Widget::List>())),
|
||||
mPasswordGetter(nullptr) {
|
||||
|
||||
// Set Handler for when the wifi scan is done
|
||||
mScanCompleteHandler = [this](auto aWifiInfos) {
|
||||
if (aWifiInfos.empty()) {
|
||||
mScanningText->SetText("No Networks Found");
|
||||
return;
|
||||
}
|
||||
mScanningText->SetText("Networks Found");
|
||||
// Create List of wifi infos that when pressed a Keyboard opens
|
||||
for (WifiInfo wifiInfo : aWifiInfos) {
|
||||
mWifiNetworks->AddItem(wifiInfo.ssid, LV_SYMBOL_WIFI, [this, wifiInfo] {
|
||||
OpenPasswordKeyboard(wifiInfo);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
mWifi->scan();
|
||||
}
|
||||
|
||||
void WifiSettings::OpenPasswordKeyboard(WifiInfo aNetworkToConnectTo) {
|
||||
// We already have a Keyboard don't launch another one.
|
||||
if (mPasswordGetter) {
|
||||
return;
|
||||
}
|
||||
auto keyboard = std::make_unique<Widget::Keyboard>(
|
||||
[this, aNetworkToConnectTo](auto aUserEnteredPassword) {
|
||||
// Attempt Connection when user finishes up with keyboard input
|
||||
mWifi->connect(aNetworkToConnectTo.ssid, aUserEnteredPassword);
|
||||
mScanningText->SetText("Attempting Connection to " +
|
||||
aNetworkToConnectTo.ssid);
|
||||
mPasswordGetter->AnimateOut();
|
||||
StartHandlingStatusUpdates();
|
||||
},
|
||||
"Password:");
|
||||
keyboard->OnKeyboardAnimatedOut([this] {
|
||||
// Keyboard is done animating out remove it and null the ref
|
||||
RemoveElement(mPasswordGetter);
|
||||
mPasswordGetter = nullptr;
|
||||
});
|
||||
mPasswordGetter = AddElement<Widget::Keyboard>(std::move(keyboard));
|
||||
}
|
||||
|
||||
void WifiSettings::StartHandlingStatusUpdates() {
|
||||
mScanStatusHandler = [this](auto aWifiStatus) {
|
||||
if (aWifiStatus.isConnected) {
|
||||
mScanningText->SetText("Connected to " + aWifiStatus.ssid);
|
||||
} else {
|
||||
mScanningText->SetText("Failed To Connect To " + aWifiStatus.ssid);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void WifiSettings::SetHeight(lv_coord_t aHeight) {
|
||||
Base::SetHeight(aHeight);
|
||||
mScanningText->AlignTo(this, LV_ALIGN_TOP_MID);
|
||||
mScanningText->SetHeight(20);
|
||||
mScanningText->SetLongMode(LV_LABEL_LONG_SCROLL);
|
||||
const auto padding = 10;
|
||||
mWifiNetworks->AlignTo(mScanningText, LV_ALIGN_OUT_BOTTOM_MID, 0, padding);
|
||||
mWifiNetworks->SetHeight(GetContentHeight() - mScanningText->GetBottom() -
|
||||
padding);
|
||||
};
|
37
Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.hpp
Normal file
37
Platformio/OmoteUI/UIs/BasicRefactored/page/WifiSettings.hpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
#pragma once
|
||||
#include "PageBase.hpp"
|
||||
#include "wifiHandlerInterface.h"
|
||||
|
||||
namespace UI::Widget {
|
||||
class List;
|
||||
class Label;
|
||||
class Keyboard;
|
||||
} // namespace UI::Widget
|
||||
|
||||
namespace UI::Page {
|
||||
class WifiSettings : public Base {
|
||||
using WifiInfo = wifiHandlerInterface::WifiInfo;
|
||||
public:
|
||||
WifiSettings(std::shared_ptr<wifiHandlerInterface> aWifi);
|
||||
|
||||
std::string GetTitle() override { return "Wifi Settings"; };
|
||||
|
||||
void SetHeight(lv_coord_t aHeight) override;
|
||||
|
||||
protected:
|
||||
void StartHandlingStatusUpdates();
|
||||
|
||||
void OpenPasswordKeyboard(WifiInfo aNetworkToConnectTo);
|
||||
|
||||
private:
|
||||
|
||||
std::shared_ptr<wifiHandlerInterface> mWifi;
|
||||
Handler<wifiHandlerInterface::ScanDoneDataTy> mScanCompleteHandler;
|
||||
Handler<wifiHandlerInterface::wifiStatus> mScanStatusHandler;
|
||||
|
||||
UI::Widget::Label *mScanningText;
|
||||
UI::Widget::List *mWifiNetworks;
|
||||
UI::Widget::Keyboard *mPasswordGetter;
|
||||
};
|
||||
|
||||
} // namespace UI::Page
|
28
Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.cpp
Normal file
28
Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.cpp
Normal file
|
@ -0,0 +1,28 @@
|
|||
#include "HomeScreen.hpp"
|
||||
#include "Colors.hpp"
|
||||
#include "Demo.hpp"
|
||||
#include "SettingsPage.hpp"
|
||||
|
||||
using namespace UI::Screen;
|
||||
|
||||
HomeScreen::HomeScreen()
|
||||
: Base(UI::ID::Screens::Home),
|
||||
mTabView(AddElement<Page::TabView>(
|
||||
std::make_unique<Page::TabView>(ID(ID::Pages::INVALID_PAGE_ID)))) {
|
||||
|
||||
SetBgColor(UI::Color::BLACK);
|
||||
SetPushAnimation(LV_SCR_LOAD_ANIM_FADE_IN);
|
||||
|
||||
// Adds pages to the Tab view
|
||||
mTabView->AddTab(std::make_unique<Page::SettingsPage>());
|
||||
mTabView->AddTab(std::make_unique<Page::Demo>());
|
||||
}
|
||||
|
||||
void HomeScreen::SetBgColor(lv_color_t value, lv_style_selector_t selector) {
|
||||
mTabView->SetBgColor(value, selector);
|
||||
UI::UIElement::SetBgColor(value, selector);
|
||||
}
|
||||
|
||||
bool HomeScreen::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
|
||||
return false;
|
||||
};
|
23
Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.hpp
Normal file
23
Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.hpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
#pragma once
|
||||
#include "HardwareAbstract.hpp"
|
||||
#include "PageBase.hpp"
|
||||
#include "ScreenBase.hpp"
|
||||
#include "TabView.hpp"
|
||||
#include <string>
|
||||
namespace UI::Screen {
|
||||
|
||||
class HomeScreen : public Base {
|
||||
public:
|
||||
HomeScreen();
|
||||
|
||||
void SetBgColor(lv_color_t value,
|
||||
lv_style_selector_t selector = LV_PART_MAIN) override;
|
||||
|
||||
protected:
|
||||
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override;
|
||||
|
||||
private:
|
||||
Page::TabView *mTabView;
|
||||
};
|
||||
|
||||
} // namespace UI::Screen
|
|
@ -0,0 +1,44 @@
|
|||
#include "BrightnessSlider.hpp"
|
||||
#include "Label.hpp"
|
||||
#include "Slider.hpp"
|
||||
|
||||
using namespace UI::Widget;
|
||||
|
||||
BrightnessSlider::BrightnessSlider(std::shared_ptr<DisplayAbstract> aDisplay)
|
||||
: Base(ID::Widgets::BrightnessSlider), mDisplay(aDisplay),
|
||||
mSlider(AddElement<Widget::Slider>(std::make_unique<Slider>(
|
||||
[this](auto aNewBrightness) {
|
||||
mDisplay->setBrightness(aNewBrightness);
|
||||
},
|
||||
0, 255))),
|
||||
mLabel(AddElement<Widget::Label>(std::make_unique<Label>("Brightness"))) {
|
||||
mLabel->AlignTo(this, LV_ALIGN_TOP_MID);
|
||||
mSlider->AlignTo(mLabel, LV_ALIGN_OUT_BOTTOM_MID);
|
||||
mSlider->SetWidth(GetContentWidth() - GetContentWidth() * 0.25f);
|
||||
}
|
||||
|
||||
void BrightnessSlider::OnShow() {
|
||||
mSlider->SetValue(mDisplay->getBrightness());
|
||||
Base::OnShow();
|
||||
}
|
||||
|
||||
void BrightnessSlider::SetHeight(lv_coord_t aHeight) {
|
||||
Base::SetHeight(aHeight);
|
||||
auto labelHeight = 12;
|
||||
auto sliderHeight = aHeight * 0.60f - labelHeight;
|
||||
mLabel->SetHeight(labelHeight);
|
||||
mSlider->SetHeight(sliderHeight);
|
||||
mLabel->AlignTo(this, LV_ALIGN_TOP_MID);
|
||||
mSlider->AlignTo(mLabel, LV_ALIGN_OUT_BOTTOM_MID, 0,
|
||||
mLabel->GetContentHeight());
|
||||
}
|
||||
|
||||
bool BrightnessSlider::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
|
||||
using ID = KeyPressAbstract::KeyId;
|
||||
using Type = KeyPressAbstract::KeyEvent::Type;
|
||||
if (aKeyEvent.mId == ID::Aux1 && aKeyEvent.mType == Type::Press) {
|
||||
SetVisiblity(!IsSetVisible());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#pragma once
|
||||
#include "DisplayAbstract.h"
|
||||
#include "WidgetBase.hpp"
|
||||
|
||||
namespace UI::Widget {
|
||||
class Slider;
|
||||
class Label;
|
||||
|
||||
class BrightnessSlider : public Base {
|
||||
public:
|
||||
BrightnessSlider(std::shared_ptr<DisplayAbstract> aDisplay);
|
||||
|
||||
void SetHeight(lv_coord_t aHeight) override;
|
||||
|
||||
protected:
|
||||
void OnShow() override;
|
||||
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<DisplayAbstract> mDisplay;
|
||||
Slider *mSlider;
|
||||
Label *mLabel;
|
||||
};
|
||||
|
||||
} // namespace UI::Widget
|
1180
Platformio/OmoteUI/UIs/Images.cpp
Normal file
1180
Platformio/OmoteUI/UIs/Images.cpp
Normal file
File diff suppressed because it is too large
Load diff
48
Platformio/OmoteUI/UIs/Images.hpp
Normal file
48
Platformio/OmoteUI/UIs/Images.hpp
Normal file
|
@ -0,0 +1,48 @@
|
|||
// OMOTE UI Images
|
||||
// 2023 Matthew Colvin
|
||||
#pragma once
|
||||
#include "lvgl.h"
|
||||
|
||||
class Images {
|
||||
|
||||
public:
|
||||
Images();
|
||||
|
||||
lv_obj_t *addAppleTVIcon(lv_obj_t *parent);
|
||||
lv_obj_t *addAppleDisplayImage(lv_obj_t *parent);
|
||||
lv_obj_t *addAppleBackIcon(lv_obj_t *parent);
|
||||
|
||||
lv_obj_t *addLowBrightnessIcon(lv_obj_t *parent);
|
||||
lv_obj_t *addHighBrightnessIcon(lv_obj_t *parent);
|
||||
lv_obj_t *addLightBulbIcon(lv_obj_t *parent);
|
||||
|
||||
lv_obj_t *addLeftGradiant(lv_obj_t *parent);
|
||||
lv_obj_t *addRightGradiant(lv_obj_t *parent);
|
||||
|
||||
lv_obj_t *addWifiNoSignal(lv_obj_t *parent);
|
||||
lv_obj_t *addWifiLowSignal(lv_obj_t *parent);
|
||||
lv_obj_t *addWifiMidSignal(lv_obj_t *parent);
|
||||
lv_obj_t *addWifiHighSignal(lv_obj_t *parent);
|
||||
|
||||
private:
|
||||
// Make Image based on anImageDesc then
|
||||
// add that image to parent.
|
||||
lv_obj_t *addImg(lv_obj_t *parent, lv_img_dsc_t *anImgDesc);
|
||||
void setupImageDescriptions();
|
||||
|
||||
lv_img_dsc_t appleTvIcon;
|
||||
lv_img_dsc_t appleDisplayIcon;
|
||||
lv_img_dsc_t appleBackIcon;
|
||||
|
||||
lv_img_dsc_t low_brightness;
|
||||
lv_img_dsc_t high_brightness;
|
||||
lv_img_dsc_t lightbulb_icon;
|
||||
|
||||
lv_img_dsc_t gradientLeft;
|
||||
lv_img_dsc_t gradientRight;
|
||||
|
||||
lv_img_dsc_t wifiNoSignal;
|
||||
lv_img_dsc_t wifiLowSignal;
|
||||
lv_img_dsc_t wifiMidSignal;
|
||||
lv_img_dsc_t wifiHighSignal;
|
||||
};
|
49
Platformio/OmoteUI/UIs/LvglResourceManager.hpp
Normal file
49
Platformio/OmoteUI/UIs/LvglResourceManager.hpp
Normal file
|
@ -0,0 +1,49 @@
|
|||
#pragma once
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
|
||||
namespace UI {
|
||||
class UIBase;
|
||||
} // namespace UI
|
||||
|
||||
class LvglResourceManager {
|
||||
friend UI::UIBase;
|
||||
|
||||
public:
|
||||
static LvglResourceManager &GetInstance() {
|
||||
static LvglResourceManager mInstance;
|
||||
return mInstance;
|
||||
}
|
||||
|
||||
[[nodiscard]] std::scoped_lock<std::recursive_mutex> scopeLock() {
|
||||
return std::scoped_lock(mLvglMutex);
|
||||
}
|
||||
|
||||
void AttemptNow(std::function<void()> aLvglModifierFunction) {
|
||||
// Attempt to take mutex and preform op if you can't then queue up.
|
||||
if (mLvglMutex.try_lock()) {
|
||||
aLvglModifierFunction();
|
||||
mLvglMutex.unlock();
|
||||
} else {
|
||||
QueueForLater(aLvglModifierFunction);
|
||||
}
|
||||
}
|
||||
void QueueForLater(std::function<void()> aLvglModifierFunction) {
|
||||
mLvglTasks.push(std::move(aLvglModifierFunction));
|
||||
}
|
||||
|
||||
protected:
|
||||
LvglResourceManager(){};
|
||||
|
||||
void HandleQueuedTasks() {
|
||||
auto lock = scopeLock();
|
||||
while (!mLvglTasks.empty()) {
|
||||
mLvglTasks.front()();
|
||||
mLvglTasks.pop();
|
||||
}
|
||||
}
|
||||
|
||||
std::queue<std::function<void()>> mLvglTasks;
|
||||
std::recursive_mutex mLvglMutex;
|
||||
};
|
15
Platformio/OmoteUI/UIs/UIBase.cpp
Normal file
15
Platformio/OmoteUI/UIs/UIBase.cpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include "UIBase.hpp"
|
||||
#include "LvglResourceManager.hpp"
|
||||
|
||||
using namespace UI;
|
||||
|
||||
UIBase::UIBase() {}
|
||||
|
||||
void UIBase::loopHandler() {
|
||||
{
|
||||
auto lock = LvglResourceManager::GetInstance().scopeLock();
|
||||
lv_timer_handler();
|
||||
lv_task_handler();
|
||||
}
|
||||
LvglResourceManager::GetInstance().HandleQueuedTasks();
|
||||
}
|
19
Platformio/OmoteUI/UIs/UIBase.hpp
Normal file
19
Platformio/OmoteUI/UIs/UIBase.hpp
Normal file
|
@ -0,0 +1,19 @@
|
|||
// OMOTE UI
|
||||
// 2023 Matthew Colvin
|
||||
|
||||
#pragma once
|
||||
#include "HardwareAbstract.hpp"
|
||||
#include <memory>
|
||||
|
||||
namespace UI {
|
||||
|
||||
class UIBase {
|
||||
public:
|
||||
UIBase();
|
||||
|
||||
virtual void loopHandler();
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
} // namespace UI
|
40
Platformio/OmoteUI/core/Animation.cpp
Normal file
40
Platformio/OmoteUI/core/Animation.cpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
#include "Animation.hpp"
|
||||
|
||||
using namespace UI;
|
||||
|
||||
Animation::Animation(std::function<void(int32_t)> aAnimator,
|
||||
int32_t aAnimationTime, int32_t aStart, int32_t aEnd)
|
||||
: mAnimator(aAnimator), mStart(aStart), mEnd(aEnd) {
|
||||
lv_anim_init(&mAnimation);
|
||||
mAnimation.user_data = this;
|
||||
lv_anim_set_custom_exec_cb(&mAnimation, AnimatorImpl);
|
||||
lv_anim_set_time(&mAnimation, aAnimationTime);
|
||||
}
|
||||
|
||||
Animation::~Animation() { lv_anim_custom_del(&mAnimation, AnimatorImpl); }
|
||||
|
||||
void Animation::HandleAnimationComplete(
|
||||
std::function<void()> onAnimationComplete) {
|
||||
mOnComplete = onAnimationComplete;
|
||||
}
|
||||
|
||||
void Animation::Start() {
|
||||
lv_anim_set_values(&mAnimation, mStart, mEnd);
|
||||
lv_anim_start(&mAnimation);
|
||||
}
|
||||
|
||||
void Animation::Reverse() {
|
||||
std::swap(mStart, mEnd);
|
||||
Start();
|
||||
}
|
||||
|
||||
//////////////////////// Statics /////////////////////////////////////////
|
||||
|
||||
void Animation::AnimatorImpl(lv_anim_t *aSelf, int32_t aNextValue) {
|
||||
auto self = reinterpret_cast<Animation *>(aSelf->user_data);
|
||||
self->mAnimator(aNextValue);
|
||||
// TODO This probably will not support Overshoot animations.
|
||||
if (self->mOnComplete && aNextValue == self->mEnd) {
|
||||
self->mOnComplete();
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue