Part 2 Development

Adding solenoid close timeout. Closing all solenoids on power-up.

Central unit and Solenoid valve release
This commit is contained in:
Sasa Karanovic
2021-04-27 13:22:49 -04:00
parent 14232ec7e8
commit 225809b95c
106 changed files with 79444 additions and 86 deletions
@@ -40,23 +40,6 @@ PrefsVaultGUID=
PrefsRevisionGUID=
[Document1]
DocumentPath=Out.OutJob
AnnotationEnabled=1
AnnotateStartValue=1
AnnotationIndexControlEnabled=0
AnnotateSuffix=
AnnotateScope=All
AnnotateOrder=-1
DoLibraryUpdate=1
DoDatabaseUpdate=1
ClassGenCCAutoEnabled=1
ClassGenCCAutoRoomEnabled=1
ClassGenNCAutoScope=None
DItemRevisionGUID=
GenerateClassCluster=0
DocumentUniqueId=
[Document2]
DocumentPath=MFGOutput.OutJob
AnnotationEnabled=1
AnnotateStartValue=1
@@ -73,7 +56,7 @@ DItemRevisionGUID=
GenerateClassCluster=0
DocumentUniqueId=
[Document3]
[Document2]
DocumentPath=PlantSensor_V02_PCB.PcbDoc
AnnotationEnabled=1
AnnotateStartValue=1
@@ -90,7 +73,7 @@ DItemRevisionGUID=
GenerateClassCluster=0
DocumentUniqueId=SKQOVKES
[Document4]
[Document3]
DocumentPath=PlantSensor_V02_Schematic.SchDoc
AnnotationEnabled=1
AnnotateStartValue=1
@@ -682,46 +665,16 @@ OutputName9=Specctra Design PCB
OutputDocumentPath9=
OutputVariantName9=
OutputDefault9=0
OutputType10=Ansoft Neutral
OutputName10=Ansoft Neutral (AutoPCB)
OutputType10=MBAExportPARASOLID
OutputName10=Export PARASOLID
OutputDocumentPath10=
OutputVariantName10=
OutputDefault10=0
OutputType11=HyperLynx
OutputName11=HyperLynx (AutoPCB)
OutputType11=MBAExportSTEP
OutputName11=Export STEP
OutputDocumentPath11=
OutputVariantName11=
OutputDefault11=0
OutputType12=MBAExportPARASOLID
OutputName12=Export PARASOLID
OutputDocumentPath12=
OutputVariantName12=
OutputDefault12=0
OutputType13=MBAExportSTEP
OutputName13=Export STEP
OutputDocumentPath13=
OutputVariantName13=
OutputDefault13=0
OutputType14=Orcad v7 Capture Design
OutputName14=Orcad v7 Capture Design (AutoSCH)
OutputDocumentPath14=
OutputVariantName14=
OutputDefault14=0
OutputType15=P-CAD ASCII
OutputName15=P-CAD ASCII (AutoPCB)
OutputDocumentPath15=
OutputVariantName15=
OutputDefault15=0
OutputType16=P-CAD V16 Schematic Design
OutputName16=P-CAD V16 Schematic Design (AutoSCH)
OutputDocumentPath16=
OutputVariantName16=
OutputDefault16=0
OutputType17=SiSoft
OutputName17=SiSoft (AutoPCB)
OutputDocumentPath17=
OutputVariantName17=
OutputDefault17=0
[OutputGroup10]
Name=PostProcess Outputs
@@ -1 +1 @@
Record=TopLevelDocument|FileName=PlantSensor_V02_Schematic.SchDoc
Record=TopLevelDocument|FileName=PlantSensor_V02_Schematic.SchDoc|SheetNumber=
@@ -0,0 +1,113 @@
#
# There exist several targets which are by default empty and which can be
# used for execution of your targets. These targets are usually executed
# before and after some main targets. They are:
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
#
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
#
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL
# Environment
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
RANLIB=ranlib
# build
build: .build-post
.build-pre:
# Add your pre 'build' code here...
.build-post: .build-impl
# Add your post 'build' code here...
# clean
clean: .clean-post
.clean-pre:
# Add your pre 'clean' code here...
# WARNING: the IDE does not call this target since it takes a long time to
# simply run make. Instead, the IDE removes the configuration directories
# under build and dist directly without calling make.
# This target is left here so people can do a clean when running a clean
# outside the IDE.
.clean-post: .clean-impl
# Add your post 'clean' code here...
# clobber
clobber: .clobber-post
.clobber-pre:
# Add your pre 'clobber' code here...
.clobber-post: .clobber-impl
# Add your post 'clobber' code here...
# all
all: .all-post
.all-pre:
# Add your pre 'all' code here...
.all-post: .all-impl
# Add your post 'all' code here...
# help
help: .help-post
.help-pre:
# Add your pre 'help' code here...
.help-post: .help-impl
# Add your post 'help' code here...
# include project implementation makefile
include nbproject/Makefile-impl.mk
# include project make variables
include nbproject/Makefile-variables.mk
File diff suppressed because one or more lines are too long
@@ -0,0 +1,43 @@
#ifndef __PLANTSYSTEM_COMMS_H
#define __PLANTSYSTEM_COMMS_H
#include <stdbool.h>
// CMD (1byte) + DATATYPE (1byte) + DATALEN (2bytes)
#define PLANTSYSTEM_MIN_HEADER_LENGHT 4
typedef enum
{
CMD_FIRST = 0x00,
CMD_GET_DEVICE_INFO,
CMD_GET_TEMPERATURE,
CMD_GET_SOILMOISTURE,
CMD_GET_AMBIENTLIGHT,
CMD_GET_SOLENOID_STATE,
CMD_SET_SOLENOID_STATE,
CMD_LAST
} plant_cmd_t;
typedef enum
{
DATATYPE_FIRST = 0x00,
DATATYPE_NONE,
DATATYPE_SINGLE_VALUE,
DATATYPE_KEY_VALUE_PAIR,
DATATYPE_LAST
} plant_dataType_t;
typedef enum
{
DEVICETYPE_FIRST = 0x00,
DEVICETYPE_SENSOR_V1,
DEVICETYPE_SOLENOID_V1,
DEVICETYPE_LAST
} plant_deviceType_t;
bool PlanSystem_ParseBuffer(uint8_t *pBuffer, uint8_t nBufferLen, uint8_t *cmd, uint8_t *dataType, uint8_t *dataLength);
#endif
@@ -0,0 +1,111 @@
#include "SolenoidDriver.h"
#include "PlantSystem.h"
#include "debug.h"
#include "mcc_generated_files/include/twi0_slave.h"
// -- Global definitions
// -- Extern variables
extern uint8_t TWI_TxBuff[TWI_BUFFER_SIZE];
extern uint8_t TWI_TxLen;
extern uint8_t TWI_TxPos;
extern uint8_t TWI_RxBuff[TWI_BUFFER_SIZE]; // Device RX from host
extern uint8_t TWI_RxPos;
// Solenoid turn-off timer
extern volatile uint32_t milliseconds;
extern volatile uint32_t solenoidTurnOff_target;
extern volatile bool bWDTRunning;
// CMD (1byte) + DATATYPE (1byte) + DATALEN (2bytes)
void SolenoidDriver_ProcessRequest(uint8_t *pRxBuff, uint8_t nLen)
{
#if 0
debugStr("pRxBuff:\r\n");
for(uint8_t i=0; i<nLen; i++)
{
debugHex(pRxBuff[i]);
}
#endif
// First byte is always command
switch(pRxBuff[0])
{
// -- Get device information
case CMD_GET_DEVICE_INFO:
{
debugStr("\r\nInfo\r\n");
TWI_TxBuff[0] = 0xFF; // First byte is 0xFF to allow compatibility with STM and disable clock strech
TWI_TxBuff[1] = CMD_GET_DEVICE_INFO; // Second byte is response to command
TWI_TxBuff[2] = DATATYPE_SINGLE_VALUE;
TWI_TxBuff[3] = 0;
TWI_TxBuff[4] = 2;
TWI_TxBuff[5] = DEVICETYPE_SOLENOID_V1;
TWI_TxBuff[6] = 1;
TWI_TxLen = 7;
}
break;
// -- SET solenoid state
case CMD_SET_SOLENOID_STATE:
{
debugStr("\r\nSET State: ");
// Data Type `DATATYPE_SINGLE_VALUE` and exactly 0 + 1 = 1 bytes
if(pRxBuff[1] == DATATYPE_SINGLE_VALUE && pRxBuff[2] == 0 && pRxBuff[3] == 1)
{
debugHex(pRxBuff[1]);
if(pRxBuff[4] == 0)
{
debugStr("Turn OFF\r\n");
Solenoid_SET_Off();
Solenoid_ActLED_Off();
}
else
{
debugStr("Turn ON\r\n");
Solenoid_SET_On();
Solenoid_ActLED_On();
SolenoidWDT_Activate();
}
}
else
{
debugStr("Bad Data\r\n");
}
}
break;
// -- GET solenoid state
case CMD_GET_SOLENOID_STATE:
{
debugStr("\r\nGET state\r\n");
TWI_TxBuff[0] = 0xFF; // First byte is 0xFF to allow compatibility with STM and disable clock strech
TWI_TxBuff[1] = CMD_GET_SOLENOID_STATE; // Second byte is response to command
TWI_TxBuff[2] = DATATYPE_SINGLE_VALUE;
TWI_TxBuff[3] = 0;
TWI_TxBuff[4] = 1;
TWI_TxBuff[5] = Solenoid_GetState();
TWI_TxLen = 6;
}
break;
// Catch-all
default:
debugStr("Uknown CMD received\r\n");
break;
}
}
void SolenoidWDT_Activate(void)
{
solenoidTurnOff_target = milliseconds + SOLENOID_ON_TIMEOUT;
bWDTRunning = true;
}
@@ -0,0 +1,26 @@
#ifndef SOLENOID_DRIVER_H
#define SOLENOID_DRIVER_H
#include <stdbool.h>
#include "mcc_generated_files/utils/compiler.h"
#include "mcc_generated_files/include/port.h"
#define TWI_BUFFER_SIZE 40
#define DEVICE_I2C_ADDRESS (0x20 << 1)
#define Solenoid_ActLED_On() (PORTB_set_pin_level(1, true))
#define Solenoid_ActLED_Off() (PORTB_set_pin_level(1, false))
#define Solenoid_GetState() (PORTA_get_pin_level(3))
#define Solenoid_SET_On() (PORTA_set_pin_level(3, true))
#define Solenoid_SET_Off() (PORTA_set_pin_level(3, false))
#define SOLENOID_ON_TIMEOUT 9000
void SolenoidWDT_Activate(void);
void SolenoidDriver_ProcessRequest(uint8_t *pRxBuff, uint8_t nLen);
#endif /* SOLENOID_DRIVER_H */
@@ -0,0 +1,28 @@
#include "debug.h"
#include "mcc_generated_files/include/usart0.h"
static const char HEX[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
#define HEXUPPER(x) (HEX[ ((x>>4)&0x0F) ])
#define HEXLOWER(x) (HEX[(x&0x0F)])
#ifdef _DEBUG_ENABLE_
void debugStr(char *data)
{
while(*data)
{
while (!(USART0.STATUS & USART_DREIF_bm));
USART0.TXDATAL = *data++;
}
}
void debugHex(char data)
{
char tmp[7] = { '0', 'x', '0', '0', '\r', '\n', 0};
tmp[2] = HEXUPPER(data);
tmp[3] = HEXLOWER(data);
debugStr(tmp);
}
#endif
@@ -0,0 +1,22 @@
#ifndef DEBUG_H
#define DEBUG_H
// #define _DEBUG_ENABLE_
//#define _DEBUG_TWI_
#ifdef _DEBUG_ENABLE_
void debugStr(char *data);
void debugHex(char data);
#else
#define debugStr(x)
#define debugHex(x)
#endif
#ifdef _DEBUG_TWI_
#define debugTWIStr(x) (debugStr(x))
#else
#define debugTWIStr(x)
#endif
#endif /* DEBUG_H */
@@ -0,0 +1,70 @@
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "mcc_generated_files/mcc.h"
#include "SolenoidDriver.h"
#include "debug.h"
volatile uint32_t milliseconds = 0;
volatile uint32_t solenoidTurnOff_target = 0;
volatile bool bWDTRunning = 0;
static void SolenoidWDT_Tick(void);
/*
Main application
*/
int main(void)
{
/* Initializes MCU, drivers and middleware */
__builtin_avr_delay_cycles(500);
SYSTEM_Initialize();
__builtin_avr_delay_cycles(2000);
debugStr("\r\n\r\nWell hello there!\r\n");
while (1)
{
SolenoidWDT_Tick();
__builtin_avr_wdr();
}
}
void SysTick(void)
{
milliseconds++;
}
static void SolenoidWDT_Tick(void)
{
if((Solenoid_GetState()) && (bWDTRunning) && (solenoidTurnOff_target < milliseconds))
{
Solenoid_SET_Off();
Solenoid_ActLED_Off();
bWDTRunning = false;
}
}
/**
End of File
*/
@@ -0,0 +1,41 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef CLOCK_CONFIG_H
#define CLOCK_CONFIG_H
#ifndef F_CPU
#define F_CPU 20000000
#endif
#endif // CLOCK_CONFIG_H
@@ -0,0 +1,49 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include <avr/io.h>
/**
* \Configures Fuse bits
*/
FUSES =
{
.APPEND = 0,
.BODCFG = ACTIVE_DIS_gc | LVL_BODLEVEL0_gc | SAMPFREQ_1KHz_gc | SLEEP_DIS_gc,
.BOOTEND = 0,
.OSCCFG = FREQSEL_20MHZ_gc,
.SYSCFG0 = CRCSRC_NOCRC_gc | RSTPINCFG_UPDI_gc,
.SYSCFG1 = SUT_64MS_gc,
.WDTCFG = PERIOD_2KCLK_gc | WINDOW_OFF_gc,
};
@@ -0,0 +1,82 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef CPU_CCP_H
#define CPU_CCP_H
#include "../utils/compiler.h"
#include "../include/protected_io.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* \brief Write to a CCP-protected 8-bit I/O register
*
* \param addr Address of the I/O register
* \param value Value to be written
*
* \note Using IAR Embedded workbench, the choice of memory model has an impact
* on calling convention. The memory model is not visible to the
* preprocessor, so it must be defined in the Assembler preprocessor directives.
*/
static inline void ccp_write_io(void *addr, uint8_t value)
{
protected_write_io(addr, CCP_IOREG_gc, value);
}
/** @} */
/**
* \brief Write to CCP-protected 8-bit SPM register
*
* \param addr Address of the SPM register
* \param value Value to be written
*
* \note Using IAR Embedded workbench, the choice of memory model has an impact
* on calling convention. The memory model is not visible to the
* preprocessor, so it must be defined in the Assembler preprocessor directives.
*/
static inline void ccp_write_spm(void *addr, uint8_t value)
{
protected_write_io(addr, CCP_SPM_gc, value);
}
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* CPU_CCP_H */
@@ -0,0 +1,54 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef CPUINT_H_INCLUDED
#define CPUINT_H_INCLUDED
#include "../utils/compiler.h"
#include "ccp.h"
#include "../utils/atomic.h"
#ifdef __cplusplus
extern "C" {
#endif /** \
* \brief Initialize cpuint interface \
* \
* \return Initialization status \
*/
int8_t CPUINT_Initialize();
#ifdef __cplusplus
}
#endif
#endif /* CPUINT_H_INCLUDED */
@@ -0,0 +1,92 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef NVMCTRL_BASIC_H_INCLUDED
#define NVMCTRL_BASIC_H_INCLUDED
#include "../utils/compiler.h"
#include <string.h>
#include "ccp.h"
#define BOOTLOADER_SECTION __attribute__((section(".bootloader")))
#ifdef __cplusplus
extern "C" {
#endif
/** Datatype for flash address */
typedef uint16_t flash_adr_t;
/** Datatype for EEPROM address */
typedef uint16_t eeprom_adr_t;
/** Datatype for return status of NVMCTRL operations */
typedef enum {
NVM_OK = 0, ///< NVMCTRL free, no write ongoing.
NVM_ERROR = 1, ///< NVMCTRL operation retsulted in error
NVM_BUSY = 2, ///< NVMCTRL busy, write ongoing.
} nvmctrl_status_t;
int8_t FLASH_Initialize();
uint8_t FLASH_ReadEepromByte(eeprom_adr_t eeprom_adr);
nvmctrl_status_t FLASH_WriteEepromByte(eeprom_adr_t eeprom_adr, uint8_t data);
void FLASH_ReadEepromBlock(eeprom_adr_t eeprom_adr, uint8_t *data, size_t size);
nvmctrl_status_t FLASH_WriteEepromBlock(eeprom_adr_t eeprom_adr, uint8_t *data, size_t size);
bool FLASH_IsEepromReady();
uint8_t FLASH_ReadFlashByte(flash_adr_t flash_adr);
nvmctrl_status_t FLASH_WriteFlashByte(flash_adr_t flash_adr, uint8_t *ram_buffer, uint8_t data);
nvmctrl_status_t FLASH_EraseFlashPage(flash_adr_t flash_adr);
nvmctrl_status_t FLASH_WriteFlashPage(flash_adr_t flash_adr, uint8_t *data);
nvmctrl_status_t FLASH_WriteFlashBlock(flash_adr_t flash_adr, uint8_t *data, size_t size,
uint8_t *ram_buffer);
nvmctrl_status_t FLASH_WriteFlashStream(flash_adr_t flash_adr, uint8_t data, bool finalize);
#ifdef __cplusplus
}
#endif
#endif /* NVMCTRL_BASIC_H_INCLUDED */
@@ -0,0 +1,160 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef PINS_H_INCLUDED
#define PINS_H_INCLUDED
#include <avr/io.h>
#include "port.h"
//get/set PB3 aliases
#define PB3_SetHigh() do { PORTB_OUTSET = 0x8; } while(0)
#define PB3_SetLow() do { PORTB_OUTCLR = 0x8; } while(0)
#define PB3_Toggle() do { PORTB_OUTTGL = 0x8; } while(0)
#define PB3_GetValue() (VPORTB.IN & (0x1 << 3))
#define PB3_SetDigitalInput() do { PORTB_DIRCLR = 0x8; } while(0)
#define PB3_SetDigitalOutput() do { PORTB_DIRSET = 0x8; } while(0)
#define PB3_SetPullUp() do { PORTB_PIN3CTRL |= PORT_PULLUPEN_bm; } while(0)
#define PB3_ResetPullUp() do { PORTB_PIN3CTRL &= ~PORT_PULLUPEN_bm; } while(0)
#define PB3_SetInverted() do { PORTB_PIN3CTRL |= PORT_INVEN_bm; } while(0)
#define PB3_ResetInverted() do { PORTB_PIN3CTRL &= ~PORT_INVEN_bm; } while(0)
#define PB3_DisableInterruptOnChange() do { PORTB.PIN3CTRL = (PORTB.PIN3CTRL & ~PORT_ISC_gm) | 0x0 ; } while(0)
#define PB3_EnableInterruptForBothEdges() do { PORTB.PIN3CTRL = (PORTB.PIN3CTRL & ~PORT_ISC_gm) | 0x1 ; } while(0)
#define PB3_EnableInterruptForRisingEdge() do { PORTB.PIN3CTRL = (PORTB.PIN3CTRL & ~PORT_ISC_gm) | 0x2 ; } while(0)
#define PB3_EnableInterruptForFallingEdge() do { PORTB.PIN3CTRL = (PORTB.PIN3CTRL & ~PORT_ISC_gm) | 0x3 ; } while(0)
#define PB3_DisableDigitalInputBuffer() do { PORTB.PIN3CTRL = (PORTB.PIN3CTRL & ~PORT_ISC_gm) | 0x4 ; } while(0)
#define PB3_EnableInterruptForLowLevelSensing() do { PORTB.PIN3CTRL = (PORTB.PIN3CTRL & ~PORT_ISC_gm) | 0x5 ; } while(0)
//get/set PA2 aliases
#define PA2_SetHigh() do { PORTA_OUTSET = 0x4; } while(0)
#define PA2_SetLow() do { PORTA_OUTCLR = 0x4; } while(0)
#define PA2_Toggle() do { PORTA_OUTTGL = 0x4; } while(0)
#define PA2_GetValue() (VPORTA.IN & (0x1 << 2))
#define PA2_SetDigitalInput() do { PORTA_DIRCLR = 0x4; } while(0)
#define PA2_SetDigitalOutput() do { PORTA_DIRSET = 0x4; } while(0)
#define PA2_SetPullUp() do { PORTA_PIN2CTRL |= PORT_PULLUPEN_bm; } while(0)
#define PA2_ResetPullUp() do { PORTA_PIN2CTRL &= ~PORT_PULLUPEN_bm; } while(0)
#define PA2_SetInverted() do { PORTA_PIN2CTRL |= PORT_INVEN_bm; } while(0)
#define PA2_ResetInverted() do { PORTA_PIN2CTRL &= ~PORT_INVEN_bm; } while(0)
#define PA2_DisableInterruptOnChange() do { PORTA.PIN2CTRL = (PORTA.PIN2CTRL & ~PORT_ISC_gm) | 0x0 ; } while(0)
#define PA2_EnableInterruptForBothEdges() do { PORTA.PIN2CTRL = (PORTA.PIN2CTRL & ~PORT_ISC_gm) | 0x1 ; } while(0)
#define PA2_EnableInterruptForRisingEdge() do { PORTA.PIN2CTRL = (PORTA.PIN2CTRL & ~PORT_ISC_gm) | 0x2 ; } while(0)
#define PA2_EnableInterruptForFallingEdge() do { PORTA.PIN2CTRL = (PORTA.PIN2CTRL & ~PORT_ISC_gm) | 0x3 ; } while(0)
#define PA2_DisableDigitalInputBuffer() do { PORTA.PIN2CTRL = (PORTA.PIN2CTRL & ~PORT_ISC_gm) | 0x4 ; } while(0)
#define PA2_EnableInterruptForLowLevelSensing() do { PORTA.PIN2CTRL = (PORTA.PIN2CTRL & ~PORT_ISC_gm) | 0x5 ; } while(0)
//get/set PB2 aliases
#define PB2_SetHigh() do { PORTB_OUTSET = 0x4; } while(0)
#define PB2_SetLow() do { PORTB_OUTCLR = 0x4; } while(0)
#define PB2_Toggle() do { PORTB_OUTTGL = 0x4; } while(0)
#define PB2_GetValue() (VPORTB.IN & (0x1 << 2))
#define PB2_SetDigitalInput() do { PORTB_DIRCLR = 0x4; } while(0)
#define PB2_SetDigitalOutput() do { PORTB_DIRSET = 0x4; } while(0)
#define PB2_SetPullUp() do { PORTB_PIN2CTRL |= PORT_PULLUPEN_bm; } while(0)
#define PB2_ResetPullUp() do { PORTB_PIN2CTRL &= ~PORT_PULLUPEN_bm; } while(0)
#define PB2_SetInverted() do { PORTB_PIN2CTRL |= PORT_INVEN_bm; } while(0)
#define PB2_ResetInverted() do { PORTB_PIN2CTRL &= ~PORT_INVEN_bm; } while(0)
#define PB2_DisableInterruptOnChange() do { PORTB.PIN2CTRL = (PORTB.PIN2CTRL & ~PORT_ISC_gm) | 0x0 ; } while(0)
#define PB2_EnableInterruptForBothEdges() do { PORTB.PIN2CTRL = (PORTB.PIN2CTRL & ~PORT_ISC_gm) | 0x1 ; } while(0)
#define PB2_EnableInterruptForRisingEdge() do { PORTB.PIN2CTRL = (PORTB.PIN2CTRL & ~PORT_ISC_gm) | 0x2 ; } while(0)
#define PB2_EnableInterruptForFallingEdge() do { PORTB.PIN2CTRL = (PORTB.PIN2CTRL & ~PORT_ISC_gm) | 0x3 ; } while(0)
#define PB2_DisableDigitalInputBuffer() do { PORTB.PIN2CTRL = (PORTB.PIN2CTRL & ~PORT_ISC_gm) | 0x4 ; } while(0)
#define PB2_EnableInterruptForLowLevelSensing() do { PORTB.PIN2CTRL = (PORTB.PIN2CTRL & ~PORT_ISC_gm) | 0x5 ; } while(0)
//get/set PA1 aliases
#define PA1_SetHigh() do { PORTA_OUTSET = 0x2; } while(0)
#define PA1_SetLow() do { PORTA_OUTCLR = 0x2; } while(0)
#define PA1_Toggle() do { PORTA_OUTTGL = 0x2; } while(0)
#define PA1_GetValue() (VPORTA.IN & (0x1 << 1))
#define PA1_SetDigitalInput() do { PORTA_DIRCLR = 0x2; } while(0)
#define PA1_SetDigitalOutput() do { PORTA_DIRSET = 0x2; } while(0)
#define PA1_SetPullUp() do { PORTA_PIN1CTRL |= PORT_PULLUPEN_bm; } while(0)
#define PA1_ResetPullUp() do { PORTA_PIN1CTRL &= ~PORT_PULLUPEN_bm; } while(0)
#define PA1_SetInverted() do { PORTA_PIN1CTRL |= PORT_INVEN_bm; } while(0)
#define PA1_ResetInverted() do { PORTA_PIN1CTRL &= ~PORT_INVEN_bm; } while(0)
#define PA1_DisableInterruptOnChange() do { PORTA.PIN1CTRL = (PORTA.PIN1CTRL & ~PORT_ISC_gm) | 0x0 ; } while(0)
#define PA1_EnableInterruptForBothEdges() do { PORTA.PIN1CTRL = (PORTA.PIN1CTRL & ~PORT_ISC_gm) | 0x1 ; } while(0)
#define PA1_EnableInterruptForRisingEdge() do { PORTA.PIN1CTRL = (PORTA.PIN1CTRL & ~PORT_ISC_gm) | 0x2 ; } while(0)
#define PA1_EnableInterruptForFallingEdge() do { PORTA.PIN1CTRL = (PORTA.PIN1CTRL & ~PORT_ISC_gm) | 0x3 ; } while(0)
#define PA1_DisableDigitalInputBuffer() do { PORTA.PIN1CTRL = (PORTA.PIN1CTRL & ~PORT_ISC_gm) | 0x4 ; } while(0)
#define PA1_EnableInterruptForLowLevelSensing() do { PORTA.PIN1CTRL = (PORTA.PIN1CTRL & ~PORT_ISC_gm) | 0x5 ; } while(0)
//get/set SOLENOID_FET aliases
#define SOLENOID_FET_SetHigh() do { PORTA_OUTSET = 0x8; } while(0)
#define SOLENOID_FET_SetLow() do { PORTA_OUTCLR = 0x8; } while(0)
#define SOLENOID_FET_Toggle() do { PORTA_OUTTGL = 0x8; } while(0)
#define SOLENOID_FET_GetValue() (VPORTA.IN & (0x1 << 3))
#define SOLENOID_FET_SetDigitalInput() do { PORTA_DIRCLR = 0x8; } while(0)
#define SOLENOID_FET_SetDigitalOutput() do { PORTA_DIRSET = 0x8; } while(0)
#define SOLENOID_FET_SetPullUp() do { PORTA_PIN3CTRL |= PORT_PULLUPEN_bm; } while(0)
#define SOLENOID_FET_ResetPullUp() do { PORTA_PIN3CTRL &= ~PORT_PULLUPEN_bm; } while(0)
#define SOLENOID_FET_SetInverted() do { PORTA_PIN3CTRL |= PORT_INVEN_bm; } while(0)
#define SOLENOID_FET_ResetInverted() do { PORTA_PIN3CTRL &= ~PORT_INVEN_bm; } while(0)
#define SOLENOID_FET_DisableInterruptOnChange() do { PORTA.PIN3CTRL = (PORTA.PIN3CTRL & ~PORT_ISC_gm) | 0x0 ; } while(0)
#define SOLENOID_FET_EnableInterruptForBothEdges() do { PORTA.PIN3CTRL = (PORTA.PIN3CTRL & ~PORT_ISC_gm) | 0x1 ; } while(0)
#define SOLENOID_FET_EnableInterruptForRisingEdge() do { PORTA.PIN3CTRL = (PORTA.PIN3CTRL & ~PORT_ISC_gm) | 0x2 ; } while(0)
#define SOLENOID_FET_EnableInterruptForFallingEdge() do { PORTA.PIN3CTRL = (PORTA.PIN3CTRL & ~PORT_ISC_gm) | 0x3 ; } while(0)
#define SOLENOID_FET_DisableDigitalInputBuffer() do { PORTA.PIN3CTRL = (PORTA.PIN3CTRL & ~PORT_ISC_gm) | 0x4 ; } while(0)
#define SOLENOID_FET_EnableInterruptForLowLevelSensing() do { PORTA.PIN3CTRL = (PORTA.PIN3CTRL & ~PORT_ISC_gm) | 0x5 ; } while(0)
//get/set LED aliases
#define LED_SetHigh() do { PORTB_OUTSET = 0x2; } while(0)
#define LED_SetLow() do { PORTB_OUTCLR = 0x2; } while(0)
#define LED_Toggle() do { PORTB_OUTTGL = 0x2; } while(0)
#define LED_GetValue() (VPORTB.IN & (0x1 << 1))
#define LED_SetDigitalInput() do { PORTB_DIRCLR = 0x2; } while(0)
#define LED_SetDigitalOutput() do { PORTB_DIRSET = 0x2; } while(0)
#define LED_SetPullUp() do { PORTB_PIN1CTRL |= PORT_PULLUPEN_bm; } while(0)
#define LED_ResetPullUp() do { PORTB_PIN1CTRL &= ~PORT_PULLUPEN_bm; } while(0)
#define LED_SetInverted() do { PORTB_PIN1CTRL |= PORT_INVEN_bm; } while(0)
#define LED_ResetInverted() do { PORTB_PIN1CTRL &= ~PORT_INVEN_bm; } while(0)
#define LED_DisableInterruptOnChange() do { PORTB.PIN1CTRL = (PORTB.PIN1CTRL & ~PORT_ISC_gm) | 0x0 ; } while(0)
#define LED_EnableInterruptForBothEdges() do { PORTB.PIN1CTRL = (PORTB.PIN1CTRL & ~PORT_ISC_gm) | 0x1 ; } while(0)
#define LED_EnableInterruptForRisingEdge() do { PORTB.PIN1CTRL = (PORTB.PIN1CTRL & ~PORT_ISC_gm) | 0x2 ; } while(0)
#define LED_EnableInterruptForFallingEdge() do { PORTB.PIN1CTRL = (PORTB.PIN1CTRL & ~PORT_ISC_gm) | 0x3 ; } while(0)
#define LED_DisableDigitalInputBuffer() do { PORTB.PIN1CTRL = (PORTB.PIN1CTRL & ~PORT_ISC_gm) | 0x4 ; } while(0)
#define LED_EnableInterruptForLowLevelSensing() do { PORTB.PIN1CTRL = (PORTB.PIN1CTRL & ~PORT_ISC_gm) | 0x5 ; } while(0)
void PIN_MANAGER_Initialize();
void PORTB_PB3_DefaultInterruptHandler(void);
void PORTB_PB3_SetInterruptHandler(void (* interruptHandler)(void)) ;
void PORTA_PA2_DefaultInterruptHandler(void);
void PORTA_PA2_SetInterruptHandler(void (* interruptHandler)(void)) ;
void PORTB_PB2_DefaultInterruptHandler(void);
void PORTB_PB2_SetInterruptHandler(void (* interruptHandler)(void)) ;
void PORTA_PA1_DefaultInterruptHandler(void);
void PORTA_PA1_SetInterruptHandler(void (* interruptHandler)(void)) ;
void PORTA_SOLENOID_FET_DefaultInterruptHandler(void);
void PORTA_SOLENOID_FET_SetInterruptHandler(void (* interruptHandler)(void)) ;
void PORTB_LED_DefaultInterruptHandler(void);
void PORTB_LED_SetInterruptHandler(void (* interruptHandler)(void)) ;
#endif /* PINS_H_INCLUDED */
@@ -0,0 +1,499 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef PORT_INCLUDED
#define PORT_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#include "../utils/compiler.h"
enum port_pull_mode {
PORT_PULL_OFF,
PORT_PULL_UP,
};
enum port_dir {
PORT_DIR_IN,
PORT_DIR_OUT,
PORT_DIR_OFF,
};
/**
* \brief Set port pin pull mode
*
* Configure pin to pull up, down or disable pull mode, supported pull modes are defined by device used
*
* \param[in] pin The pin number within port
* \param[in] pull_mode Pin pull mode
*/
static inline void PORTA_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
{
volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTA + 0x10 + pin);
if (pull_mode == PORT_PULL_UP) {
*port_pin_ctrl |= PORT_PULLUPEN_bm;
} else if (pull_mode == PORT_PULL_OFF) {
*port_pin_ctrl &= ~PORT_PULLUPEN_bm;
}
}
/**
* \brief Set port pin inverted mode
*
* Configure pin invert I/O or not
*
* \param[in] pin The pin number within port
* \param[in] inverted Pin inverted mode
*/
static inline void PORTA_pin_set_inverted(const uint8_t pin, const bool inverted)
{
volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTA + 0x10 + pin);
if (inverted) {
*port_pin_ctrl |= PORT_INVEN_bm;
} else {
*port_pin_ctrl &= ~PORT_INVEN_bm;
}
}
/**
* \brief Set port pin input/sense configuration
*
* Enable/disable digital input buffer and pin change interrupt,
* select pin interrupt edge/level sensing mode
*
* \param[in] pin pin number within port
* \param[in] isc PORT_ISC_INTDISABLE_gc = Interrupt disabled but input buffer enabled
* PORT_ISC_BOTHEDGES_gc = Sense Both Edges
* PORT_ISC_RISING_gc = Sense Rising Edge
* PORT_ISC_FALLING_gc = Sense Falling Edge
* PORT_ISC_INPUT_DISABLE_gc = Digital Input Buffer disabled
* PORT_ISC_LEVEL_gc = Sense low Level
*
*/
static inline void PORTA_pin_set_isc(const uint8_t pin, const PORT_ISC_t isc)
{
volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTA + 0x10 + pin);
*port_pin_ctrl = (*port_pin_ctrl & ~PORT_ISC_gm) | isc;
}
/**
* \brief Set port data direction
*
* Select if the pin data direction is input, output or disabled.
* If disabled state is not possible, this function throws an assert.
*
* \param[in] mask Bit mask where 1 means apply direction setting to the
* corresponding pin
* \param[in] dir PORT_DIR_IN = Data direction in
* PORT_DIR_OUT = Data direction out
* PORT_DIR_OFF = Disables the pin
* (low power state)
*/
static inline void PORTA_set_port_dir(const uint8_t mask, const enum port_dir dir)
{
switch (dir) {
case PORT_DIR_IN:
VPORTA.DIR &= ~mask;
break;
case PORT_DIR_OUT:
VPORTA.DIR |= mask;
break;
case PORT_DIR_OFF:
/*/ should activate the pullup for power saving
but a bit costly to do it here */
{
for (uint8_t i = 0; i < 8; i++) {
if (mask & 1 << i) {
*((uint8_t *)&PORTA + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
}
}
}
break;
default:
break;
}
}
/**
* \brief Set port pin data direction
*
* Select if the pin data direction is input, output or disabled.
* If disabled state is not possible, this function throws an assert.
*
* \param[in] pin The pin number within port
* \param[in] dir PORT_DIR_IN = Data direction in
* PORT_DIR_OUT = Data direction out
* PORT_DIR_OFF = Disables the pin
* (low power state)
*/
static inline void PORTA_set_pin_dir(const uint8_t pin, const enum port_dir dir)
{
switch (dir) {
case PORT_DIR_IN:
VPORTA.DIR &= ~(1 << pin);
break;
case PORT_DIR_OUT:
VPORTA.DIR |= (1 << pin);
break;
case PORT_DIR_OFF:
*((uint8_t *)&PORTA + 0x10 + pin) |= 1 << PORT_PULLUPEN_bp;
break;
default:
break;
}
}
/**
* \brief Set port level
*
* Sets output level on the pins defined by the bit mask
*
* \param[in] mask Bit mask where 1 means apply port level to the corresponding
* pin
* \param[in] level true = Pin levels set to "high" state
* false = Pin levels set to "low" state
*/
static inline void PORTA_set_port_level(const uint8_t mask, const bool level)
{
if (level == true) {
VPORTA.OUT |= mask;
} else {
VPORTA.OUT &= ~mask;
}
}
/**
* \brief Set port level
*
* Sets output level on a pin
*
* \param[in] pin The pin number within port
* \param[in] level true = Pin level set to "high" state
* false = Pin level set to "low" state
*/
static inline void PORTA_set_pin_level(const uint8_t pin, const bool level)
{
if (level == true) {
VPORTA.OUT |= (1 << pin);
} else {
VPORTA.OUT &= ~(1 << pin);
}
}
/**
* \brief Toggle out level on pins
*
* Toggle the pin levels on pins defined by bit mask
*
* \param[in] mask Bit mask where 1 means toggle pin level to the corresponding
* pin
*/
static inline void PORTA_toggle_port_level(const uint8_t mask)
{
PORTA.OUTTGL = mask;
}
/**
* \brief Toggle output level on pin
*
* Toggle the pin levels on pins defined by bit mask
*
* \param[in] pin The pin number within port
*/
static inline void PORTA_toggle_pin_level(const uint8_t pin)
{
PORTA.OUTTGL = 1 << pin;
}
/**
* \brief Get input level on pins
*
* Read the input level on pins connected to a port
*
*/
static inline uint8_t PORTA_get_port_level()
{
return VPORTA.IN;
}
/**
* \brief Get level on pin
*
* Reads the level on pins connected to a port
*/
static inline bool PORTA_get_pin_level(const uint8_t pin)
{
return VPORTA.IN & (1 << pin);
}
/**
* \brief Write value to Port
*
* Write directly to the port OUT register
*
* \param[in] value Value to write to the port register
*/
static inline void PORTA_write_port(const uint8_t value)
{
VPORTA.OUT = value;
}
/**
* \brief Set port pin pull mode
*
* Configure pin to pull up, down or disable pull mode, supported pull modes are defined by device used
*
* \param[in] pin The pin number within port
* \param[in] pull_mode Pin pull mode
*/
static inline void PORTB_set_pin_pull_mode(const uint8_t pin, const enum port_pull_mode pull_mode)
{
volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTB + 0x10 + pin);
if (pull_mode == PORT_PULL_UP) {
*port_pin_ctrl |= PORT_PULLUPEN_bm;
} else if (pull_mode == PORT_PULL_OFF) {
*port_pin_ctrl &= ~PORT_PULLUPEN_bm;
}
}
/**
* \brief Set port pin inverted mode
*
* Configure pin invert I/O or not
*
* \param[in] pin The pin number within port
* \param[in] inverted Pin inverted mode
*/
static inline void PORTB_pin_set_inverted(const uint8_t pin, const bool inverted)
{
volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTB + 0x10 + pin);
if (inverted) {
*port_pin_ctrl |= PORT_INVEN_bm;
} else {
*port_pin_ctrl &= ~PORT_INVEN_bm;
}
}
/**
* \brief Set port pin input/sense configuration
*
* Enable/disable digital input buffer and pin change interrupt,
* select pin interrupt edge/level sensing mode
*
* \param[in] pin pin number within port
* \param[in] isc PORT_ISC_INTDISABLE_gc = Interrupt disabled but input buffer enabled
* PORT_ISC_BOTHEDGES_gc = Sense Both Edges
* PORT_ISC_RISING_gc = Sense Rising Edge
* PORT_ISC_FALLING_gc = Sense Falling Edge
* PORT_ISC_INPUT_DISABLE_gc = Digital Input Buffer disabled
* PORT_ISC_LEVEL_gc = Sense low Level
*
*/
static inline void PORTB_pin_set_isc(const uint8_t pin, const PORT_ISC_t isc)
{
volatile uint8_t *port_pin_ctrl = ((uint8_t *)&PORTB + 0x10 + pin);
*port_pin_ctrl = (*port_pin_ctrl & ~PORT_ISC_gm) | isc;
}
/**
* \brief Set port data direction
*
* Select if the pin data direction is input, output or disabled.
* If disabled state is not possible, this function throws an assert.
*
* \param[in] mask Bit mask where 1 means apply direction setting to the
* corresponding pin
* \param[in] dir PORT_DIR_IN = Data direction in
* PORT_DIR_OUT = Data direction out
* PORT_DIR_OFF = Disables the pin
* (low power state)
*/
static inline void PORTB_set_port_dir(const uint8_t mask, const enum port_dir dir)
{
switch (dir) {
case PORT_DIR_IN:
VPORTB.DIR &= ~mask;
break;
case PORT_DIR_OUT:
VPORTB.DIR |= mask;
break;
case PORT_DIR_OFF:
/*/ should activate the pullup for power saving
but a bit costly to do it here */
{
for (uint8_t i = 0; i < 8; i++) {
if (mask & 1 << i) {
*((uint8_t *)&PORTB + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
}
}
}
break;
default:
break;
}
}
/**
* \brief Set port pin data direction
*
* Select if the pin data direction is input, output or disabled.
* If disabled state is not possible, this function throws an assert.
*
* \param[in] pin The pin number within port
* \param[in] dir PORT_DIR_IN = Data direction in
* PORT_DIR_OUT = Data direction out
* PORT_DIR_OFF = Disables the pin
* (low power state)
*/
static inline void PORTB_set_pin_dir(const uint8_t pin, const enum port_dir dir)
{
switch (dir) {
case PORT_DIR_IN:
VPORTB.DIR &= ~(1 << pin);
break;
case PORT_DIR_OUT:
VPORTB.DIR |= (1 << pin);
break;
case PORT_DIR_OFF:
*((uint8_t *)&PORTB + 0x10 + pin) |= 1 << PORT_PULLUPEN_bp;
break;
default:
break;
}
}
/**
* \brief Set port level
*
* Sets output level on the pins defined by the bit mask
*
* \param[in] mask Bit mask where 1 means apply port level to the corresponding
* pin
* \param[in] level true = Pin levels set to "high" state
* false = Pin levels set to "low" state
*/
static inline void PORTB_set_port_level(const uint8_t mask, const bool level)
{
if (level == true) {
VPORTB.OUT |= mask;
} else {
VPORTB.OUT &= ~mask;
}
}
/**
* \brief Set port level
*
* Sets output level on a pin
*
* \param[in] pin The pin number within port
* \param[in] level true = Pin level set to "high" state
* false = Pin level set to "low" state
*/
static inline void PORTB_set_pin_level(const uint8_t pin, const bool level)
{
if (level == true) {
VPORTB.OUT |= (1 << pin);
} else {
VPORTB.OUT &= ~(1 << pin);
}
}
/**
* \brief Toggle out level on pins
*
* Toggle the pin levels on pins defined by bit mask
*
* \param[in] mask Bit mask where 1 means toggle pin level to the corresponding
* pin
*/
static inline void PORTB_toggle_port_level(const uint8_t mask)
{
PORTB.OUTTGL = mask;
}
/**
* \brief Toggle output level on pin
*
* Toggle the pin levels on pins defined by bit mask
*
* \param[in] pin The pin number within port
*/
static inline void PORTB_toggle_pin_level(const uint8_t pin)
{
PORTB.OUTTGL = 1 << pin;
}
/**
* \brief Get input level on pins
*
* Read the input level on pins connected to a port
*
*/
static inline uint8_t PORTB_get_port_level()
{
return VPORTB.IN;
}
/**
* \brief Get level on pin
*
* Reads the level on pins connected to a port
*/
static inline bool PORTB_get_pin_level(const uint8_t pin)
{
return VPORTB.IN & (1 << pin);
}
/**
* \brief Write value to Port
*
* Write directly to the port OUT register
*
* \param[in] value Value to write to the port register
*/
static inline void PORTB_write_port(const uint8_t value)
{
VPORTB.OUT = value;
}
#ifdef __cplusplus
}
#endif
#endif /* PORT_INCLUDED */
@@ -0,0 +1,95 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
/**
* \defgroup doc_driver_system_protected_io Protected IO
* \ingroup doc_driver_system
*
* \section doc_driver_protected_io_rev Revision History
* - v0.0.0.1 Initial Commit
*
*@{
*/
#ifndef PROTECTED_IO_H
#define PROTECTED_IO_H
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__DOXYGEN__)
//! \name IAR Memory Model defines.
//@{
/**
* \def CONFIG_MEMORY_MODEL_TINY
* \brief Configuration symbol to enable 8 bit pointers.
*
*/
#define CONFIG_MEMORY_MODEL_TINY
/**
* \def CONFIG_MEMORY_MODEL_SMALL
* \brief Configuration symbol to enable 16 bit pointers.
* \note If no memory model is defined, SMALL is default.
*
*/
#define CONFIG_MEMORY_MODEL_SMALL
/**
* \def CONFIG_MEMORY_MODEL_LARGE
* \brief Configuration symbol to enable 24 bit pointers.
*
*/
#define CONFIG_MEMORY_MODEL_LARGE
//@}
#endif
/**
* \brief Write to am 8-bit I/O register protected by CCP or a protection bit
*
* \param addr Address of the I/O register
* \param magic CCP magic value or Mask for protection bit
* \param value Value to be written
*
* \note Using IAR Embedded workbench, the choice of memory model has an impact
* on calling convention. The memory model is not visible to the
* preprocessor, so it must be defined in the Assembler preprocessor directives.
*/
extern void protected_write_io(void *addr, uint8_t magic, uint8_t value);
/** @} */
#endif /* PROTECTED_IO_H */
@@ -0,0 +1,64 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef RSTCTRL_INCLUDED
#define RSTCTRL_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#include "ccp.h"
static inline void RSTCTRL_reset(void)
{
/* SWRR is protected with CCP */
// ccp_write_io((void *)&RSTCTRL.SWRR, 0x1);
}
static inline uint8_t RSTCTRL_get_reset_cause(void)
{
return RSTCTRL.RSTFR;
}
static inline void RSTCTRL_clear_reset_cause(void)
{
RSTCTRL.RSTFR
= RSTCTRL_UPDIRF_bm | RSTCTRL_SWRF_bm | RSTCTRL_WDRF_bm | RSTCTRL_EXTRF_bm | RSTCTRL_BORF_bm | RSTCTRL_PORF_bm;
}
#ifdef __cplusplus
}
#endif
#endif /* RSTCTRL_INCLUDED */
@@ -0,0 +1,59 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef TCB0_H_INCLUDED
#define TCB0_H_INCLUDED
#include "../utils/compiler.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*TCB0_cb_t)(void);
void TCB0_SetCaptIsrCallback(TCB0_cb_t cb);
void TCB0_SetOvfIsrCallback(TCB0_cb_t cb);
int8_t TCB0_Initialize();
void TCB0_EnableCaptInterrupt(void);
void TCB0_DisableCaptInterrupt(void);
uint16_t TCB0_ReadTimer(void);
void TCB0_WriteTimer(uint16_t timerVal);
void TCB0_ClearCaptInterruptFlag(void);
bool TCB0_IsCaptInterruptEnabled();
#ifdef __cplusplus
}
#endif
#endif /* TCB0_H_INCLUDED */
@@ -0,0 +1,186 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef TWI0_SLAVE_H
#define TWI0_SLAVE_H
#include <stdbool.h>
#include <stdint.h>
#include "../utils/compiler.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void(TWI0_callback)(void);
/**
* \brief Initialize I2C interface
* If module is configured to disabled state, the clock to the I2C is disabled
* if this is supported by the device's clock system.
*
* \return Initialization status.
* \retval 0 the init was successful
* \retval 1 the init was not successful
*/
uint8_t I2C_Initialize(void);
/**
* \brief Open the I2C for communication. Enables the module if disabled.
*
* \return Nothing
*/
void I2C_Open(void);
/**
* \brief Close the I2C for communication. Disables the module if enabled.
* Disables address recognition.
*
* \return Nothing
*/
void I2C_Close(void);
/**
* \brief The function called by the I2C IRQ handler.
* Can be called in a polling loop in a polled driver.
*
* \return Nothing
*/
void I2C_isr(void);
/**
* \brief Read one byte from the data register of I2C
*
* Function will not block if a character is not available, so should
* only be called when data is available.
*
* \return Data read from the I2C module
*/
uint8_t I2C_Read(void);
/**
* \brief Write one byte to the data register of I2C
*
* Function will not block if data cannot be safely accepted, so should
* only be called when safe, i.e. in the read callback handler.
*
* \param[in] data The character to write to the I2C
*
* \return Nothing
*/
void I2C_Write(uint8_t data);
/**
* \brief Enable address recognition in I2C
* 1. If supported by the clock system, enables the clock to the module
* 2. Enables the I2C slave functionality by setting the enable-bit in the HW's control register
*
* \return Nothing
*/
void I2C_Enable(void);
/**
* \brief Send ACK to received address or data. Should
* only be called when appropriate, i.e. in the callback handlers.
*
* \return Nothing
*/
void I2C_SendAck(void);
/**
* \brief Send NACK to received address or data. Should
* only be called when appropriate, i.e. in the callback handlers.
*
* \return Nothing
*/
void I2C_SendNack(void);
/**
* \brief Goto unaddressed state. Used to reset I2C HW that are aware
* of bus state to an unaddressed state.
*
* \return Nothing
*/
void I2C_GotoUnaddressed(void);
/**
* \brief Callback handler for event where master wishes to read a byte from slave.
*
* \return Nothing
*/
void I2C_SetReadCallback(TWI0_callback handler);
/**
* \brief Callback handler for event where master wishes to write a byte to slave.
*
* \return Nothing
*/
void I2C_SetWriteCallback(TWI0_callback handler);
/**
* \brief Callback handler for event where slave has received its address.
*
* \return Nothing
*/
void I2C_SetAddressCallback(TWI0_callback handler);
/**
* \brief Callback handler for event where slave has received a STOP condition after being addressed.
*
* \return Nothing
*/
void I2C_SetStopCallback(TWI0_callback handler);
/**
* \brief Callback handler for event where slave detects a bus collision.
*
* \return Nothing
*/
void I2C_SetCollisionCallback(TWI0_callback handler);
/**
* \brief Callback handler for event where slave detects a bus error.
*
* \return Nothing
*/
void I2C_SetBusErrorCallback(TWI0_callback handler);
void I2C_SetAddress(uint8_t address);
#ifdef __cplusplus
}
#endif
#endif /* TWI0_SLAVE_H */
@@ -0,0 +1,157 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef USART0_H_INCLUDED
#define USART0_H_INCLUDED
#include <stdbool.h>
#include <stdio.h>
#include "../utils/compiler.h"
#include "../utils/atomic.h"
#include "../config/clock_config.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Normal Mode, Baud register value */
#define USART0_BAUD_RATE(BAUD_RATE) (((float)20000000 * 64 / (16 * (float)BAUD_RATE)) + 0.5)
/**
* \brief Initialize USART interface
* If module is configured to disabled state, the clock to the USART is disabled
* if this is supported by the device's clock system.
*
* \return Initialization status.
* \retval 0 the USART init was successful
* \retval 1 the USART init was not successful
*/
void UART_Initialize();
/**
* \brief Enable RX and TX in UART
* 1. If supported by the clock system, enables the clock to the USART
* 2. Enables the USART module by setting the RX and TX enable-bits in the USART control register
*
* \return Nothing
*/
void UART_Enable();
/**
* \brief Enable RX in UART
* 1. If supported by the clock system, enables the clock to the USART
* 2. Enables the USART module by setting the RX enable-bit in the USART control register
*
* \return Nothing
*/
void UART_EnableRx();
/**
* \brief Enable TX in UART
* 1. If supported by the clock system, enables the clock to the USART
* 2. Enables the USART module by setting the TX enable-bit in the USART control register
*
* \return Nothing
*/
void UART_EnableTx();
/**
* \brief Disable UART
* 1. Disables the USART module by clearing the enable-bit(s) in the USART control register
* 2. If supported by the clock system, disables the clock to the USART
*
* \return Nothing
*/
void UART_Disable();
/**
* \brief Get recieved data from UART
*
* \return Data register from UART module
*/
uint8_t UART_GetData();
/**
* \brief Check if the usart can accept data to be transmitted
*
* \return The status of USART TX data ready check
* \retval false The USART can not receive data to be transmitted
* \retval true The USART can receive data to be transmitted
*/
bool UART_IsTxReady();
/**
* \brief Check if the USART has received data
*
* \return The status of USART RX data ready check
* \retval true The USART has received data
* \retval false The USART has not received data
*/
bool UART_IsRxReady();
/**
* \brief Check if UART data is transmitted
*
* \return Receiver ready status
* \retval true Data is not completely shifted out of the shift register
* \retval false Data completely shifted out if the USART shift register
*/
bool UART_IsTxBusy();
bool UART_IsTxDone();
/**
* \brief Read one character from UART
*
* Function will block if a character is not available.
*
* \return Data read from the UART module
*/
uint8_t UART_Read(void);
/**
* \brief Write one character to UART
*
* Function will block until a character can be accepted.
*
* \param[in] data The character to write to the USART
*
* \return Nothing
*/
void UART_Write(const uint8_t data);
#ifdef __cplusplus
}
#endif
#endif /* USART0_H_INCLUDED */
@@ -0,0 +1,127 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "mcc.h"
/**
* Initializes MCU, drivers and middleware in the project
**/
void SYSTEM_Initialize(void)
{
PIN_MANAGER_Initialize();
BOD_Initialize();
WDT_Initialize();
CLKCTRL_Initialize();
SLPCTRL_Initialize();
I2C_Initialize();
UART_Initialize();
FLASH_Initialize();
CPUINT_Initialize();
TCB0_Initialize();
TCB0_EnableCaptInterrupt();
}
/**
* \brief Initialize bod interface
*/
int8_t BOD_Initialize()
{
//SLEEP DIS;
ccp_write_io((void*)&(BOD.CTRLA),0x00);
//VLMCFG BELOW; VLMIE disabled;
BOD.INTCTRL = 0x00;
//VLMLVL 5ABOVE;
BOD.VLMCTRLA = 0x00;
return 0;
}
ISR(BOD_VLM_vect)
{
/* Insert your AC interrupt handling code here */
/* The interrupt flag has to be cleared manually */
BOD.INTFLAGS = BOD_VLMIE_bm;
}
/**
* \brief Initialize clkctrl interface
*/
int8_t CLKCTRL_Initialize()
{
//RUNSTDBY disabled;
ccp_write_io((void*)&(CLKCTRL.OSC32KCTRLA),0x00);
//CSUT 1K; SEL disabled; RUNSTDBY disabled; ENABLE disabled;
ccp_write_io((void*)&(CLKCTRL.XOSC32KCTRLA),0x00);
//RUNSTDBY disabled;
ccp_write_io((void*)&(CLKCTRL.OSC20MCTRLA),0x00);
//PDIV 6X; PEN disabled;
ccp_write_io((void*)&(CLKCTRL.MCLKCTRLB),0x10);
//CLKOUT disabled; CLKSEL OSC20M;
ccp_write_io((void*)&(CLKCTRL.MCLKCTRLA),0x00);
//LOCKEN disabled;
ccp_write_io((void*)&(CLKCTRL.MCLKLOCK),0x00);
return 0;
}
/**
* \brief Initialize slpctrl interface
*/
int8_t SLPCTRL_Initialize()
{
//SMODE IDLE; SEN disabled;
ccp_write_io((void*)&(SLPCTRL.CTRLA),0x00);
return 0;
}
/**
* \brief Initialize wdt interface
*/
int8_t WDT_Initialize()
{
//WINDOW OFF; PERIOD 2KCLK;
ccp_write_io((void*)&(WDT.CTRLA),0x09);
return 0;
}
@@ -0,0 +1,62 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef MCC_H
#define MCC_H
#ifdef __cplusplus
extern "C" {
#endif
#include "utils/compiler.h"
#include "include/pin_manager.h"
#include "include/twi0_slave.h"
#include "include/tcb0.h"
#include "include/cpuint.h"
#include "include/usart0.h"
#include "include/nvmctrl.h"
#include "config/clock_config.h"
/**
* Initializes MCU, drivers and middleware in the project
**/
void SYSTEM_Initialize(void);
int8_t BOD_Initialize();
int8_t CLKCTRL_Initialize();
int8_t SLPCTRL_Initialize();
int8_t WDT_Initialize();
#ifdef __cplusplus
}
#endif
#endif /* MCC_H */
@@ -0,0 +1,55 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../include/cpuint.h"
/**
* \brief Initialize cpuint interface
*/
int8_t CPUINT_Initialize()
{
/* IVSEL and CVT are Configuration Change Protected */
//IVSEL disabled; CVT disabled; LVL0RR disabled;
ccp_write_io((void*)&(CPUINT.CTRLA),0x00);
//LVL0PRI 0;
CPUINT.LVL0PRI = 0x00;
//LVL1VEC 0;
CPUINT.LVL1VEC = 0x00;
ENABLE_INTERRUPTS();
return 0;
}
@@ -0,0 +1,367 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../include/nvmctrl.h"
/**
* \brief Initialize nvmctrl interface
* \return Return value 0 if success
*/
int8_t FLASH_Initialize()
{
//BOOTLOCK disabled; APCWP disabled;
NVMCTRL.CTRLB = 0x00;
//EEREADY disabled;
NVMCTRL.INTCTRL = 0x00;
return 0;
}
ISR(NVMCTRL_EE_vect)
{
/* The interrupt flag has to be cleared manually */
NVMCTRL.INTFLAGS = NVMCTRL_EEREADY_bm;
}
/**
* \brief Read a byte from eeprom
*
* \param[in] eeprom_adr The byte-address in eeprom to read from
*
* \return The read byte
*/
uint8_t FLASH_ReadEepromByte(eeprom_adr_t eeprom_adr)
{
// Read operation will be stalled by hardware if any write is in progress
return *(uint8_t *)(EEPROM_START + eeprom_adr);
}
/**
* \brief Write a byte to eeprom
*
* \param[in] eeprom_adr The byte-address in eeprom to write to
* \param[in] data The byte to write
*
* \return Status of write operation
*/
nvmctrl_status_t FLASH_WriteEepromByte(eeprom_adr_t eeprom_adr, uint8_t data)
{
/* Wait for completion of previous write */
while (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm)
;
/* Clear page buffer */
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEBUFCLR_gc);
/* Write byte to page buffer */
*(uint8_t *)(EEPROM_START + eeprom_adr) = data;
/* Erase byte and program it with desired value */
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASEWRITE_gc);
return NVM_OK;
}
/**
* \brief Read a block from eeprom
*
* \param[in] eeprom_adr The byte-address in eeprom to read from
* \param[in] data Buffer to place read data into
*
* \return Nothing
*/
void FLASH_ReadEepromBlock(eeprom_adr_t eeprom_adr, uint8_t *data, size_t size)
{
// Read operation will be stalled by hardware if any write is in progress
memcpy(data, (uint8_t *)(EEPROM_START + eeprom_adr), size);
}
/**
* \brief Write a block to eeprom
*
* \param[in] eeprom_adr The byte-address in eeprom to write to
* \param[in] data The buffer to write
*
* \return Status of write operation
*/
nvmctrl_status_t FLASH_WriteEepromBlock(eeprom_adr_t eeprom_adr, uint8_t *data, size_t size)
{
uint8_t *write = (uint8_t *)(EEPROM_START + eeprom_adr);
/* Wait for completion of previous write */
while (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm)
;
/* Clear page buffer */
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEBUFCLR_gc);
do {
/* Write byte to page buffer */
*write++ = *data++;
size--;
// If we have filled an entire page or written last byte to a partially filled page
if ((((uintptr_t)write % EEPROM_PAGE_SIZE) == 0) || (size == 0)) {
/* Erase written part of page and program with desired value(s) */
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASEWRITE_gc);
}
} while (size != 0);
return NVM_OK;
}
/**
* \brief Check if the EEPROM can accept data to be read or written
*
* \return The status of EEPROM busy check
* \retval false The EEPROM can not receive data to be read or written
* \retval true The EEPROM can receive data to be read or written
*/
bool FLASH_IsEepromReady()
{
return (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm);
}
/**
* \brief Read a byte from flash
*
* \param[in] flash_adr The byte-address in flash to read from
*
* \return The read byte
*/
uint8_t FLASH_ReadFlashByte(flash_adr_t flash_adr)
{
return *(uint8_t *)(MAPPED_PROGMEM_START + flash_adr);
}
/**
* \brief Write a byte to flash
*
* \param[in] flash_adr The byte-address in flash to write to
* \param[in] page_buffer A buffer in memory the size of a flash page, used as a scratchpad
* \param[in] data The byte to write
*
* \return Status of the operation
*/
nvmctrl_status_t FLASH_WriteFlashByte(flash_adr_t flash_adr, uint8_t *ram_buffer, uint8_t data)
{
// Create a pointer to the start of the flash page containing the byte to write
volatile uint8_t *start_of_page = (uint8_t *)((MAPPED_PROGMEM_START + flash_adr) & ~(PROGMEM_PAGE_SIZE - 1));
uint8_t i;
/* Backup all the FLASH page data to page buffer and update the new data.
The page buffer is loaded by writing directly to the memories as defined in the memory map.
A write to start_of_page fills the page buffer and a read from start_of_page reads the flash location*/
for (i = 0; i < flash_adr % PROGMEM_PAGE_SIZE; i++) {
start_of_page[i] = start_of_page[i]; //filling the page buffer from flash
}
start_of_page[i++] = data;// updating the new data
for (; i < PROGMEM_PAGE_SIZE; i++) {
start_of_page[i] = start_of_page[i];//filling the page buffer from flash
}
// Erase and write the flash page
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASEWRITE_gc);
if (NVMCTRL.STATUS & NVMCTRL_WRERROR_bm)
return NVM_ERROR;
else
return NVM_OK;
}
/**
* \brief Erase a page in flash
*
* \param[in] flash_adr The byte-address in flash to erase. Must point to start-of-page.
*
* \return Status of the operation
*/
nvmctrl_status_t FLASH_EraseFlashPage(flash_adr_t flash_adr)
{
// Create a pointer in unified memory map to the page to erase
uint8_t *data_space = (uint8_t *)(MAPPED_PROGMEM_START + flash_adr);
// Perform a dummy write to this address to update the address register in NVMCTL
*data_space = 0;
// Erase the flash page
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASE_gc);
if (NVMCTRL.STATUS & NVMCTRL_WRERROR_bm)
return NVM_ERROR;
else
return NVM_OK;
}
/**
* \brief Write a page in flash. No page erase is performed by this function.
*
* \param[in] flash_adr: starting address of NVM page which needs to be written
* \param[in] data: pointer to an array of size 'PROGMEM_PAGE_SIZE'
*
* \return Status of the operation
*/
nvmctrl_status_t FLASH_WriteFlashPage(flash_adr_t flash_adr, uint8_t *data)
{
// Calculate the starting address of the page which contains the requested flash address
uint16_t pageStartAddr = (uint16_t) (flash_adr & ((PROGMEM_SIZE - 1) ^ (PROGMEM_PAGE_SIZE - 1)));
// Create a pointer in unified memory map to the page to write
uint8_t *data_space = (uint8_t *)(MAPPED_PROGMEM_START + flash_adr);
// Return error if requested address is not the starting address of a page
if (pageStartAddr != flash_adr)
return NVM_ERROR;
// Write data to the page buffer
memcpy(data_space, data, PROGMEM_PAGE_SIZE);
// Write the flash page
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEWRITE_gc);
if (NVMCTRL.STATUS & NVMCTRL_WRERROR_bm)
return NVM_ERROR;
else
return NVM_OK;
}
/**
* \brief Writes a buffer to flash.
* The flash does not need to be erased beforehand.
* The flash address to write to does not need to be aligned to any specific boundary.
*
* \param[in] flash_adr The byte-address of the flash to write to
* \param[in] data The data to write to the flash
* \param[in] size The size of the data (in bytes) to write to the flash
* \param[in] page_buffer A buffer in memory the size of a flash page, used as a scratchpad
*
* \return Status of the operation
*/
nvmctrl_status_t FLASH_WriteFlashBlock(flash_adr_t flash_adr, uint8_t *data, size_t size, uint8_t *ram_buffer)
{
// Create a pointer in unified memory map to the start of first page to modify
volatile uint8_t *data_space = (uint8_t *)((MAPPED_PROGMEM_START + flash_adr) & ~(PROGMEM_PAGE_SIZE - 1));
uint8_t start_offset = flash_adr % PROGMEM_PAGE_SIZE;
uint8_t i;
// Step 1:
// Fill page buffer with contents of first flash page to be written up
// to the first flash address to be replaced by the new contents
for (i = 0; i < start_offset; i++) {
*data_space = *data_space;
data_space++;
}
// Step 2:
// Write all of the new flash contents to the page buffer, writing the
// page buffer to flash every time the buffer contains a complete flash
// page.
while (size > 0) {
*data_space++ = *data++;
size--;
if (((uintptr_t)data_space % PROGMEM_PAGE_SIZE) == 0) {
// Erase and write the flash page
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASEWRITE_gc);
if (NVMCTRL.STATUS & NVMCTRL_WRERROR_bm)
return NVM_ERROR;
}
}
// Step 3:
// After step 2, the page buffer may be partially full with the last
// part of the new data to write to flash. The remainder of the flash page
// shall be unaltered. Fill up the remainder
// of the page buffer with the original contents of the flash page, and do a
// final flash page write.
while (1) {
*data_space = *data_space;
data_space++;
if (((uintptr_t)data_space % PROGMEM_PAGE_SIZE) == 0) {
// Erase and write the last flash page
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASEWRITE_gc);
if (NVMCTRL.STATUS & NVMCTRL_WRERROR_bm)
return NVM_ERROR;
else
return NVM_OK;
}
}
}
/**
* \brief Writes a byte stream to flash.
* The erase granularity of the flash (i.e. one page) will cause this operation
* to erase an entire page at a time. To avoid corrupting other flash contents,
* make sure that the memory range in flash being streamed to is starting on a page
* boundary, and that enough flash pages are available to hold all data being written.
*
* The function will perform flash page operations such as erase and write
* as appropriate, typically when the last byte in a page is written. If
* the last byte written is not at the last address of a page, the "finalize"
* parameter can be set to force a page write after this byte.
*
* This function is intended used in devices where RAM resources are too limited
* to afford a buffer needed by the write and erase page functions, and where
* performance needs and code size concerns leaves the byte write and block
* write functions too expensive.
*
* \param[in] flash_adr The byte-address of the flash to write to
* \param[in] data The data byte to write to the flash
* \param[in] finalize Set to true for the final write to the buffer
*
* \return Status of the operation
*/
nvmctrl_status_t FLASH_WriteFlashStream(flash_adr_t flash_adr, uint8_t data, bool finalize)
{
bool final_adr_in_page = ((flash_adr & (PROGMEM_PAGE_SIZE - 1)) == (PROGMEM_PAGE_SIZE - 1));
// Write the new byte value to the correct address in the page buffer
*(uint8_t *)(MAPPED_PROGMEM_START + flash_adr) = data;
if (final_adr_in_page || finalize)
// Erase and write the flash page
ccp_write_spm((void *)&NVMCTRL.CTRLA, NVMCTRL_CMD_PAGEERASEWRITE_gc);
if (NVMCTRL.STATUS & NVMCTRL_WRERROR_bm)
return NVM_ERROR;
else
return NVM_OK;
}
@@ -0,0 +1,183 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../include/pin_manager.h"
static void (*PORTB_PB3_InterruptHandler)(void);
static void (*PORTA_PA2_InterruptHandler)(void);
static void (*PORTB_PB2_InterruptHandler)(void);
static void (*PORTA_PA1_InterruptHandler)(void);
static void (*PORTA_SOLENOID_FET_InterruptHandler)(void);
static void (*PORTB_LED_InterruptHandler)(void);
void PORT_Initialize(void);
void PIN_MANAGER_Initialize()
{
PORT_Initialize();
/* DIR Registers Initialization */
PORTA.DIR = 0x08;
PORTB.DIR = 0x06;
/* OUT Registers Initialization */
PORTA.OUT = 0x00;
PORTB.OUT = 0x00;
/* PINxCTRL registers Initialization */
PORTA.PIN0CTRL = 0x00;
PORTA.PIN1CTRL = 0x00;
PORTA.PIN2CTRL = 0x00;
PORTA.PIN3CTRL = 0x00;
PORTA.PIN4CTRL = 0x00;
PORTA.PIN5CTRL = 0x00;
PORTA.PIN6CTRL = 0x04;
PORTA.PIN7CTRL = 0x00;
PORTB.PIN0CTRL = 0x00;
PORTB.PIN1CTRL = 0x00;
PORTB.PIN2CTRL = 0x00;
PORTB.PIN3CTRL = 0x00;
PORTB.PIN4CTRL = 0x00;
PORTB.PIN5CTRL = 0x00;
PORTB.PIN6CTRL = 0x00;
PORTB.PIN7CTRL = 0x00;
/* PORTMUX Initialization */
PORTMUX.CTRLA = 0x00;
PORTMUX.CTRLB = 0x10;
PORTMUX.CTRLC = 0x00;
PORTMUX.CTRLD = 0x00;
// register default ISC callback functions at runtime; use these methods to register a custom function
PORTB_PB3_SetInterruptHandler(PORTB_PB3_DefaultInterruptHandler);
PORTA_PA2_SetInterruptHandler(PORTA_PA2_DefaultInterruptHandler);
PORTB_PB2_SetInterruptHandler(PORTB_PB2_DefaultInterruptHandler);
PORTA_PA1_SetInterruptHandler(PORTA_PA1_DefaultInterruptHandler);
PORTA_SOLENOID_FET_SetInterruptHandler(PORTA_SOLENOID_FET_DefaultInterruptHandler);
PORTB_LED_SetInterruptHandler(PORTB_LED_DefaultInterruptHandler);
}
void PORT_Initialize(void)
{
/* On AVR devices all peripherals are enable from power on reset, this
* disables all peripherals to save power. Driver shall enable
* peripheral if used */
/* Set all pins to low power mode */
for (uint8_t i = 0; i < 8; i++) {
*((uint8_t *)&PORTA + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
}
for (uint8_t i = 0; i < 8; i++) {
*((uint8_t *)&PORTB + 0x10 + i) |= 1 << PORT_PULLUPEN_bp;
}
}
/**
Allows selecting an interrupt handler for PORTB_PB3 at application runtime
*/
void PORTB_PB3_SetInterruptHandler(void (* interruptHandler)(void))
{
PORTB_PB3_InterruptHandler = interruptHandler;
}
void PORTB_PB3_DefaultInterruptHandler(void)
{
// add your PORTB_PB3 interrupt custom code
// or set custom function using PORTB_PB3_SetInterruptHandler()
}
/**
Allows selecting an interrupt handler for PORTA_PA2 at application runtime
*/
void PORTA_PA2_SetInterruptHandler(void (* interruptHandler)(void))
{
PORTA_PA2_InterruptHandler = interruptHandler;
}
void PORTA_PA2_DefaultInterruptHandler(void)
{
// add your PORTA_PA2 interrupt custom code
// or set custom function using PORTA_PA2_SetInterruptHandler()
}
/**
Allows selecting an interrupt handler for PORTB_PB2 at application runtime
*/
void PORTB_PB2_SetInterruptHandler(void (* interruptHandler)(void))
{
PORTB_PB2_InterruptHandler = interruptHandler;
}
void PORTB_PB2_DefaultInterruptHandler(void)
{
// add your PORTB_PB2 interrupt custom code
// or set custom function using PORTB_PB2_SetInterruptHandler()
}
/**
Allows selecting an interrupt handler for PORTA_PA1 at application runtime
*/
void PORTA_PA1_SetInterruptHandler(void (* interruptHandler)(void))
{
PORTA_PA1_InterruptHandler = interruptHandler;
}
void PORTA_PA1_DefaultInterruptHandler(void)
{
// add your PORTA_PA1 interrupt custom code
// or set custom function using PORTA_PA1_SetInterruptHandler()
}
/**
Allows selecting an interrupt handler for PORTA_SOLENOID_FET at application runtime
*/
void PORTA_SOLENOID_FET_SetInterruptHandler(void (* interruptHandler)(void))
{
PORTA_SOLENOID_FET_InterruptHandler = interruptHandler;
}
void PORTA_SOLENOID_FET_DefaultInterruptHandler(void)
{
// add your PORTA_SOLENOID_FET interrupt custom code
// or set custom function using PORTA_SOLENOID_FET_SetInterruptHandler()
}
/**
Allows selecting an interrupt handler for PORTB_LED at application runtime
*/
void PORTB_LED_SetInterruptHandler(void (* interruptHandler)(void))
{
PORTB_LED_InterruptHandler = interruptHandler;
}
void PORTB_LED_DefaultInterruptHandler(void)
{
// add your PORTB_LED interrupt custom code
// or set custom function using PORTB_LED_SetInterruptHandler()
}
@@ -0,0 +1,90 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../utils/assembler.h"
/*
* GNU and IAR use different calling conventions. Since this is
* a very small and simple function to begin with, it's easier
* to implement it twice than to deal with the differences
* within a single implementation.
*/
PUBLIC_FUNCTION(protected_write_io)
#if defined(__GNUC__)
#ifdef RAMPZ
out _SFR_IO_ADDR(RAMPZ), r1 // Clear bits 23:16 of Z
#endif
movw r30, r24 // Load addr into Z
out CCP, r22 // Start CCP handshake
st Z, r20 // Write value to I/O register
ret // Return to caller
#elif defined(__IAR_SYSTEMS_ASM__)
# if !defined(CONFIG_MEMORY_MODEL_TINY) && !defined(CONFIG_MEMORY_MODEL_SMALL) \
&& !defined(CONFIG_MEMORY_MODEL_LARGE)
# define CONFIG_MEMORY_MODEL_SMALL
# endif
# if defined(CONFIG_MEMORY_MODEL_LARGE)
ldi r20, 0
out RAMPZ, r20 // Reset bits 23:16 of Z
movw r30, r16 // Load addr into Z
# elif defined(CONFIG_MEMORY_MODEL_TINY)
ldi r31, 0 // Reset bits 8:15 of Z
mov r30, r16 // Load addr into Z
# else
movw r30, r16 // Load addr into Z
# endif
# if defined(CONFIG_MEMORY_MODEL_TINY)
out CCP, r17 // Start CCP handshake
st Z, r18 // Write value to I/O register
# elif defined(CONFIG_MEMORY_MODEL_SMALL)
out CCP, r18 // Start CCP handshake
st Z, r19 // Write value to I/O register
# elif defined(CONFIG_MEMORY_MODEL_LARGE)
out CCP, r19 // Start CCP handshake
st Z, r20 // Write value to I/O register
# else
# error Unknown memory model in use, no idea how registers should be accessed
# endif
ret
#else
# error Unknown assembler
#endif
END_FUNC(protected_write_io)
END_FILE()
@@ -0,0 +1,145 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../include/tcb0.h"
extern void SysTick(void);
/**
* \brief Initialize tcb interface
*
* \return Initialization status.
*/
void (*TCB0_CAPT_isr_cb)(void) = NULL;
void TCB0_SetCaptIsrCallback(TCB0_cb_t cb)
{
TCB0_CAPT_isr_cb = cb;
}
ISR(TCB0_INT_vect)
{
/* Insert your TCB interrupt handling code */
/**
* The interrupt flag is cleared by writing 1 to it, or when the Capture register
* is read in Capture mode
*/
if(TCB0.INTFLAGS & TCB_CAPT_bm)
{
if (TCB0_CAPT_isr_cb != NULL)
{
(*TCB0_CAPT_isr_cb)();
}
TCB0.INTFLAGS = TCB_CAPT_bm;
}
}
/**
* \brief Initialize TCB interface
*/
int8_t TCB0_Initialize()
{
//Compare or Capture
TCB0.CCMP = 0x4E1F;
//Count
TCB0.CNT = 0x00;
//ASYNC disabled; CCMPINIT disabled; CCMPEN disabled; CNTMODE INT;
TCB0.CTRLB = 0x00;
//DBGRUN disabled;
TCB0.DBGCTRL = 0x00;
//FILTER disabled; EDGE disabled; CAPTEI disabled;
TCB0.EVCTRL = 0x00;
//CAPT disabled;
TCB0.INTCTRL = 0x00;
//CAPT disabled;
TCB0.INTFLAGS = 0x00;
//Temporary Value
TCB0.TEMP = 0x00;
//RUNSTDBY disabled; SYNCUPD disabled; CLKSEL CLKDIV1; ENABLE enabled;
TCB0.CTRLA = 0x01;
TCB0_CAPT_isr_cb = SysTick;
return 0;
}
void TCB0_WriteTimer(uint16_t timerVal)
{
TCB0.CNT=timerVal;
}
uint16_t TCB0_ReadTimer(void)
{
uint16_t readVal;
readVal = TCB0.CNT;
return readVal;
}
void TCB0_EnableCaptInterrupt(void)
{
TCB0.INTCTRL |= TCB_CAPT_bm; /* Capture or Timeout: enabled */
}
void TCB0_DisableCaptInterrupt(void)
{
TCB0.INTCTRL &= ~TCB_CAPT_bm; /* Capture or Timeout: disabled */
}
inline void TCB0_ClearCaptInterruptFlag(void)
{
TCB0.INTFLAGS &= ~TCB_CAPT_bm;
}
inline bool TCB0_IsCaptInterruptEnabled(void)
{
return ((TCB0.INTCTRL & TCB_CAPT_bm) > 0);
}
@@ -0,0 +1,465 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../include/twi0_slave.h"
#include "../../mcc_generated_files/utils/atomic.h"
#include "../../debug.h"
#include "../../SolenoidDriver.h"
#include <stdbool.h>
/* I2C Internal API's */
/* Slave */
bool I2C_SlaveIsAddressInterrupt(void);
bool I2C_SlaveIsDataInterrupt(void);
bool I2C_SlaveIsStopInterrupt(void);
void I2C_SlaveOpen(void);
void I2C_SlaveClose(void);
bool I2C_SlaveDIR(void);
char I2C_SlaveReset(void);
uint8_t I2C_SlaveRead(void);
char I2C_SlaveWrite(uint8_t data);
bool I2C_SlaveIsNack(void);
void I2C_SlaveSendAck(void);
void I2C_SlaveSendNack(void);
bool I2C_SlaveIsBusCollision(void);
bool I2C_SlaveIsBusError(void);
bool I2C_SlaveIsTxComplete(void);
// Read Event Interrupt Handlers
void I2C_ReadCallback(void);
void (*I2C_ReadInterruptHandler)(void);
// Write Event Interrupt Handlers
void I2C_WriteCallback(void);
void (*I2C_WriteInterruptHandler)(void);
// Address Event Interrupt Handlers
void I2C_AddressCallback(void);
void (*I2C_AddressInterruptHandler)(void);
// Stop Event Interrupt Handlers
void I2C_StopCallback(void);
void (*I2C_StopInterruptHandler)(void);
// Bus Collision Event Interrupt Handlers
void I2C_CollisionCallback(void);
void (*I2C_CollisionInterruptHandler)(void);
// Bus Error Event Interrupt Handlers
void I2C_BusErrorCallback(void);
void (*I2C_BusErrorInterruptHandler)(void);
// I2C buffers and positional variables
bool processPending = false;
uint8_t TWI_TxBuff[TWI_BUFFER_SIZE] = {0}; // Device TX to host
uint8_t TWI_TxPos = 0;
uint8_t TWI_TxLen = 0;
uint8_t TWI_RxBuff[TWI_BUFFER_SIZE] = {0}; // Device RX from host
uint8_t TWI_RxPos = 0;
// Function prototypes
static void I2C_AddressFn(void);
static void I2C_WriteFn(void);
static void I2C_ReadFn(void);
static void I2C_StopFn(void);
static void I2C_CollisionFn(void);
static void TWI_ISR_Handler(void);
uint8_t I2C_Initialize()
{
//SDASETUP 4CYC; SDAHOLD OFF; FMPEN disabled;
TWI0.CTRLA = 0x00;
//Debug Run
TWI0.DBGCTRL = 0x00;
//Slave Address
TWI0.SADDR = DEVICE_I2C_ADDRESS;
//ADDRMASK 0; ADDREN disabled;
TWI0.SADDRMASK = 0x00;
// DIEN enabled; APIEN enabled; PIEN disabled; PMEN disabled; SMEN disabled; ENABLE enabled;
TWI0.SCTRLA = 0xE1;
//ACKACT ACK; SCMD NOACT;
TWI0.SCTRLB = 0x00;
//Slave Data
TWI0.SDATA = 0x00;
//DIF disabled; APIF disabled; COLL disabled; BUSERR disabled;
TWI0.SSTATUS = 0x00;
// I2C_SetWriteCallback(NULL);
// I2C_SetReadCallback(NULL);
// I2C_SetAddressCallback(NULL);
// I2C_SetStopCallback(NULL);
// I2C_SetCollisionCallback(NULL);
// I2C_SetBusErrorCallback(NULL);
I2C_SetWriteCallback(I2C_WriteFn);
I2C_SetReadCallback(I2C_ReadFn);
I2C_SetAddressCallback(I2C_AddressFn);
I2C_SetStopCallback(I2C_StopFn);
I2C_SetCollisionCallback(I2C_CollisionFn);
I2C_SetBusErrorCallback(I2C_CollisionFn);
//TWI0.SCTRLA = 0xC1;
return 0;
}
static void I2C_AddressFn(void)
{
}
static void I2C_WriteFn(void)
{
// Reset TX/RX buffer positions
TWI_RxBuff[TWI_RxPos] = I2C_SlaveRead();
TWI_RxPos++;
if(TWI_RxPos >= TWI_BUFFER_SIZE)
{
TWI_RxPos = TWI_BUFFER_SIZE-1;
}
}
static void I2C_ReadFn(void)
{
I2C_SlaveWrite(TWI_TxBuff[TWI_TxPos]);
TWI_TxPos++;
if( TWI_TxPos >= TWI_TxLen)
{
TWI_TxPos = TWI_BUFFER_SIZE-1;
}
else if(TWI_TxPos >= TWI_BUFFER_SIZE)
{
TWI_TxPos = TWI_TxLen-1;
}
}
static void I2C_StopFn(void)
{
if (processPending == true)
{
SolenoidDriver_ProcessRequest(TWI_RxBuff, TWI_RxPos);
processPending = false;
}
// Reset TX/RX buffer positions
TWI_TxPos = 0;
TWI_RxPos = 0;
}
static void I2C_CollisionFn(void)
{
I2C_GotoUnaddressed();
}
void I2C_SetAddress(uint8_t address)
{
// Always enable general call
address = address | 0x01;
TWI0.SADDR = address;
}
void I2C_SetMask(uint8_t mask)
{
return;
}
void I2C_Open(void)
{
I2C_SlaveOpen();
}
void I2C_Close(void)
{
I2C_SlaveClose();
}
static void TWI_ISR_Handler(void)
{
if (I2C_SlaveIsBusCollision()) {
I2C_CollisionFn();
return;
}
if (I2C_SlaveIsBusError()) {
I2C_CollisionFn();
return;
}
if (I2C_SlaveIsAddressInterrupt()) {
I2C_AddressFn();
debugTWIStr("\r\nA");
if (I2C_SlaveDIR()) {
// Master wishes to read from slave
// I2C_ReadFn();
I2C_SlaveSendAck();
}
return;
}
if (I2C_SlaveIsDataInterrupt()) {
if (I2C_SlaveDIR())
{
// Master wishes to read from slave
// if (!I2C_SlaveIsNack()) {
debugTWIStr("R");
// Received ACK from master
I2C_ReadFn();
I2C_SlaveSendAck();
// } else {
// Received NACK from master
// debugTWIStr("RN");
// I2C_SlaveSendAck();
// I2C_GotoUnaddressed();
// }
}
else // Master wishes to write to slave
{
debugTWIStr("W");
I2C_WriteFn();
processPending = true;
}
return;
}
// Check if STOP was received
if (I2C_SlaveIsStopInterrupt()) {
debugTWIStr("S\r\n");
I2C_StopFn();
I2C_SlaveIsTxComplete(); // To check the status of the transaction
return;
}
}
ISR(TWI0_TWIS_vect)
{
TWI_ISR_Handler();
// Reset Interrupt flags
TWI0.SSTATUS |= (TWI_DIF_bm | TWI_APIF_bm);
}
uint8_t I2C_Read(void)
{
return I2C_SlaveRead();
}
void I2C_Write(uint8_t data)
{
I2C_SlaveWrite(data);
}
void I2C_Enable(void)
{
I2C_SlaveOpen();
}
void I2C_SendAck(void)
{
I2C_SlaveSendAck();
}
void I2C_SendNack(void)
{
I2C_SlaveSendNack();
}
void I2C_GotoUnaddressed(void)
{
// Reset module
I2C_SlaveReset();
}
// Read Event Interrupt Handlers
void I2C_ReadCallback(void)
{
if (I2C_ReadInterruptHandler) {
I2C_ReadInterruptHandler();
}
}
void I2C_SetReadCallback(TWI0_callback handler)
{
I2C_ReadInterruptHandler = handler;
}
// Write Event Interrupt Handlers
void I2C_WriteCallback(void)
{
if (I2C_WriteInterruptHandler) {
I2C_WriteInterruptHandler();
}
}
void I2C_SetWriteCallback(TWI0_callback handler)
{
I2C_WriteInterruptHandler = handler;
}
// Address Event Interrupt Handlers
void I2C_AddressCallback(void)
{
if (I2C_AddressInterruptHandler) {
I2C_AddressInterruptHandler();
}
}
void I2C_SetAddressCallback(TWI0_callback handler)
{
I2C_AddressInterruptHandler = handler;
}
// Stop Event Interrupt Handlers
void I2C_StopCallback(void)
{
if (I2C_StopInterruptHandler) {
I2C_StopInterruptHandler();
}
}
void I2C_SetStopCallback(TWI0_callback handler)
{
I2C_StopInterruptHandler = handler;
}
// Bus Collision Event Interrupt Handlers
void I2C_CollisionCallback(void)
{
if (I2C_CollisionInterruptHandler) {
I2C_CollisionInterruptHandler();
}
}
void I2C_SetCollisionCallback(TWI0_callback handler)
{
I2C_CollisionInterruptHandler = handler;
}
// Bus Error Event Interrupt Handlers
void I2C_BusErrorCallback(void)
{
if (I2C_BusErrorInterruptHandler) {
I2C_BusErrorInterruptHandler();
}
}
void I2C_SetBusErrorCallback(TWI0_callback handler)
{
I2C_BusErrorInterruptHandler = handler;
}
/* Slave Configurations */
void I2C_SlaveOpen(void)
{
TWI0.SCTRLA |= TWI_ENABLE_bm;
}
void I2C_SlaveClose(void)
{
TWI0.SCTRLA &= ~TWI_ENABLE_bm;
}
bool I2C_SlaveIsBusCollision(void)
{
return TWI0.SSTATUS & TWI_COLL_bm;
}
bool I2C_SlaveIsBusError(void)
{
return TWI0.SSTATUS & TWI_BUSERR_bm;
}
bool I2C_SlaveIsAddressInterrupt(void)
{
return (TWI0.SSTATUS & TWI_APIF_bm) && (TWI0.SSTATUS & TWI_AP_bm);
}
bool I2C_SlaveIsDataInterrupt(void)
{
return TWI0.SSTATUS & TWI_DIF_bm;
}
bool I2C_SlaveIsStopInterrupt(void)
{
return (TWI0.SSTATUS & TWI_APIF_bm) && (!(TWI0.SSTATUS & TWI_AP_bm));
}
bool I2C_SlaveDIR(void)
{
return TWI0.SSTATUS & TWI_DIR_bm;
}
void I2C_SlaveSendAck(void)
{
TWI0.SCTRLB = TWI_ACKACT_ACK_gc | TWI_SCMD_RESPONSE_gc;
}
void I2C_SlaveSendNack(void)
{
TWI0.SCTRLB = TWI_ACKACT_NACK_gc | TWI_SCMD_COMPTRANS_gc;
}
bool I2C_SlaveIsNack(void)
{
return TWI0.SSTATUS & TWI_RXACK_bm;
}
bool I2C_SlaveIsTxComplete(void)
{
TWI0.SCTRLB = TWI_SCMD_COMPTRANS_gc;
return TWI0.SCTRLB;
}
uint8_t I2C_SlaveRead(void)
{
return TWI0.SDATA;
}
char I2C_SlaveWrite(uint8_t data)
{
TWI0.SDATA = data;
TWI0.SCTRLB |= TWI_SCMD_RESPONSE_gc;
return TWI0.SDATA;
}
char I2C_SlaveReset(void)
{
TWI0.SSTATUS |= (TWI_DIF_bm | TWI_APIF_bm);
TWI0.SCTRLB = TWI_SCMD_COMPTRANS_gc;
return TWI0.SSTATUS;
}
@@ -0,0 +1,123 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#include "../include/usart0.h"
void UART_Initialize()
{
//set baud rate register
USART0.BAUD = (uint16_t)USART0_BAUD_RATE(115200);
//RXCIE disabled; TXCIE disabled; DREIE disabled; RXSIE disabled; LBME disabled; ABEIE disabled; RS485 OFF;
USART0.CTRLA = 0x00;
//RXEN disabled; TXEN enabled; SFDEN disabled; ODME disabled; RXMODE NORMAL; MPCM disabled;
USART0.CTRLB = 0x40;
//CMODE ASYNCHRONOUS; PMODE DISABLED; SBMODE 1BIT; CHSIZE 8BIT; UDORD disabled; UCPHA disabled;
USART0.CTRLC = 0x03;
//DBGCTRL_DBGRUN
USART0.DBGCTRL = 0x00;
//EVCTRL_IREI
USART0.EVCTRL = 0x00;
//RXPLCTRL_RXPL
USART0.RXPLCTRL = 0x00;
//TXPLCTRL_TXPL
USART0.TXPLCTRL = 0x00;
}
void UART_Enable()
{
USART0.CTRLB |= USART_RXEN_bm | USART_TXEN_bm;
}
void UART_EnableRx()
{
USART0.CTRLB |= USART_RXEN_bm;
}
void UART_EnableTx()
{
USART0.CTRLB |= USART_TXEN_bm;
}
void UART_Disable()
{
USART0.CTRLB &= ~(USART_RXEN_bm | USART_TXEN_bm);
}
uint8_t UART_GetData()
{
return USART0.RXDATAL;
}
bool UART_IsTxReady()
{
return (USART0.STATUS & USART_DREIF_bm);
}
bool UART_IsRxReady()
{
return (USART0.STATUS & USART_RXCIF_bm);
}
bool UART_IsTxBusy()
{
return (!(USART0.STATUS & USART_TXCIF_bm));
}
bool UART_IsTxDone()
{
return (USART0.STATUS & USART_TXCIF_bm);
}
uint8_t UART_Read()
{
while (!(USART0.STATUS & USART_RXCIF_bm))
;
return USART0.RXDATAL;
}
void UART_Write(const uint8_t data)
{
while (!(USART0.STATUS & USART_DREIF_bm))
;
USART0.TXDATAL = data;
}
@@ -0,0 +1,49 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef ASSEMBLER_H_INCLUDED
#define ASSEMBLER_H_INCLUDED
#if !defined(__ASSEMBLER__) && !defined(__IAR_SYSTEMS_ASM__) && !defined(__DOXYGEN__)
#error This file may only be included from assembly files
#endif
#if defined(__ASSEMBLER__)
#include "assembler/gas.h"
#include <avr/io.h>
#elif defined(__IAR_SYSTEMS_ASM__)
#include "assembler/iar.h"
#include <ioavr.h>
#endif
#endif /* ASSEMBLER_H_INCLUDED */
@@ -0,0 +1,116 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef ASSEMBLER_GAS_H_INCLUDED
#define ASSEMBLER_GAS_H_INCLUDED
#ifndef __DOXYGEN__
/* clang-format off */
/* IAR doesn't accept dots in macro names */
.macro ld_addr, reg, sym
lda.w \reg, \sym
.endm
/* Define a function \a name that is either globally visible or only
* file-local.
*/
.macro gas_begin_func name, is_public
.if \is_public
.global \name
.endif
.section .text.\name, "ax", @progbits
.type \name, @function
\name :
.endm
/* Define a function \a name that is either globally visible or only
* file-local in a given segment.
*/
.macro gas_begin_func_segm name, is_public, segment
.if \is_public
.global \name
.endif
.section .\segment, "ax", @progbits
.type \name, @function
\name :
.endm
/* Define \a name as a weak alias for the function \a strong_name */
.macro gas_weak_function_alias name, strong_name
.global \name
.weak \name
.type \name, @function
.set \name, \strong_name
.endm
/* Define a weak function called \a name */
.macro gas_weak_function name
.weak \name
gas_begin_func \name 1
.endm
#define REPEAT(count) .rept count
#define END_REPEAT() .endr
#define FILL_BYTES(count) .fill count
#define SET_LOC(offset) .org offset
#define L(name) .L##name
#define EXTERN_SYMBOL(name)
#define TEXT_SECTION(name) \
.section name, "ax", @progbits
#define RODATA_SECTION(name) \
.section name, "a", @progbits
#define DATA_SECTION(name) \
.section name, "aw", @progbits
#define BSS_SECTION(name) \
.section name, "aw", @nobits
#define FUNCTION(name) gas_begin_func name 0
#define PUBLIC_FUNCTION(name) gas_begin_func name 1
#define PUBLIC_FUNCTION_SEGMENT(name, segment) \
gas_begin_func_segm name 1 segment
#define WEAK_FUNCTION(name) gas_weak_function name
#define WEAK_FUNCTION_ALIAS(name, strong_name) \
gas_weak_function_alias name strong_name
#define END_FUNC(name) \
.size name, . - name
#define END_FILE()
/* clang-format on */
#endif /* __DOXYGEN__ */
#endif /* ASSEMBLER_GAS_H_INCLUDED */
@@ -0,0 +1,104 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef ASSEMBLER_IAR_H_INCLUDED
#define ASSEMBLER_IAR_H_INCLUDED
/* clang-format off */
ld_addr MACRO reg, sym
mov reg, LWRD sym
orh reg, HWRD sym
ENDM
call MACRO sym
rcall sym
ENDM
iar_begin_func MACRO name, sect, is_public, is_weak
MODULE name
RSEG CODE:CODE:NOROOT(1)
IF is_weak == 1
PUBWEAK name
ELSEIF is_public
PUBLIC name
ENDIF
name:
ENDM
iar_begin_func_segm MACRO name, sect, is_public, is_weak, segment
MODULE name
RSEG segment:CODE:NOROOT(1)
IF is_weak == 1
PUBWEAK name
ELSEIF is_public
PUBLIC name
ENDIF
name:
ENDM
iar_weak_alias MACRO name, strong_name
PUBWEAK name
name:
rjmp strong_name
ENDM
#define lo(x) LWRD x
#define hi(x) HWRD x
#define REPEAT(count) REPT count
#define END_REPEAT() ENDR
#define SET_LOC(offset) ORG offset
#define END_FILE() END
#define FILL_BYTES(count) DS8 count
#define L(name) name
#define EXTERN_SYMBOL(name) EXTERN name
#define FUNCTION(name) iar_begin_func name, text_##name, 0, 0
#define PUBLIC_FUNCTION(name) iar_begin_func name, text_##name, 1, 0
#define PUBLIC_FUNCTION_SEGMENT(name, segment) \
iar_begin_func_segm name, text_##name, 1, 0, segment
#define WEAK_FUNCTION(name) iar_begin_func name, text_##name, 1, 1
#define WEAK_FUNCTION_ALIAS(name, strong_name) \
iar_weak_alias name, strong_name
#define END_FUNC(name) ENDMOD
#define TEXT_SECTION(name) RSEG name:CODE:NOROOT
#define RODATA_SECTION(name) RSEG name:CONST:NOROOT
#define DATA_SECTION(name) RSEG name:DATA:NOROOT
#define BSS_SECTION(name) RSEG name:DATA:NOROOT
/* clang-format on */
#endif /* ASSEMBLER_IAR_H_INCLUDED */
@@ -0,0 +1,113 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef ATOMIC_H
#define ATOMIC_H
/**
* \defgroup doc_driver_utils_atomic Atomic memory access and critical sections
* \ingroup doc_driver_utils
*
* Atomic memory access and critical sections
*
* \{
*/
/* clang-format off */
#if defined(__GNUC__) || defined (__DOXYGEN__)
/**
* \brief Enter a critical region
*
* Saves the contents of the status register, including the Global
* Interrupt Enable bit, so that it can be restored upon leaving the
* critical region. Thereafter, clears the Global Interrupt Enable Bit.
* This macro takes a parameter P that is unused for the GCC compiler,
* but necessary for code compatibility with the IAR compiler. The IAR
* compiler declares a variable with the name of the parameter for
* holding the SREG value. Since a variable is declared in the macro,
* this variable must have a name that is unique within the scope
* that the critical region is declared within, otherwise compilation
* will fail.
*
* \param[in] UNUSED(GCC)/P(IAR) Name of variable storing SREG
*
*/
#define ENTER_CRITICAL(UNUSED) __asm__ __volatile__ ( \
"in __tmp_reg__, __SREG__" "\n\t" \
"cli" "\n\t" \
"push __tmp_reg__" "\n\t" \
::: "memory" \
)
/**
* \brief Exit a critical region
*
* Restores the contents of the status register, including the Global
* Interrupt Enable bit, as it was when entering the critical region.
* This macro takes a parameter P that is unused for the GCC compiler,
* but necessary for code compatibility with the IAR compiler. The IAR
* compiler uses this parameter as the name of a variable that holds
* the SREG value. The parameter must be identical to the parameter
* used in the corresponding ENTER_CRITICAL().
*
* \param[in] UNUSED(GCC)/P(IAR) Name of variable storing SREG
*
*/
#define EXIT_CRITICAL(UNUSED) __asm__ __volatile__ ( \
"pop __tmp_reg__" "\n\t" \
"out __SREG__, __tmp_reg__" "\n\t" \
::: "memory" \
)
#define DISABLE_INTERRUPTS() __asm__ __volatile__ ( "cli" ::: "memory")
#define ENABLE_INTERRUPTS() __asm__ __volatile__ ( "sei" ::: "memory")
#elif defined(__ICCAVR__)
#define ENTER_CRITICAL(P) unsigned char P = __save_interrupt();__disable_interrupt();
#define EXIT_CRITICAL(P) __restore_interrupt(P);
#define DISABLE_INTERRUPTS() __disable_interrupt();
#define ENABLE_INTERRUPTS() __enable_interrupt();
#else
# error Unsupported compiler.
#endif
/* clang-format on */
#endif /* ATOMIC_H */
@@ -0,0 +1,80 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
#ifndef UTILS_COMPILER_H
#define UTILS_COMPILER_H
/**
* \defgroup doc_driver_utils_compiler Compiler abstraction
* \ingroup doc_driver_utils
*
* Compiler abstraction layer and code utilities for 8-bit AVR.
* This module provides various abstraction layers and utilities
* to make code compatible between different compilers.
*
* \{
*/
#if defined(__GNUC__)
#include <avr/io.h>
#include <avr/builtins.h>
#elif defined(__ICCAVR__)
#define ENABLE_BIT_DEFINITIONS 1
#include <ioavr.h>
#include <intrinsics.h>
#ifndef CCP_IOREG_gc
#define CCP_IOREG_gc 0xD8 /* CPU_CCP_IOREG_gc */
#endif
#ifndef CCP_SPM_gc
#define CCP_SPM_gc 0x9D /* CPU_CCP_SPM_gc */
#endif
#else
#error Unsupported compiler.
#endif
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include <stdlib.h>
#include "interrupt_avr8.h"
/**
* \def UNUSED
* \brief Marking \a v as a unused parameter or value.
*/
#define UNUSED(v) (void)(v)
#endif /* UTILS_COMPILER_H */
@@ -0,0 +1,100 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
/**
* \defgroup doc_driver_utils_interrupts ISR abstraction
* \ingroup doc_driver_utils
*
* Interrupt-related functionality.
*
* \{
*/
#ifndef UTILS_INTERRUPT_AVR8_H
#define UTILS_INTERRUPT_AVR8_H
/**
* \weakgroup interrupt_group
*
* @{
*/
#ifdef ISR_CUSTOM_H
#include ISR_CUSTOM_H
#else
/**
* \def ISR
* \brief Define service routine for specified interrupt vector
*
* Usage:
* \code
ISR(FOO_vect)
{
...
}
\endcode
*
* \param vect Interrupt vector name as found in the device header files.
*/
#if defined(__DOXYGEN__)
#define ISR(vect)
#elif defined(__GNUC__)
#include <avr/interrupt.h>
#elif defined(__ICCAVR__)
#define __ISR(x) _Pragma(#x)
#define ISR(vect) __ISR(vector = vect) __interrupt void handler_##vect(void)
#endif
#endif // ISR_CUSTOM_H
#ifdef __GNUC__
#define cpu_irq_enable() sei()
#define cpu_irq_disable() cli()
#else
#define cpu_irq_enable() __enable_interrupt()
#define cpu_irq_disable() __disable_interrupt()
#endif
//! @}
/**
* \weakgroup interrupt_deprecated_group
* @{
*/
// Deprecated definitions.
#define Enable_global_interrupt() cpu_irq_enable()
#define Disable_global_interrupt() cpu_irq_disable()
#define Is_global_interrupt_enabled() cpu_irq_is_enabled()
//! @}
#endif /* UTILS_INTERRUPT_AVR8_H */
@@ -0,0 +1,61 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
/**
* \defgroup doc_driver_utils AVR Code utility functions
*
* Compiler abstraction layer and code utilities for AVR.
* This module provides various abstraction layers and utilities
* to make code compatible between different compilers.
*
* \{
*/
#ifndef UTILS_H_INCLUDED
#define UTILS_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/**
* \brief Retrieve array size
*/
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* UTILS_H_INCLUDED */
@@ -0,0 +1,72 @@
/**
@Company
Microchip Technology Inc.
@Description
This Source file provides APIs.
Generation Information :
Driver Version : 1.0.0
*/
/*
(c) 2018 Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip software and any
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
license terms applicable to your use of third party software (including open source software) that
may accompany Microchip software.
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
FOR A PARTICULAR PURPOSE.
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
SOFTWARE.
*/
/**
* \defgroup doc_driver_utils_assert Functionality for assert.
* \ingroup doc_driver_utils
*
* \{
*/
#ifndef _ASSERT_H_INCLUDED
#define _ASSERT_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
/**
* \brief Assert macro
*
* This macro is used to throw asserts. It can be mapped to different function
* based on debug level.
*
* \param[in] condition A condition to be checked;
* assert is thrown if the given condition is false
*/
#ifdef DEBUG
#define ASSERT(condition) \
if (!(condition)) \
while (true) \
;
#else
#define ASSERT(condition) ((void)0)
#endif
#ifdef __cplusplus
}
#endif
#endif /* _ASSERT_H_INCLUDED */
@@ -0,0 +1,311 @@
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a -pre and a -post target defined where you can add customized code.
#
# This makefile implements configuration specific macros and targets.
# Include project Makefile
ifeq "${IGNORE_LOCAL}" "TRUE"
# do not include local makefile. User is passing all local related variables already
else
include Makefile
# Include makefile containing local settings
ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk"
include nbproject/Makefile-local-default.mk
endif
endif
# Environment
MKDIR=gnumkdir -p
RM=rm -f
MV=mv
CP=cp
# Macros
CND_CONF=default
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
IMAGE_TYPE=debug
OUTPUT_SUFFIX=elf
DEBUGGABLE_SUFFIX=elf
FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
else
IMAGE_TYPE=production
OUTPUT_SUFFIX=hex
DEBUGGABLE_SUFFIX=elf
FINAL_IMAGE=dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
endif
ifeq ($(COMPARE_BUILD), true)
COMPARISON_BUILD=
else
COMPARISON_BUILD=
endif
ifdef SUB_IMAGE_ADDRESS
else
SUB_IMAGE_ADDRESS_COMMAND=
endif
# Object Directory
OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE}
# Distribution Directory
DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE}
# Source Files Quoted if spaced
SOURCEFILES_QUOTED_IF_SPACED=mcc_generated_files/src/pin_manager.c mcc_generated_files/src/cpuint.c mcc_generated_files/src/tcb0.c mcc_generated_files/src/protected_io.S mcc_generated_files/src/usart0.c mcc_generated_files/src/nvmctrl.c mcc_generated_files/src/twi0_slave.c mcc_generated_files/mcc.c mcc_generated_files/device_config.c SolenoidDriver.c main.c debug.c
# Object Files Quoted if spaced
OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/mcc_generated_files/src/pin_manager.o ${OBJECTDIR}/mcc_generated_files/src/cpuint.o ${OBJECTDIR}/mcc_generated_files/src/tcb0.o ${OBJECTDIR}/mcc_generated_files/src/protected_io.o ${OBJECTDIR}/mcc_generated_files/src/usart0.o ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o ${OBJECTDIR}/mcc_generated_files/mcc.o ${OBJECTDIR}/mcc_generated_files/device_config.o ${OBJECTDIR}/SolenoidDriver.o ${OBJECTDIR}/main.o ${OBJECTDIR}/debug.o
POSSIBLE_DEPFILES=${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d ${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d ${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d ${OBJECTDIR}/mcc_generated_files/src/usart0.o.d ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d ${OBJECTDIR}/mcc_generated_files/mcc.o.d ${OBJECTDIR}/mcc_generated_files/device_config.o.d ${OBJECTDIR}/SolenoidDriver.o.d ${OBJECTDIR}/main.o.d ${OBJECTDIR}/debug.o.d
# Object Files
OBJECTFILES=${OBJECTDIR}/mcc_generated_files/src/pin_manager.o ${OBJECTDIR}/mcc_generated_files/src/cpuint.o ${OBJECTDIR}/mcc_generated_files/src/tcb0.o ${OBJECTDIR}/mcc_generated_files/src/protected_io.o ${OBJECTDIR}/mcc_generated_files/src/usart0.o ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o ${OBJECTDIR}/mcc_generated_files/mcc.o ${OBJECTDIR}/mcc_generated_files/device_config.o ${OBJECTDIR}/SolenoidDriver.o ${OBJECTDIR}/main.o ${OBJECTDIR}/debug.o
# Source Files
SOURCEFILES=mcc_generated_files/src/pin_manager.c mcc_generated_files/src/cpuint.c mcc_generated_files/src/tcb0.c mcc_generated_files/src/protected_io.S mcc_generated_files/src/usart0.c mcc_generated_files/src/nvmctrl.c mcc_generated_files/src/twi0_slave.c mcc_generated_files/mcc.c mcc_generated_files/device_config.c SolenoidDriver.c main.c debug.c
# Pack Options
PACK_COMPILER_OPTIONS=-I "${DFP_DIR}/include"
PACK_COMMON_OPTIONS=-B "${DFP_DIR}/gcc/dev/attiny814"
CFLAGS=
ASFLAGS=
LDLIBSOPTIONS=
############# Tool locations ##########################################
# If you copy a project from one host to another, the path where the #
# compiler is installed may be different. #
# If you open this project with MPLAB X in the new host, this #
# makefile will be regenerated and the paths will be corrected. #
#######################################################################
# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build
FIXDEPS=fixDeps
.build-conf: ${BUILD_SUBPROJECTS}
ifneq ($(INFORMATION_MESSAGE), )
@echo $(INFORMATION_MESSAGE)
endif
${MAKE} -f nbproject/Makefile-default.mk dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
MP_PROCESSOR_OPTION=ATtiny814
# ------------------------------------------------------------------------------------
# Rules for buildStep: assemble
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
else
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: assembleWithPreprocess
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${OBJECTDIR}/mcc_generated_files/src/protected_io.o: mcc_generated_files/src/protected_io.S nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/protected_io.o
@${RM} ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.ok ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.err
${MP_CC} $(MP_EXTRA_AS_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -DDEBUG -x assembler-with-cpp -c -D__$(MP_PROCESSOR_OPTION)__ -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/protected_io.o -o ${OBJECTDIR}/mcc_generated_files/src/protected_io.o mcc_generated_files/src/protected_io.S -DXPRJ_default=$(CND_CONF) -Wa,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_AS_POST),-MD="${OBJECTDIR}/mcc_generated_files/src/protected_io.o.asm.d",--defsym=__ICD2RAM=1,--defsym=__MPLAB_DEBUG=1,--gdwarf-2,--defsym=__DEBUG=1
else
${OBJECTDIR}/mcc_generated_files/src/protected_io.o: mcc_generated_files/src/protected_io.S nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/protected_io.o
@${RM} ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.ok ${OBJECTDIR}/mcc_generated_files/src/protected_io.o.err
${MP_CC} $(MP_EXTRA_AS_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x assembler-with-cpp -c -D__$(MP_PROCESSOR_OPTION)__ -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/protected_io.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/protected_io.o -o ${OBJECTDIR}/mcc_generated_files/src/protected_io.o mcc_generated_files/src/protected_io.S -DXPRJ_default=$(CND_CONF) -Wa,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_AS_POST),-MD="${OBJECTDIR}/mcc_generated_files/src/protected_io.o.asm.d"
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: compile
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${OBJECTDIR}/mcc_generated_files/src/pin_manager.o: mcc_generated_files/src/pin_manager.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o -o ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o mcc_generated_files/src/pin_manager.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/cpuint.o: mcc_generated_files/src/cpuint.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/cpuint.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/cpuint.o -o ${OBJECTDIR}/mcc_generated_files/src/cpuint.o mcc_generated_files/src/cpuint.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/tcb0.o: mcc_generated_files/src/tcb0.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/tcb0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/tcb0.o -o ${OBJECTDIR}/mcc_generated_files/src/tcb0.o mcc_generated_files/src/tcb0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/usart0.o: mcc_generated_files/src/usart0.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/usart0.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/usart0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/usart0.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/usart0.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/usart0.o -o ${OBJECTDIR}/mcc_generated_files/src/usart0.o mcc_generated_files/src/usart0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o: mcc_generated_files/src/nvmctrl.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o -o ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o mcc_generated_files/src/nvmctrl.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o: mcc_generated_files/src/twi0_slave.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o -o ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o mcc_generated_files/src/twi0_slave.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/mcc.o: mcc_generated_files/mcc.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files"
@${RM} ${OBJECTDIR}/mcc_generated_files/mcc.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/mcc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/mcc.o.d" -MT "${OBJECTDIR}/mcc_generated_files/mcc.o.d" -MT ${OBJECTDIR}/mcc_generated_files/mcc.o -o ${OBJECTDIR}/mcc_generated_files/mcc.o mcc_generated_files/mcc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/device_config.o: mcc_generated_files/device_config.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files"
@${RM} ${OBJECTDIR}/mcc_generated_files/device_config.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/device_config.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/device_config.o.d" -MT "${OBJECTDIR}/mcc_generated_files/device_config.o.d" -MT ${OBJECTDIR}/mcc_generated_files/device_config.o -o ${OBJECTDIR}/mcc_generated_files/device_config.o mcc_generated_files/device_config.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/SolenoidDriver.o: SolenoidDriver.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}"
@${RM} ${OBJECTDIR}/SolenoidDriver.o.d
@${RM} ${OBJECTDIR}/SolenoidDriver.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/SolenoidDriver.o.d" -MT "${OBJECTDIR}/SolenoidDriver.o.d" -MT ${OBJECTDIR}/SolenoidDriver.o -o ${OBJECTDIR}/SolenoidDriver.o SolenoidDriver.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}"
@${RM} ${OBJECTDIR}/main.o.d
@${RM} ${OBJECTDIR}/main.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/main.o.d" -MT "${OBJECTDIR}/main.o.d" -MT ${OBJECTDIR}/main.o -o ${OBJECTDIR}/main.o main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/debug.o: debug.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}"
@${RM} ${OBJECTDIR}/debug.o.d
@${RM} ${OBJECTDIR}/debug.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -g -DDEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/debug.o.d" -MT "${OBJECTDIR}/debug.o.d" -MT ${OBJECTDIR}/debug.o -o ${OBJECTDIR}/debug.o debug.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
else
${OBJECTDIR}/mcc_generated_files/src/pin_manager.o: mcc_generated_files/src/pin_manager.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/pin_manager.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o -o ${OBJECTDIR}/mcc_generated_files/src/pin_manager.o mcc_generated_files/src/pin_manager.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/cpuint.o: mcc_generated_files/src/cpuint.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/cpuint.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/cpuint.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/cpuint.o -o ${OBJECTDIR}/mcc_generated_files/src/cpuint.o mcc_generated_files/src/cpuint.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/tcb0.o: mcc_generated_files/src/tcb0.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/tcb0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/tcb0.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/tcb0.o -o ${OBJECTDIR}/mcc_generated_files/src/tcb0.o mcc_generated_files/src/tcb0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/usart0.o: mcc_generated_files/src/usart0.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/usart0.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/usart0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/usart0.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/usart0.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/usart0.o -o ${OBJECTDIR}/mcc_generated_files/src/usart0.o mcc_generated_files/src/usart0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o: mcc_generated_files/src/nvmctrl.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o -o ${OBJECTDIR}/mcc_generated_files/src/nvmctrl.o mcc_generated_files/src/nvmctrl.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o: mcc_generated_files/src/twi0_slave.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files/src"
@${RM} ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d" -MT "${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o.d" -MT ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o -o ${OBJECTDIR}/mcc_generated_files/src/twi0_slave.o mcc_generated_files/src/twi0_slave.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/mcc.o: mcc_generated_files/mcc.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files"
@${RM} ${OBJECTDIR}/mcc_generated_files/mcc.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/mcc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/mcc.o.d" -MT "${OBJECTDIR}/mcc_generated_files/mcc.o.d" -MT ${OBJECTDIR}/mcc_generated_files/mcc.o -o ${OBJECTDIR}/mcc_generated_files/mcc.o mcc_generated_files/mcc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/mcc_generated_files/device_config.o: mcc_generated_files/device_config.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}/mcc_generated_files"
@${RM} ${OBJECTDIR}/mcc_generated_files/device_config.o.d
@${RM} ${OBJECTDIR}/mcc_generated_files/device_config.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/mcc_generated_files/device_config.o.d" -MT "${OBJECTDIR}/mcc_generated_files/device_config.o.d" -MT ${OBJECTDIR}/mcc_generated_files/device_config.o -o ${OBJECTDIR}/mcc_generated_files/device_config.o mcc_generated_files/device_config.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/SolenoidDriver.o: SolenoidDriver.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}"
@${RM} ${OBJECTDIR}/SolenoidDriver.o.d
@${RM} ${OBJECTDIR}/SolenoidDriver.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/SolenoidDriver.o.d" -MT "${OBJECTDIR}/SolenoidDriver.o.d" -MT ${OBJECTDIR}/SolenoidDriver.o -o ${OBJECTDIR}/SolenoidDriver.o SolenoidDriver.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}"
@${RM} ${OBJECTDIR}/main.o.d
@${RM} ${OBJECTDIR}/main.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/main.o.d" -MT "${OBJECTDIR}/main.o.d" -MT ${OBJECTDIR}/main.o -o ${OBJECTDIR}/main.o main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
${OBJECTDIR}/debug.o: debug.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} "${OBJECTDIR}"
@${RM} ${OBJECTDIR}/debug.o.d
@${RM} ${OBJECTDIR}/debug.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mmcu=attiny814 ${PACK_COMPILER_OPTIONS} ${PACK_COMMON_OPTIONS} -x c -c -D__$(MP_PROCESSOR_OPTION)__ -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -MD -MP -MF "${OBJECTDIR}/debug.o.d" -MT "${OBJECTDIR}/debug.o.d" -MT ${OBJECTDIR}/debug.o -o ${OBJECTDIR}/debug.o debug.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: compileCPP
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
else
endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: link
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE}
${MP_CC} $(MP_EXTRA_LD_PRE) -mmcu=attiny814 ${PACK_COMMON_OPTIONS} -gdwarf-2 -D__$(MP_PROCESSOR_OPTION)__ -Wl,-Map="dist\${CND_CONF}\${IMAGE_TYPE}\ATTiny814.${IMAGE_TYPE}.map" -o dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION),--defsym=__ICD2RAM=1,--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1 -Wl,--gc-sections -Wl,--start-group -Wl,-lm -Wl,--end-group
else
dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE}
${MP_CC} $(MP_EXTRA_LD_PRE) -mmcu=attiny814 ${PACK_COMMON_OPTIONS} -D__$(MP_PROCESSOR_OPTION)__ -Wl,-Map="dist\${CND_CONF}\${IMAGE_TYPE}\ATTiny814.${IMAGE_TYPE}.map" -o dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD) -Wl,--defsym=__MPLAB_BUILD=1$(MP_EXTRA_LD_POST)$(MP_LINKER_FILE_OPTION) -Wl,--gc-sections -Wl,--start-group -Wl,-lm -Wl,--end-group
${MP_CC_DIR}\\avr-objcopy -O ihex "dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX}" "dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.hex"
endif
# Subprojects
.build-subprojects:
# Subprojects
.clean-subprojects:
# Clean Targets
.clean-conf: ${CLEAN_SUBPROJECTS}
${RM} -r build/default
${RM} -r dist/default
# Enable dependency checking
.dep.inc: .depcheck-impl
DEPFILES=$(shell mplabwildcard ${POSSIBLE_DEPFILES})
ifneq (${DEPFILES},)
include ${DEPFILES}
endif
@@ -0,0 +1,10 @@
#
#Mon Apr 26 02:03:36 EDT 2021
default.Pack.dfplocation=C\:\\Users\\Sasa\\.mchp_packs\\Microchip\\ATtiny_DFP\\2.3.92
default.com-microchip-mplab-nbide-toolchainAVR-AVRLanguageToolchain.md5=ad26a821178a2075277e0c5a7d7c3f1c
default.languagetoolchain.dir=C\:\\Program Files (x86)\\Atmel\\Studio\\7.0\\toolchain\\avr8\\avr8-gnu-toolchain\\bin
configurations-xml=afb9195d3738ba99137a084f9bbd857d
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=9db8f8a224aa17d0023ea7f468f871dc
default.languagetoolchain.version=5.4.0
host.platform=windows
conf.ids=default
@@ -0,0 +1,69 @@
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a pre- and a post- target defined where you can add customization code.
#
# This makefile implements macros and targets common to all configurations.
#
# NOCDDL
# Building and Cleaning subprojects are done by default, but can be controlled with the SUB
# macro. If SUB=no, subprojects will not be built or cleaned. The following macro
# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf
# and .clean-reqprojects-conf unless SUB has the value 'no'
SUB_no=NO
SUBPROJECTS=${SUB_${SUB}}
BUILD_SUBPROJECTS_=.build-subprojects
BUILD_SUBPROJECTS_NO=
BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}}
CLEAN_SUBPROJECTS_=.clean-subprojects
CLEAN_SUBPROJECTS_NO=
CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
# Project Name
PROJECTNAME=ATTiny814
# Active Configuration
DEFAULTCONF=default
CONF=${DEFAULTCONF}
# All Configurations
ALLCONFS=default
# build
.build-impl: .build-pre
${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf
# clean
.clean-impl: .clean-pre
${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf
# clobber
.clobber-impl: .clobber-pre .depcheck-impl
${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean
# all
.all-impl: .all-pre .depcheck-impl
${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build
# dependency checking support
.depcheck-impl:
# @echo "# This code depends on make tool being used" >.dep.inc
# @if [ -n "${MAKE_VERSION}" ]; then \
# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \
# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \
# echo "include \$${DEPFILES}" >>.dep.inc; \
# echo "endif" >>.dep.inc; \
# else \
# echo ".KEEP_STATE:" >>.dep.inc; \
# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \
# fi
@@ -0,0 +1,38 @@
#
# Generated Makefile - do not edit!
#
#
# This file contains information about the location of compilers and other tools.
# If you commmit this file into your revision control server, you will be able to
# to checkout the project and build it from the command line with make. However,
# if more than one person works on the same project, then this file might show
# conflicts since different users are bound to have compilers in different places.
# In that case you might choose to not commit this file and let MPLAB X recreate this file
# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at
# least once so the file gets created and the project can be built. Finally, you can also
# avoid using this file at all if you are only building from the command line with make.
# You can invoke make with the values of the macros:
# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ...
#
SHELL=cmd.exe
PATH_TO_IDE_BIN=D:/Program Files/Microchip/MPLABX/v5.40/mplab_platform/platform/../mplab_ide/modules/../../bin/
# Adding MPLAB X bin directory to path.
PATH:=D:/Program Files/Microchip/MPLABX/v5.40/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH)
# Path to java used to run MPLAB X when this makefile was created
MP_JAVA_PATH="D:\Program Files\Microchip\MPLABX\v5.40\sys\java\zulu8.36.0.1-ca-fx-jdk8.0.202-win_x64\jre/bin/"
OS_CURRENT="$(shell uname -s)"
MP_CC="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"
MP_CPPC="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe"
# MP_BC is not defined
MP_AS="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-as.exe"
MP_LD="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-ld.exe"
MP_AR="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-ar.exe"
DEP_GEN=${MP_JAVA_PATH}java -jar "D:/Program Files/Microchip/MPLABX/v5.40/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar"
MP_CC_DIR="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin"
MP_CPPC_DIR="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin"
# MP_BC_DIR is not defined
MP_AS_DIR="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin"
MP_LD_DIR="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin"
MP_AR_DIR="C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin"
# MP_BC_DIR is not defined
DFP_DIR=C:/Users/Sasa/.mchp_packs/Microchip/ATtiny_DFP/2.3.92
@@ -0,0 +1,13 @@
#
# Generated - do not edit!
#
# NOCDDL
#
CND_BASEDIR=`pwd`
# default configuration
CND_ARTIFACT_DIR_default=dist/default/production
CND_ARTIFACT_NAME_default=ATTiny814.production.hex
CND_ARTIFACT_PATH_default=dist/default/production/ATTiny814.production.hex
CND_PACKAGE_DIR_default=${CND_DISTDIR}/default/package
CND_PACKAGE_NAME_default=attiny814.tar
CND_PACKAGE_PATH_default=${CND_DISTDIR}/default/package/attiny814.tar
@@ -0,0 +1,73 @@
#!/bin/bash -x
#
# Generated - do not edit!
#
# Macros
TOP=`pwd`
CND_CONF=default
CND_DISTDIR=dist
TMPDIR=build/${CND_CONF}/${IMAGE_TYPE}/tmp-packaging
TMPDIRNAME=tmp-packaging
OUTPUT_PATH=dist/${CND_CONF}/${IMAGE_TYPE}/ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
OUTPUT_BASENAME=ATTiny814.${IMAGE_TYPE}.${OUTPUT_SUFFIX}
PACKAGE_TOP_DIR=attiny814/
# Functions
function checkReturnCode
{
rc=$?
if [ $rc != 0 ]
then
exit $rc
fi
}
function makeDirectory
# $1 directory path
# $2 permission (optional)
{
mkdir -p "$1"
checkReturnCode
if [ "$2" != "" ]
then
chmod $2 "$1"
checkReturnCode
fi
}
function copyFileToTmpDir
# $1 from-file path
# $2 to-file path
# $3 permission
{
cp "$1" "$2"
checkReturnCode
if [ "$3" != "" ]
then
chmod $3 "$2"
checkReturnCode
fi
}
# Setup
cd "${TOP}"
mkdir -p ${CND_DISTDIR}/${CND_CONF}/package
rm -rf ${TMPDIR}
mkdir -p ${TMPDIR}
# Copy files and create directories and links
cd "${TOP}"
makeDirectory ${TMPDIR}/attiny814/bin
copyFileToTmpDir "${OUTPUT_PATH}" "${TMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755
# Generate tar file
cd "${TOP}"
rm -f ${CND_DISTDIR}/${CND_CONF}/package/attiny814.tar
cd ${TMPDIR}
tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/package/attiny814.tar *
checkReturnCode
# Cleanup
cd "${TOP}"
rm -rf ${TMPDIR}
@@ -0,0 +1,281 @@
<?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="65">
<logicalFolder name="root" displayName="root" projectFiles="true">
<logicalFolder name="HeaderFiles"
displayName="Header Files"
projectFiles="true">
<logicalFolder name="MCC Generated Files"
displayName="MCC Generated Files"
projectFiles="true">
<logicalFolder name="config" displayName="config" projectFiles="true">
<itemPath>mcc_generated_files/config/clock_config.h</itemPath>
</logicalFolder>
<logicalFolder name="include" displayName="include" projectFiles="true">
<itemPath>mcc_generated_files/include/cpuint.h</itemPath>
<itemPath>mcc_generated_files/include/port.h</itemPath>
<itemPath>mcc_generated_files/include/pin_manager.h</itemPath>
<itemPath>mcc_generated_files/include/ccp.h</itemPath>
<itemPath>mcc_generated_files/include/rstctrl.h</itemPath>
<itemPath>mcc_generated_files/include/nvmctrl.h</itemPath>
<itemPath>mcc_generated_files/include/tcb0.h</itemPath>
<itemPath>mcc_generated_files/include/usart0.h</itemPath>
<itemPath>mcc_generated_files/include/protected_io.h</itemPath>
<itemPath>mcc_generated_files/include/twi0_slave.h</itemPath>
</logicalFolder>
<logicalFolder name="utils" displayName="utils" projectFiles="true">
<logicalFolder name="assembler" displayName="assembler" projectFiles="true">
<itemPath>mcc_generated_files/utils/assembler/iar.h</itemPath>
<itemPath>mcc_generated_files/utils/assembler/gas.h</itemPath>
</logicalFolder>
<itemPath>mcc_generated_files/utils/compiler.h</itemPath>
<itemPath>mcc_generated_files/utils/interrupt_avr8.h</itemPath>
<itemPath>mcc_generated_files/utils/utils.h</itemPath>
<itemPath>mcc_generated_files/utils/utils_assert.h</itemPath>
<itemPath>mcc_generated_files/utils/assembler.h</itemPath>
<itemPath>mcc_generated_files/utils/atomic.h</itemPath>
</logicalFolder>
<itemPath>mcc_generated_files/mcc.h</itemPath>
</logicalFolder>
</logicalFolder>
<logicalFolder name="LinkerScript"
displayName="Linker Files"
projectFiles="true">
</logicalFolder>
<logicalFolder name="SourceFiles"
displayName="Source Files"
projectFiles="true">
<logicalFolder name="MCC Generated Files"
displayName="MCC Generated Files"
projectFiles="true">
<logicalFolder name="src" displayName="src" projectFiles="true">
<itemPath>mcc_generated_files/src/pin_manager.c</itemPath>
<itemPath>mcc_generated_files/src/cpuint.c</itemPath>
<itemPath>mcc_generated_files/src/tcb0.c</itemPath>
<itemPath>mcc_generated_files/src/protected_io.S</itemPath>
<itemPath>mcc_generated_files/src/usart0.c</itemPath>
<itemPath>mcc_generated_files/src/nvmctrl.c</itemPath>
<itemPath>mcc_generated_files/src/twi0_slave.c</itemPath>
</logicalFolder>
<itemPath>mcc_generated_files/mcc.c</itemPath>
<itemPath>mcc_generated_files/device_config.c</itemPath>
<itemPath>SolenoidDriver.c</itemPath>
<itemPath>SolenoidDriver.h</itemPath>
</logicalFolder>
<itemPath>main.c</itemPath>
<itemPath>debug.c</itemPath>
<itemPath>debug.h</itemPath>
</logicalFolder>
<logicalFolder name="ExternalFiles"
displayName="Important Files"
projectFiles="false">
<itemPath>Makefile</itemPath>
<itemPath>MyConfig.mc3</itemPath>
</logicalFolder>
</logicalFolder>
<sourceRootList>
<Elem>../../../Common/Lib/GaugeCommunication</Elem>
<Elem>.</Elem>
</sourceRootList>
<projectmakefile>Makefile</projectmakefile>
<confs>
<conf name="default" type="2">
<toolsSet>
<developmentServer>localhost</developmentServer>
<targetDevice>ATtiny814</targetDevice>
<targetHeader></targetHeader>
<targetPluginBoard></targetPluginBoard>
<platformTool>pk4hybrid</platformTool>
<languageToolchain>AVR</languageToolchain>
<languageToolchainVersion>5.4.0</languageToolchainVersion>
<platform>3</platform>
</toolsSet>
<packs>
<pack name="ATtiny_DFP" vendor="Microchip" version="2.3.92"/>
</packs>
<ScriptingSettings>
</ScriptingSettings>
<compileType>
<linkerTool>
<linkerLibItems>
</linkerLibItems>
</linkerTool>
<archiverTool>
</archiverTool>
<loading>
<useAlternateLoadableFile>false</useAlternateLoadableFile>
<parseOnProdLoad>true</parseOnProdLoad>
<alternateLoadableFile></alternateLoadableFile>
</loading>
<subordinates>
</subordinates>
</compileType>
<makeCustomizationType>
<makeCustomizationPreStepEnabled>false</makeCustomizationPreStepEnabled>
<makeCustomizationPreStep></makeCustomizationPreStep>
<makeCustomizationPostStepEnabled>false</makeCustomizationPostStepEnabled>
<makeCustomizationPostStep></makeCustomizationPostStep>
<makeCustomizationPutChecksumInUserID>false</makeCustomizationPutChecksumInUserID>
<makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
<makeCustomizationNormalizeHexFile>false</makeCustomizationNormalizeHexFile>
</makeCustomizationType>
<AVR-AR>
<property key="archiver-flags" value="-r"/>
</AVR-AR>
<AVR-AS>
<property key="announce-version" value="false"/>
<property key="include-paths" value=""/>
<property key="suppress-warnings" value="false"/>
</AVR-AS>
<AVR-AS-PRE>
<property key="announce-version" value="false"/>
<property key="include-paths" value=""/>
<property key="preprocessor-macros" value=""/>
<property key="preprocessor-macros-undefined" value=""/>
<property key="suppress-warnings" value="false"/>
</AVR-AS-PRE>
<AVR-CPP>
<property key="additional-warnings" value="true"/>
<property key="call-prologues" value="false"/>
<property key="default-bitfield-type" value="true"/>
<property key="default-char-type" value="true"/>
<property key="extra-include-directories" value=""/>
<property key="garbage-collect-data" value="true"/>
<property key="garbage-collect-functions" value="true"/>
<property key="inhibit-all" value="false"/>
<property key="make-warnings-into-errors" value="false"/>
<property key="no-interrupts" value="false"/>
<property key="no-system-directories" value="false"/>
<property key="optimization-level" value="-O1"/>
<property key="pack-struct" value="true"/>
<property key="preprocess-only" value="false"/>
<property key="preprocessor-macros" value=""/>
<property key="preprocessor-macros-undefined" value=""/>
<property key="save-temps" value="false"/>
<property key="short-calls" value="false"/>
<property key="short-enums" value="true"/>
<property key="strict-ansi" value="false"/>
<property key="strict-ansi-errors" value="false"/>
<property key="support-ansi" value="false"/>
<property key="syntax-only" value="false"/>
<property key="undefined-identifier" value="false"/>
<property key="verbose" value="false"/>
</AVR-CPP>
<AVR-GCC>
<property key="additional-warnings" value="true"/>
<property key="call-prologues" value="false"/>
<property key="default-bitfield-type" value="true"/>
<property key="default-char-type" value="true"/>
<property key="extra-include-directories" value=""/>
<property key="extra-warnings" value="false"/>
<property key="garbage-collect-data" value="true"/>
<property key="garbage-collect-functions" value="true"/>
<property key="inhibit-all" value="false"/>
<property key="make-warnings-into-errors" value="false"/>
<property key="no-interrupts" value="false"/>
<property key="no-system-directories" value="false"/>
<property key="optimization-level" value="-O1"/>
<property key="pack-struct" value="true"/>
<property key="preprocessor-macros" value=""/>
<property key="preprocessor-macros-undefined" value=""/>
<property key="save-temps" value="false"/>
<property key="short-calls" value="false"/>
<property key="short-enums" value="true"/>
<property key="strict-ansi" value="false"/>
<property key="strict-ansi-errors" value="false"/>
<property key="support-ansi" value="false"/>
<property key="syntax-only" value="false"/>
<property key="undefined-identifier" value="false"/>
<property key="verbose" value="false"/>
</AVR-GCC>
<AVR-Global>
<property key="common-include-directories" value=""/>
<property key="eep" value="false"/>
<property key="external-ram-check" value="false"/>
<property key="hex" value="true"/>
<property key="lss" value="false"/>
<property key="omit-pack-options" value="false"/>
<property key="relax-branches" value="false"/>
<property key="srec" value="false"/>
<property key="user-pack-device-support" value=""/>
<property key="user-pack-include" value=""/>
<property key="usersig" value="false"/>
</AVR-Global>
<AVR-LD>
<property key="eeprom-segment" value=""/>
<property key="exclude-standard-libraries" value="false"/>
<property key="extra-lib-directories" value=""/>
<property key="flash-segment" value=""/>
<property key="generate-map-file" value="true"/>
<property key="initial-stack-address" value=""/>
<property key="input-libraries" value="libm"/>
<property key="no-default-libs" value="false"/>
<property key="no-shared-libraries" value="false"/>
<property key="no-startup-files" value="false"/>
<property key="omit-symbol-information" value="false"/>
<property key="other-options" value=""/>
<property key="remove-unused-sections" value="true"/>
<property key="rodata-writable" value="false"/>
<property key="sram-segment" value=""/>
<property key="v-printf" value="false"/>
</AVR-LD>
<pk4hybrid>
<property key="AutoSelectMemRanges" value="auto"/>
<property key="SecureSegment.SegmentProgramming" value="FullChipProgramming"/>
<property key="ToolFirmwareFilePath"
value="Press to browse for a specific firmware version"/>
<property key="ToolFirmwareOption.UpdateOptions"
value="ToolFirmwareOption.UseLatest"/>
<property key="ToolFirmwareToolPack"
value="Press to select which tool pack to use"/>
<property key="communication.activationmode" value="simplepulse"/>
<property key="communication.interface" value="updi"/>
<property key="communication.interface.jtag" value="2wire"/>
<property key="communication.speed" value="0.500"/>
<property key="debugoptions.useswbreakpoints" value="true"/>
<property key="memories.aux" value="false"/>
<property key="memories.bootflash" value="true"/>
<property key="memories.configurationmemory" value="true"/>
<property key="memories.configurationmemory2" value="true"/>
<property key="memories.dataflash" value="true"/>
<property key="memories.eeprom" value="true"/>
<property key="memories.exclude.configurationmemory" value="true"/>
<property key="memories.flashdata" value="true"/>
<property key="memories.id" value="true"/>
<property key="memories.instruction.ram.ranges"
value="${memories.instruction.ram.ranges}"/>
<property key="memories.programmemory" value="true"/>
<property key="memories.programmemory.ranges" value="0-fff"/>
<property key="poweroptions.powerenable" value="false"/>
<property key="programmerToGoImageName" value="default_ptg"/>
<property key="programoptions.donoteraseauxmem" value="false"/>
<property key="programoptions.eraseb4program" value="true"/>
<property key="programoptions.ledbrightness" value="5"/>
<property key="programoptions.pgcconfig" value="pull down"/>
<property key="programoptions.pgcresistor.value" value="4.7"/>
<property key="programoptions.pgdconfig" value="pull down"/>
<property key="programoptions.pgdresistor.value" value="4.7"/>
<property key="programoptions.pgmentry.voltage" value="low"/>
<property key="programoptions.pgmspeed" value="Med"/>
<property key="programoptions.preservedataflash" value="false"/>
<property key="programoptions.preservedataflash.ranges"
value="${memories.dataflash.default}"/>
<property key="programoptions.preserveeeprom" value="false"/>
<property key="programoptions.preserveeeprom.ranges" value="1400-147f"/>
<property key="programoptions.preserveprogram.ranges" value=""/>
<property key="programoptions.preserveprogramrange" value="false"/>
<property key="programoptions.preserveuserid" value="false"/>
<property key="programoptions.programcalmem" value="false"/>
<property key="programoptions.programuserotp" value="false"/>
<property key="programoptions.testmodeentrymethod" value="VDDFirst"/>
<property key="programoptionsedbg.eraseb4program" value="true"/>
<property key="ptgProgramImage" value="true"/>
<property key="ptgSendImage" value="true"/>
<property key="toolpack.updateoptions"
value="toolpack.updateoptions.uselatestoolpack"/>
<property key="toolpack.updateoptions.packversion"
value="Press to select which tool pack to use"/>
<property key="voltagevalue" value="5.0"/>
</pk4hybrid>
</conf>
</confs>
</configurationDescriptor>
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="65">
<projectmakefile>Makefile</projectmakefile>
<defaultConf>0</defaultConf>
<confs>
<conf name="default" type="2">
<platformToolSN>:=MPLABComm-USB-Microchip:=&lt;vid>03EB:=&lt;pid>2177:=&lt;rev>0100:=&lt;man>Microchip Technology Incorporated:=&lt;prod>MPLAB PICkit 4 CMSIS-DAP:=&lt;sn>BUR202272489:=&lt;drv>x:=&lt;xpt>h:=end</platformToolSN>
<languageToolchainDir>C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin</languageToolchainDir>
<mdbdebugger version="1">
<placeholder1>place holder 1</placeholder1>
<placeholder2>place holder 2</placeholder2>
</mdbdebugger>
<runprofile version="6">
<args></args>
<rundir></rundir>
<buildfirst>true</buildfirst>
<console-type>0</console-type>
<terminal-type>0</terminal-type>
<remove-instrumentation>0</remove-instrumentation>
<environment>
</environment>
</runprofile>
</conf>
</confs>
</configurationDescriptor>
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/SolenoidDriver.h</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/main.c</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/debug.h</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/mcc_generated_files/mcc.c</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/SolenoidDriver.c</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/debug.c</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/PlantSystem.h</file>
<file>file:/C:/Users/Sasa/Desktop/git/DIY_PlantSystem_public/Part2_Actuator_board/Firmware/ATTiny814/mcc_generated_files/src/twi0_slave.c</file>
</group>
</open-files>
</project-private>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>com.microchip.mplab.nbide.embedded.makeproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/make-project/1">
<name>ATTiny814_ActuatorBoard</name>
<creation-uuid>7e6ae34b-9441-4596-bad2-8ccf9b9bef89</creation-uuid>
<make-project-type>0</make-project-type>
<c-extensions>c</c-extensions>
<cpp-extensions/>
<header-extensions>h</header-extensions>
<asminc-extensions/>
<sourceEncoding>ISO-8859-1</sourceEncoding>
<make-dep-projects/>
<sourceRootList>
<sourceRootElem>../../../Common/Lib/GaugeCommunication</sourceRootElem>
<sourceRootElem>.</sourceRootElem>
</sourceRootList>
<confList>
<confElem>
<name>default</name>
<type>2</type>
</confElem>
</confList>
<formatting>
<project-formatting-style>false</project-formatting-style>
</formatting>
</data>
</configuration>
</project>
@@ -0,0 +1,300 @@
[OutputJobFile]
Version=1.0
Caption=
Description=
VaultGUID=
ItemGUID=
ItemHRID=
RevisionGUID=
RevisionId=
VaultHRID=
AutoItemHRID=
NextRevId=
FolderGUID=
LifeCycleDefinitionGUID=
RevisionNamingSchemeGUID=
[OutputGroup1]
Name=MFGOutput.OutJob
Description=
TargetOutputMedium=Folder Structure
VariantName=[No Variations]
VariantScope=1
CurrentConfigurationName=
TargetPrinter=Brother MFC-L2720DW
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=0
OutputMedium1=Print Job
OutputMedium1_Type=Printer
OutputMedium1_Printer=
OutputMedium1_PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputMedium2=PDF
OutputMedium2_Type=Publish
OutputMedium3=Folder Structure
OutputMedium3_Type=GeneratedFiles
OutputMedium4=Video
OutputMedium4_Type=Multimedia
OutputType1=Schematic Print
OutputName1=Schematic Prints
OutputCategory1=Documentation
OutputDocumentPath1=[Project Physical Documents]
OutputVariantName1=
OutputEnabled1=0
OutputEnabled1_OutputMedium1=0
OutputEnabled1_OutputMedium2=1
OutputEnabled1_OutputMedium3=0
OutputEnabled1_OutputMedium4=0
OutputDefault1=0
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration1_Name1=OutputConfigurationParameter1
Configuration1_Item1=Record=SchPrintView|ShowNoERC=True|ShowParamSet=True|ShowProbe=True|ShowBlanket=True|NoERCSymbolsToShow="Thin Cross","Thick Cross","Small Cross",Checkbox,Triangle|ShowNote=True|ShowNoteCollapsed=True|ShowOpenEnds=True|ExpandDesignator=True|ExpandNetLabel=False|ExpandPort=False|ExpandSheetNum=False|ExpandDocNum=False|PrintArea=0|PrintAreaRect.X1=0|PrintAreaRect.Y1=0|PrintAreaRect.X2=0|PrintAreaRect.Y2=0|DocumentPath=[Project Physical Documents]
OutputType2=Pick Place
OutputName2=Generates pick and place files
OutputCategory2=Assembly
OutputDocumentPath2=
OutputVariantName2=
OutputEnabled2=1
OutputEnabled2_OutputMedium1=0
OutputEnabled2_OutputMedium2=0
OutputEnabled2_OutputMedium3=1
OutputEnabled2_OutputMedium4=0
OutputDefault2=0
Configuration2_Name1=OutputConfigurationParameter1
Configuration2_Item1=Record=PickPlaceView|Units=Imperial|GenerateCSVFormat=False|GenerateTextFormat=True|ShowUnits=True|Separator=.|ExcludeFilterParam=False|IncludeVariations=False|Filter= |FilterActive=False|Column#1=Name:Designator,Fixed:True,Metric:False,Visible:True,Sort:None,Position:0|Column#2=Name:Comment,Fixed:True,Metric:False,Visible:True,Sort:None,Position:1|Column#3=Name:Layer,Fixed:True,Metric:False,Visible:True,Sort:None,Position:2|Column#4=Name:Footprint,Fixed:True,Metric:False,Visible:True,Sort:None,Position:3|Column#5=Name:Footprint Description,Fixed:True,Metric:False,Visible:False,Sort:None,Position:4|Column#6=Name:Center-X,Fixed:True,Metric:True,Visible:True,Sort:None,Position:5|Column#7=Name:Center-Y,Fixed:True,Metric:True,Visible:True,Sort:None,Position:6|Column#8=Name:Rotation,Fixed:True,Metric:False,Visible:True,Sort:None,Position:7|Column#9=Name:Description,Fixed:True,Metric:False,Visible:True,Sort:None,Position:8|Column#10=Name:ComponentKind,Fixed:True,Metric:False,Visible:False,Sort:None,Position:9|Column#11=Name:Height,Fixed:True,Metric:True,Visible:False,Sort:None,Position:10|Column#12=Name:Ref-X,Fixed:True,Metric:True,Visible:False,Sort:None,Position:11|Column#13=Name:Ref-Y,Fixed:True,Metric:True,Visible:False,Sort:None,Position:12|Column#14=Name:Pad-X,Fixed:True,Metric:True,Visible:False,Sort:None,Position:13|Column#15=Name:Pad-Y,Fixed:True,Metric:True,Visible:False,Sort:None,Position:14|Column#16=Name:Variation,Fixed:True,Metric:False,Visible:False,Sort:None,Position:15|Column#17=Name:Published,Fixed:False,Metric:False,Visible:False,Sort:None,Position:24|Column#18=Name:LatestRevisionDate,Fixed:False,Metric:False,Visible:False,Sort:None,Position:18|Column#19=Name:PackageReference,Fixed:False,Metric:False,Visible:False,Sort:None,Position:23|Column#20=Name:Value,Fixed:False,Metric:False,Visible:False,Sort:None,Position:26|Column#21=Name:Publisher,Fixed:False,Metric:False,Visible:False,Sort:None,Position:25|Column#22=Name:Distributor Part Number,Fixed:False,Metric:False,Visible:False,Sort:None,Position:17|Column#23=Name:PackageDescription,Fixed:False,Metric:False,Visible:False,Sort:None,Position:22|Column#24=Name:LatestRevisionNote,Fixed:False,Metric:False,Visible:False,Sort:None,Position:19|Column#25=Name:Distributor,Fixed:False,Metric:False,Visible:False,Sort:None,Position:16|Column#26=Name:Manufacturer,Fixed:False,Metric:False,Visible:False,Sort:None,Position:20|Column#27=Name:Manufacturer Part Number,Fixed:False,Metric:False,Visible:False,Sort:None,Position:21|DocumentPath=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part1_Sensor_board\Hardware\PlantSensor_V02_PCB.PcbDoc
OutputType3=Assembly
OutputName3=Assembly Drawings
OutputCategory3=Assembly
OutputDocumentPath3=
OutputVariantName3=
OutputEnabled3=0
OutputEnabled3_OutputMedium1=0
OutputEnabled3_OutputMedium2=0
OutputEnabled3_OutputMedium3=0
OutputEnabled3_OutputMedium4=0
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=0|PaperKind=A4|PaperIndex=9
Configuration3_Name1=OutputConfigurationParameter1
Configuration3_Item1=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration3_Name2=OutputConfigurationParameter2
Configuration3_Item2=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Top LayerAssembly Drawing|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=True|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration3_Name3=OutputConfigurationParameter3
Configuration3_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Hidden|FFill=Hidden|FPad=Hidden|FRegion=Hidden|FText=Hidden|FTrack=Hidden|FVia=Hidden|Layer=TopLayer|Polygon=Hidden|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name4=OutputConfigurationParameter4
Configuration3_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name5=OutputConfigurationParameter5
Configuration3_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Hidden|Layer=MultiLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name6=OutputConfigurationParameter6
Configuration3_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name7=OutputConfigurationParameter7
Configuration3_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name8=OutputConfigurationParameter8
Configuration3_Item8=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name9=OutputConfigurationParameter9
Configuration3_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name10=OutputConfigurationParameter10
Configuration3_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name11=OutputConfigurationParameter11
Configuration3_Item11=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=1|Mirror=False|Name=Bottom LayerAssembly Drawing|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=True|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration3_Name12=OutputConfigurationParameter12
Configuration3_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Hidden|FFill=Hidden|FPad=Hidden|FRegion=Hidden|FText=Hidden|FTrack=Hidden|FVia=Hidden|Layer=BottomLayer|Polygon=Hidden|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name13=OutputConfigurationParameter13
Configuration3_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name14=OutputConfigurationParameter14
Configuration3_Item14=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomOverlay|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name15=OutputConfigurationParameter15
Configuration3_Item15=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name16=OutputConfigurationParameter16
Configuration3_Item16=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Hidden|Layer=MultiLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name17=OutputConfigurationParameter17
Configuration3_Item17=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name18=OutputConfigurationParameter18
Configuration3_Item18=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name19=OutputConfigurationParameter19
Configuration3_Item19=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
PcbPrintPreferences3=
OutputType4=Gerber
OutputName4=Gerber Files
OutputCategory4=Fabrication
OutputDocumentPath4=
OutputVariantName4=
OutputEnabled4=1
OutputEnabled4_OutputMedium1=0
OutputEnabled4_OutputMedium2=0
OutputEnabled4_OutputMedium3=2
OutputEnabled4_OutputMedium4=0
OutputDefault4=0
Configuration4_Name1=OutputConfigurationParameter1
Configuration4_Item1=AddToAllLayerClasses.Set= |AddToAllPlots.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|CentrePlots=False|DrillDrawingSymbol=GraphicsSymbol|DrillDrawingSymbolSize=200000|EmbeddedApertures=True|FilmBorderSize=10000000|FilmXSize=200000000|FilmYSize=160000000|FlashAllFills=False|FlashPadShapes=True|G54OnApertureChange=False|GenerateDRCRulesFile=True|GenerateDRCRulesFile=True|GenerateReliefShapes=True|GerberUnit=Imperial|GerberUnit=Imperial|IncludeUnconnectedMidLayerPads=False|LayerClassesMirror.Set= |LayerClassesPlot.Set= |LeadingAndTrailingZeroesMode=SuppressLeadingZeroes|MaxApertureSize=2500000|MinusApertureTolerance=50|MinusApertureTolerance=50|Mirror.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|MirrorDrillDrawingPlots=False|MirrorDrillGuidePlots=False|NoRegularPolygons=False|NumberOfDecimals=5|NumberOfDecimals=5|OptimizeChangeLocationCommands=True|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Panelize=False|Plot.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16973830~1,16973832~1,16973834~1,16777217~1,16777218~1,16777219~1,16842751~1,16973835~1,16973833~1,16973831~1,16973837~1|PlotPositivePlaneLayers=False|PlotUsedDrillDrawingLayerPairs=True|PlotUsedDrillGuideLayerPairs=True|PlusApertureTolerance=50|PlusApertureTolerance=50|Record=GerberView|SoftwareArcs=False|Sorted=False|Sorted=False|DocumentPath=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part1_Sensor_board\Hardware\PlantSensor_V02_PCB.PcbDoc
OutputType5=NC Drill
OutputName5=NC Drill Files
OutputCategory5=Fabrication
OutputDocumentPath5=
OutputVariantName5=
OutputEnabled5=1
OutputEnabled5_OutputMedium1=0
OutputEnabled5_OutputMedium2=0
OutputEnabled5_OutputMedium3=3
OutputEnabled5_OutputMedium4=0
OutputDefault5=0
Configuration5_Name1=OutputConfigurationParameter1
Configuration5_Item1=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes|DocumentPath=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part1_Sensor_board\Hardware\PlantSensor_V02_PCB.PcbDoc
OutputType6=Drill
OutputName6=Drill Drawing/Guides
OutputCategory6=Fabrication
OutputDocumentPath6=
OutputVariantName6=
OutputEnabled6=0
OutputEnabled6_OutputMedium1=0
OutputEnabled6_OutputMedium2=0
OutputEnabled6_OutputMedium3=0
OutputEnabled6_OutputMedium4=0
OutputDefault6=0
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=0|PaperKind=A4|PaperIndex=9
Configuration6_Name1=OutputConfigurationParameter1
Configuration6_Item1=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration6_Name2=OutputConfigurationParameter2
Configuration6_Item2=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Drill Drawing For (Bottom Layer,Top Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration6_Name3=OutputConfigurationParameter3
Configuration6_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=BottomLayer|DLayer2=TopLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name4=OutputConfigurationParameter4
Configuration6_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name5=OutputConfigurationParameter5
Configuration6_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name6=OutputConfigurationParameter6
Configuration6_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name7=OutputConfigurationParameter7
Configuration6_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name8=OutputConfigurationParameter8
Configuration6_Item8=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=1|Mirror=False|Name=Drill Guide For (Bottom Layer,Top Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration6_Name9=OutputConfigurationParameter9
Configuration6_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=BottomLayer|DLayer2=TopLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillGuide|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name10=OutputConfigurationParameter10
Configuration6_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name11=OutputConfigurationParameter11
Configuration6_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name12=OutputConfigurationParameter12
Configuration6_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name13=OutputConfigurationParameter13
Configuration6_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
PcbPrintPreferences6=
OutputType7=BOM_PartType
OutputName7=Bill of Materials
OutputCategory7=Report
OutputDocumentPath7=
OutputVariantName7=
OutputEnabled7=1
OutputEnabled7_OutputMedium1=0
OutputEnabled7_OutputMedium2=0
OutputEnabled7_OutputMedium3=4
OutputEnabled7_OutputMedium4=0
OutputDefault7=0
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration7_Name1=ColumnNameFormat
Configuration7_Item1=CaptionAsName
Configuration7_Name2=Filter
Configuration7_Item2=545046300E5446696C74657257726170706572000D46696C7465722E416374697665090F46696C7465722E43726974657269610A04000000000000000000
Configuration7_Name3=General
Configuration7_Item3=OpenExported=False|AddToProject=False|ForceFit=False|NotFitted=False|Database=False|DatabasePriority=False|IncludePCBData=False|IncludeVaultData=False|IncludeAlternatives=False|ShowExportOptions=True|TemplateFilename=|BatchMode=5|FormWidth=1732|FormHeight=1296|SupplierProdQty=1|SupplierAutoQty=False|SupplierUseCachedPricing=False|SupplierCurrency=<none>
Configuration7_Name4=GroupOrder
Configuration7_Item4=Manufacturer Part Number=True
Configuration7_Name5=OutputConfigurationParameter1
Configuration7_Item5=dgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes|DocumentPath=[Project]
Configuration7_Name6=SortOrder
Configuration7_Item6=Designator=Up|Comment=Up|Footprint=Up
Configuration7_Name7=VisibleOrder
Configuration7_Item7=Designator=175|Description=175|Distributor=175|Distributor Part Number=175|Manufacturer=175|Manufacturer Part Number=175|Quantity=177
[PublishSettings]
OutputFilePath2=Project Outputs for Free Documents\.PDF
ReleaseManaged2=1
OutputBasePath2=Project Outputs for SolenoidValveDriver_v01
OutputPathMedia2=
OutputPathMediaValue2=
OutputPathOutputer2=[Output Type]
OutputPathOutputerPrefix2=
OutputPathOutputerValue2=
OutputFileName2=MFGOutput.PDF
OutputFileNameMulti2=
UseOutputNameForMulti2=1
OutputFileNameSpecial2=
OpenOutput2=1
PromptOverwrite2=1
PublishMethod2=0
ZoomLevel2=50
FitSCHPrintSizeToDoc2=1
FitPCBPrintSizeToDoc2=1
GenerateNetsInfo2=1
MarkPins2=1
MarkNetLabels2=1
MarkPortsId2=1
GenerateTOC2=1
ShowComponentParameters2=1
GlobalBookmarks2=0
PDFACompliance2=Disabled
PDFVersion2=Default
OutputFilePath3=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Actuator_and_Central_board\Actuator_board\Hardware\Project Outputs for SolenoidValveDriver_v01\
ReleaseManaged3=1
OutputBasePath3=Project Outputs for SolenoidValveDriver_v01
OutputPathMedia3=
OutputPathMediaValue3=
OutputPathOutputer3=[Output Type]
OutputPathOutputerPrefix3=
OutputPathOutputerValue3=
OutputFileName3=
OutputFileNameMulti3=
UseOutputNameForMulti3=1
OutputFileNameSpecial3=
OpenOutput3=0
OutputFilePath4=
ReleaseManaged4=1
OutputBasePath4=Project Outputs for SolenoidValveDriver_v01
OutputPathMedia4=
OutputPathMediaValue4=
OutputPathOutputer4=[Output Type]
OutputPathOutputerPrefix4=
OutputPathOutputerValue4=
OutputFileName4=
OutputFileNameMulti4=
UseOutputNameForMulti4=1
OutputFileNameSpecial4=
OpenOutput4=1
PromptOverwrite4=1
PublishMethod4=5
ZoomLevel4=50
FitSCHPrintSizeToDoc4=1
FitPCBPrintSizeToDoc4=1
GenerateNetsInfo4=1
MarkPins4=1
MarkNetLabels4=1
MarkPortsId4=1
MediaFormat4=Windows Media file (*.wmv,*.wma,*.asf)
FixedDimensions4=1
Width4=352
Height4=288
MultiFile4=0
FramesPerSecond4=25
FramesPerSecondDenom4=1
AviPixelFormat4=7
AviCompression4=MP42 MS-MPEG4 V2
AviQuality4=100
FFmpegVideoCodecId4=13
FFmpegPixelFormat4=0
FFmpegQuality4=80
WmvVideoCodecName4=Windows Media Video V7
WmvQuality4=80
[GeneratedFilesSettings]
RelativeOutputPath2=Project Outputs for Free Documents\.PDF
OpenOutputs2=1
RelativeOutputPath3=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Actuator_and_Central_board\Actuator_board\Hardware\Project Outputs for SolenoidValveDriver_v01\
OpenOutputs3=0
AddToProject3=0
TimestampFolder3=0
UseOutputName3=0
OpenODBOutput3=0
OpenGerberOutput3=0
OpenNCDrillOutput3=0
OpenIPCOutput3=0
EnableReload3=0
RelativeOutputPath4=
OpenOutputs4=1
@@ -0,0 +1,20 @@
------------------------------------------------------------------------------------------
Gerber File Extension Report For: SolenoidValveDriver_v01_PCB.GBR 2021-05-27 22:55:17
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
Layer Extension Layer Description
------------------------------------------------------------------------------------------
.GTO Top Overlay
.GTP Top Paste
.GTS Top Solder
.GTL Top Layer
.GBL Bottom Layer
.GBS Bottom Solder
.GBP Bottom Paste
.GBO Bottom Overlay
.GKO Keep-Out Layer
.GD1 Drill Drawing
.GG1 Drill Guide
------------------------------------------------------------------------------------------
@@ -0,0 +1,735 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Physical_Order=2*
G04 Layer_Color=16711680*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Positive*
G04*
G01*
G75*
%ADD11C,0.02362*%
%ADD37O,0.07874X0.05906*%
%ADD38R,0.07874X0.05906*%
%ADD39C,0.14567*%
%ADD40R,0.05906X0.07874*%
%ADD41O,0.05906X0.07874*%
%ADD42C,0.03150*%
G36*
X57087Y-813D02*
X58807Y-948D01*
X60485Y-1351D01*
X62080Y-2012D01*
X63551Y-2913D01*
X64863Y-4034D01*
X65984Y-5347D01*
X66886Y-6818D01*
X67546Y-8412D01*
X67949Y-10091D01*
X68085Y-11811D01*
X68085D01*
Y-98425D01*
X68085D01*
X67949Y-100146D01*
X67546Y-101824D01*
X66886Y-103418D01*
X65984Y-104890D01*
X64863Y-106202D01*
X63551Y-107323D01*
X62080Y-108224D01*
X60485Y-108885D01*
X58807Y-109288D01*
X57087Y-109423D01*
Y-109424D01*
X-57087D01*
Y-109423D01*
X-58807Y-109288D01*
X-60485Y-108885D01*
X-62080Y-108225D01*
X-63551Y-107323D01*
X-64863Y-106202D01*
X-65984Y-104890D01*
X-66886Y-103418D01*
X-67546Y-101824D01*
X-67949Y-100146D01*
X-68085Y-98425D01*
X-68085D01*
Y-11811D01*
X-68085D01*
X-67949Y-10091D01*
X-67546Y-8412D01*
X-66886Y-6818D01*
X-65984Y-5347D01*
X-64863Y-4034D01*
X-63551Y-2913D01*
X-62080Y-2012D01*
X-60485Y-1351D01*
X-58807Y-948D01*
X-57087Y-813D01*
Y-812D01*
X57087D01*
Y-813D01*
D02*
G37*
%LPC*%
G36*
X8553Y-7963D02*
X1447D01*
Y-17037D01*
X8553D01*
Y-7963D01*
D02*
G37*
G36*
X-5000Y-7932D02*
X-5928Y-8054D01*
X-6792Y-8412D01*
X-7534Y-8982D01*
X-8103Y-9724D01*
X-8461Y-10588D01*
X-8583Y-11516D01*
Y-13484D01*
X-8461Y-14412D01*
X-8103Y-15276D01*
X-7534Y-16018D01*
X-6792Y-16588D01*
X-5928Y-16946D01*
X-5000Y-17068D01*
X-4073Y-16946D01*
X-3208Y-16588D01*
X-2466Y-16018D01*
X-1897Y-15276D01*
X-1539Y-14412D01*
X-1417Y-13484D01*
Y-11516D01*
X-1539Y-10588D01*
X-1897Y-9724D01*
X-2466Y-8982D01*
X-3208Y-8412D01*
X-4073Y-8054D01*
X-5000Y-7932D01*
D02*
G37*
G36*
X-51181Y-3889D02*
X-52727Y-4042D01*
X-54213Y-4492D01*
X-55582Y-5224D01*
X-56783Y-6210D01*
X-57768Y-7410D01*
X-58500Y-8780D01*
X-58951Y-10266D01*
X-59103Y-11811D01*
X-58951Y-13356D01*
X-58500Y-14842D01*
X-57768Y-16212D01*
X-56783Y-17412D01*
X-55582Y-18398D01*
X-54213Y-19130D01*
X-52727Y-19580D01*
X-51181Y-19733D01*
X-49636Y-19580D01*
X-48150Y-19130D01*
X-46780Y-18398D01*
X-45580Y-17412D01*
X-44594Y-16212D01*
X-43863Y-14842D01*
X-43412Y-13356D01*
X-43260Y-11811D01*
X-43412Y-10266D01*
X-43863Y-8780D01*
X-44594Y-7410D01*
X-45580Y-6210D01*
X-46780Y-5224D01*
X-48150Y-4492D01*
X-49636Y-4042D01*
X-51181Y-3889D01*
D02*
G37*
G36*
X63592Y-26947D02*
X54518D01*
Y-34053D01*
X63592D01*
Y-26947D01*
D02*
G37*
G36*
X-54518D02*
X-63592D01*
Y-34053D01*
X-54518D01*
Y-26947D01*
D02*
G37*
G36*
X60039Y-36917D02*
X58071D01*
X57143Y-37039D01*
X56279Y-37397D01*
X55537Y-37966D01*
X54967Y-38708D01*
X54610Y-39573D01*
X54488Y-40500D01*
X54610Y-41427D01*
X54967Y-42292D01*
X55537Y-43034D01*
X56279Y-43603D01*
X57143Y-43961D01*
X58071Y-44083D01*
X60039D01*
X60967Y-43961D01*
X61831Y-43603D01*
X62573Y-43034D01*
X63143Y-42292D01*
X63501Y-41427D01*
X63623Y-40500D01*
X63501Y-39573D01*
X63143Y-38708D01*
X62573Y-37966D01*
X61831Y-37397D01*
X60967Y-37039D01*
X60039Y-36917D01*
D02*
G37*
G36*
X-58071D02*
X-60039D01*
X-60967Y-37039D01*
X-61831Y-37397D01*
X-62573Y-37966D01*
X-63143Y-38708D01*
X-63501Y-39573D01*
X-63623Y-40500D01*
X-63501Y-41427D01*
X-63143Y-42292D01*
X-62573Y-43034D01*
X-61831Y-43603D01*
X-60967Y-43961D01*
X-60039Y-44083D01*
X-58071D01*
X-57143Y-43961D01*
X-56279Y-43603D01*
X-55537Y-43034D01*
X-54967Y-42292D01*
X-54610Y-41427D01*
X-54488Y-40500D01*
X-54610Y-39573D01*
X-54967Y-38708D01*
X-55537Y-37966D01*
X-56279Y-37397D01*
X-57143Y-37039D01*
X-58071Y-36917D01*
D02*
G37*
G36*
X25500Y-37283D02*
X24651Y-37451D01*
X23932Y-37932D01*
X23451Y-38651D01*
X23283Y-39500D01*
X23451Y-40349D01*
X23684Y-40697D01*
Y-46803D01*
X23451Y-47151D01*
X23283Y-48000D01*
X23451Y-48849D01*
X23932Y-49568D01*
X24651Y-50049D01*
X25500Y-50217D01*
X26349Y-50049D01*
X27068Y-49568D01*
X27549Y-48849D01*
X27717Y-48000D01*
X27549Y-47151D01*
X27316Y-46803D01*
Y-40697D01*
X27549Y-40349D01*
X27717Y-39500D01*
X27549Y-38651D01*
X27068Y-37932D01*
X26349Y-37451D01*
X25500Y-37283D01*
D02*
G37*
G36*
X60039Y-46917D02*
X58071D01*
X57143Y-47039D01*
X56279Y-47397D01*
X55537Y-47966D01*
X54967Y-48708D01*
X54610Y-49573D01*
X54488Y-50500D01*
X54610Y-51427D01*
X54967Y-52292D01*
X55537Y-53034D01*
X56279Y-53603D01*
X57143Y-53961D01*
X58071Y-54083D01*
X60039D01*
X60967Y-53961D01*
X61831Y-53603D01*
X62573Y-53034D01*
X63143Y-52292D01*
X63501Y-51427D01*
X63623Y-50500D01*
X63501Y-49573D01*
X63143Y-48708D01*
X62573Y-47966D01*
X61831Y-47397D01*
X60967Y-47039D01*
X60039Y-46917D01*
D02*
G37*
G36*
X-58071D02*
X-60039D01*
X-60967Y-47039D01*
X-61831Y-47397D01*
X-62573Y-47966D01*
X-63143Y-48708D01*
X-63501Y-49573D01*
X-63623Y-50500D01*
X-63501Y-51427D01*
X-63143Y-52292D01*
X-62573Y-53034D01*
X-61831Y-53603D01*
X-60967Y-53961D01*
X-60039Y-54083D01*
X-58071D01*
X-57143Y-53961D01*
X-56279Y-53603D01*
X-55537Y-53034D01*
X-54967Y-52292D01*
X-54610Y-51427D01*
X-54488Y-50500D01*
X-54610Y-49573D01*
X-54967Y-48708D01*
X-55537Y-47966D01*
X-56279Y-47397D01*
X-57143Y-47039D01*
X-58071Y-46917D01*
D02*
G37*
G36*
X-16000Y-40783D02*
X-16849Y-40951D01*
X-17568Y-41432D01*
X-18049Y-42151D01*
X-18217Y-43000D01*
X-18049Y-43849D01*
X-17816Y-44197D01*
Y-56303D01*
X-18049Y-56651D01*
X-18217Y-57500D01*
X-18049Y-58349D01*
X-17568Y-59068D01*
X-16849Y-59549D01*
X-16000Y-59717D01*
X-15151Y-59549D01*
X-14432Y-59068D01*
X-13951Y-58349D01*
X-13783Y-57500D01*
X-13951Y-56651D01*
X-14184Y-56303D01*
Y-44197D01*
X-13951Y-43849D01*
X-13783Y-43000D01*
X-13951Y-42151D01*
X-14432Y-41432D01*
X-15151Y-40951D01*
X-16000Y-40783D01*
D02*
G37*
G36*
X60039Y-56917D02*
X58071D01*
X57143Y-57039D01*
X56279Y-57397D01*
X55537Y-57966D01*
X54967Y-58708D01*
X54610Y-59573D01*
X54488Y-60500D01*
X54610Y-61427D01*
X54967Y-62292D01*
X55537Y-63034D01*
X56279Y-63603D01*
X57143Y-63961D01*
X58071Y-64083D01*
X60039D01*
X60967Y-63961D01*
X61831Y-63603D01*
X62573Y-63034D01*
X63143Y-62292D01*
X63501Y-61427D01*
X63623Y-60500D01*
X63501Y-59573D01*
X63143Y-58708D01*
X62573Y-57966D01*
X61831Y-57397D01*
X60967Y-57039D01*
X60039Y-56917D01*
D02*
G37*
G36*
X-58071D02*
X-60039D01*
X-60967Y-57039D01*
X-61831Y-57397D01*
X-62573Y-57966D01*
X-63143Y-58708D01*
X-63501Y-59573D01*
X-63623Y-60500D01*
X-63501Y-61427D01*
X-63143Y-62292D01*
X-62573Y-63034D01*
X-61831Y-63603D01*
X-60967Y-63961D01*
X-60039Y-64083D01*
X-58071D01*
X-57143Y-63961D01*
X-56279Y-63603D01*
X-55537Y-63034D01*
X-54967Y-62292D01*
X-54610Y-61427D01*
X-54488Y-60500D01*
X-54610Y-59573D01*
X-54967Y-58708D01*
X-55537Y-57966D01*
X-56279Y-57397D01*
X-57143Y-57039D01*
X-58071Y-56917D01*
D02*
G37*
G36*
X60039Y-66330D02*
Y-69516D01*
X64079D01*
X64067Y-69421D01*
X63650Y-68415D01*
X62988Y-67552D01*
X62124Y-66889D01*
X61119Y-66473D01*
X60039Y-66330D01*
D02*
G37*
G36*
X-58071D02*
Y-69516D01*
X-54031D01*
X-54043Y-69421D01*
X-54460Y-68415D01*
X-55123Y-67552D01*
X-55986Y-66889D01*
X-56992Y-66473D01*
X-58071Y-66330D01*
D02*
G37*
G36*
X58071D02*
X58071D01*
X56992Y-66473D01*
X55986Y-66889D01*
X55123Y-67552D01*
X54460Y-68415D01*
X54043Y-69421D01*
X54031Y-69516D01*
X58071D01*
Y-66330D01*
D02*
G37*
G36*
X-60039D02*
X-60039D01*
X-61119Y-66473D01*
X-62124Y-66889D01*
X-62988Y-67552D01*
X-63650Y-68415D01*
X-64067Y-69421D01*
X-64079Y-69516D01*
X-60039D01*
Y-66330D01*
D02*
G37*
G36*
X64079Y-71484D02*
X60039D01*
Y-74669D01*
X61119Y-74527D01*
X62124Y-74111D01*
X62988Y-73448D01*
X63650Y-72585D01*
X64067Y-71579D01*
X64079Y-71484D01*
D02*
G37*
G36*
X-54031D02*
X-58071D01*
Y-74669D01*
X-56992Y-74527D01*
X-55986Y-74111D01*
X-55123Y-73448D01*
X-54460Y-72585D01*
X-54043Y-71579D01*
X-54031Y-71484D01*
D02*
G37*
G36*
X58071D02*
X54031D01*
X54043Y-71579D01*
X54460Y-72585D01*
X55123Y-73448D01*
X55986Y-74111D01*
X56992Y-74527D01*
X58071Y-74669D01*
X58071D01*
Y-71484D01*
D02*
G37*
G36*
X-60039D02*
X-64079D01*
X-64067Y-71579D01*
X-63650Y-72585D01*
X-62988Y-73448D01*
X-62124Y-74111D01*
X-61119Y-74527D01*
X-60039Y-74669D01*
X-60039D01*
Y-71484D01*
D02*
G37*
G36*
X15984Y-96476D02*
Y-100516D01*
X19170D01*
Y-100516D01*
X19027Y-99437D01*
X18611Y-98431D01*
X17948Y-97567D01*
X17085Y-96905D01*
X16079Y-96488D01*
X15984Y-96476D01*
D02*
G37*
G36*
X14016D02*
X13921Y-96488D01*
X12915Y-96905D01*
X12052Y-97567D01*
X11389Y-98431D01*
X10972Y-99437D01*
X10830Y-100516D01*
Y-100516D01*
X14016D01*
Y-96476D01*
D02*
G37*
G36*
X-11447Y-96963D02*
X-18553D01*
Y-106037D01*
X-11447D01*
Y-96963D01*
D02*
G37*
G36*
X5000Y-96932D02*
X4073Y-97054D01*
X3208Y-97412D01*
X2466Y-97982D01*
X1897Y-98724D01*
X1539Y-99588D01*
X1417Y-100516D01*
Y-102484D01*
X1539Y-103412D01*
X1897Y-104276D01*
X2466Y-105018D01*
X3208Y-105588D01*
X4073Y-105946D01*
X5000Y-106068D01*
X5928Y-105946D01*
X6792Y-105588D01*
X7534Y-105018D01*
X8103Y-104276D01*
X8461Y-103412D01*
X8583Y-102484D01*
Y-100516D01*
X8461Y-99588D01*
X8103Y-98724D01*
X7534Y-97982D01*
X6792Y-97412D01*
X5928Y-97054D01*
X5000Y-96932D01*
D02*
G37*
G36*
X-5000D02*
X-5928Y-97054D01*
X-6792Y-97412D01*
X-7534Y-97982D01*
X-8103Y-98724D01*
X-8461Y-99588D01*
X-8583Y-100516D01*
Y-102484D01*
X-8461Y-103412D01*
X-8103Y-104276D01*
X-7534Y-105018D01*
X-6792Y-105588D01*
X-5928Y-105946D01*
X-5000Y-106068D01*
X-4073Y-105946D01*
X-3208Y-105588D01*
X-2466Y-105018D01*
X-1897Y-104276D01*
X-1539Y-103412D01*
X-1417Y-102484D01*
Y-100516D01*
X-1539Y-99588D01*
X-1897Y-98724D01*
X-2466Y-97982D01*
X-3208Y-97412D01*
X-4073Y-97054D01*
X-5000Y-96932D01*
D02*
G37*
G36*
X51181Y-90504D02*
X49636Y-90656D01*
X48150Y-91107D01*
X46780Y-91839D01*
X45580Y-92824D01*
X44594Y-94024D01*
X43863Y-95394D01*
X43412Y-96880D01*
X43260Y-98425D01*
X43412Y-99971D01*
X43863Y-101457D01*
X44594Y-102826D01*
X45580Y-104027D01*
X46780Y-105012D01*
X48150Y-105744D01*
X49636Y-106195D01*
X51181Y-106347D01*
X52727Y-106195D01*
X54213Y-105744D01*
X55582Y-105012D01*
X56783Y-104027D01*
X57768Y-102826D01*
X58500Y-101457D01*
X58951Y-99971D01*
X59103Y-98425D01*
X58951Y-96880D01*
X58500Y-95394D01*
X57768Y-94024D01*
X56783Y-92824D01*
X55582Y-91839D01*
X54213Y-91107D01*
X52727Y-90656D01*
X51181Y-90504D01*
D02*
G37*
G36*
X19170Y-102484D02*
X15984D01*
Y-106524D01*
X16079Y-106512D01*
X17085Y-106095D01*
X17948Y-105433D01*
X18611Y-104569D01*
X19027Y-103563D01*
X19170Y-102484D01*
Y-102484D01*
D02*
G37*
G36*
X14016D02*
X10830D01*
Y-102484D01*
X10972Y-103563D01*
X11389Y-104569D01*
X12052Y-105433D01*
X12915Y-106095D01*
X13921Y-106512D01*
X14016Y-106524D01*
Y-102484D01*
D02*
G37*
%LPD*%
D11*
X25500Y-48000D02*
Y-39500D01*
X-16000Y-57500D02*
Y-43000D01*
D37*
X59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
X-59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
D38*
X59055Y-30500D02*
D03*
X-59055D02*
D03*
D39*
X51181Y-98425D02*
D03*
X-51181Y-11811D02*
D03*
D40*
X-15000Y-101500D02*
D03*
X5000Y-12500D02*
D03*
D41*
X-5000Y-101500D02*
D03*
X5000D02*
D03*
X15000D02*
D03*
X-5000Y-12500D02*
D03*
D42*
X25500Y-39500D02*
D03*
X9000Y-34413D02*
D03*
X-16000Y-57500D02*
D03*
Y-43000D02*
D03*
X25500Y-48000D02*
D03*
X15500Y-57500D02*
D03*
X-27000Y-70000D02*
D03*
X33492Y-35500D02*
D03*
X-41787Y-35750D02*
D03*
X30500Y-12500D02*
D03*
M02*
@@ -0,0 +1,16 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Color=128*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Positive*
G04*
G01*
G75*
M02*
@@ -0,0 +1,62 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Negative*
G04*
G01*
G75*
%ADD28O,0.08674X0.06706*%
%ADD29R,0.08674X0.06706*%
%ADD30C,0.15367*%
%ADD31R,0.06706X0.08674*%
%ADD32O,0.06706X0.08674*%
D28*
X59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
X-59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
D29*
X59055Y-30500D02*
D03*
X-59055D02*
D03*
D30*
X51181Y-98425D02*
D03*
X-51181Y-11811D02*
D03*
D31*
X-15000Y-101500D02*
D03*
X5000Y-12500D02*
D03*
D32*
X-5000Y-101500D02*
D03*
X5000D02*
D03*
X15000D02*
D03*
X-5000Y-12500D02*
D03*
M02*
@@ -0,0 +1,130 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Color=128*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Positive*
G04*
G01*
G75*
%ADD46C,0.00200*%
D46*
X57284Y-70500D02*
X60827D01*
X59055Y-72272D02*
Y-68728D01*
X57284Y-60500D02*
X60827D01*
X59055Y-62272D02*
Y-58728D01*
X57284Y-50500D02*
X60827D01*
X59055Y-52272D02*
Y-48728D01*
X57284Y-40500D02*
X60827D01*
X59055Y-42272D02*
Y-38728D01*
X57284Y-30500D02*
X60827D01*
X59055Y-32272D02*
Y-28728D01*
X44291Y-98425D02*
X58071D01*
X51181Y-105315D02*
Y-91535D01*
X-58071Y-11811D02*
X-44291D01*
X-51181Y-18701D02*
Y-4921D01*
X-60827Y-70500D02*
X-57284D01*
X-59055Y-72272D02*
Y-68728D01*
X-60827Y-60500D02*
X-57284D01*
X-59055Y-62272D02*
Y-58728D01*
X-60827Y-50500D02*
X-57284D01*
X-59055Y-52272D02*
Y-48728D01*
X-60827Y-40500D02*
X-57284D01*
X-59055Y-42272D02*
Y-38728D01*
X-60827Y-30500D02*
X-57284D01*
X-59055Y-32272D02*
Y-28728D01*
X-16772Y-101500D02*
X-13228D01*
X-15000Y-103272D02*
Y-99728D01*
X-6772Y-101500D02*
X-3228D01*
X-5000Y-103272D02*
Y-99728D01*
X3228Y-101500D02*
X6772D01*
X5000Y-103272D02*
Y-99728D01*
X13228Y-101500D02*
X16772D01*
X15000Y-103272D02*
Y-99728D01*
X-6772Y-12500D02*
X-3228D01*
X-5000Y-14272D02*
Y-10728D01*
X3228Y-12500D02*
X6772D01*
X5000Y-14272D02*
Y-10728D01*
X24713Y-39500D02*
X26287D01*
X25500Y-40287D02*
Y-38713D01*
X8213Y-34413D02*
X9787D01*
X9000Y-35201D02*
Y-33626D01*
X-16787Y-57500D02*
X-15213D01*
X-16000Y-58287D02*
Y-56713D01*
X-16787Y-43000D02*
X-15213D01*
X-16000Y-43787D02*
Y-42213D01*
X24713Y-48000D02*
X26287D01*
X25500Y-48787D02*
Y-47213D01*
X14713Y-57500D02*
X16287D01*
X15500Y-58287D02*
Y-56713D01*
X-27787Y-70000D02*
X-26213D01*
X-27000Y-70787D02*
Y-69213D01*
X32705Y-35500D02*
X34280D01*
X33492Y-36287D02*
Y-34713D01*
X-42575Y-35750D02*
X-41000D01*
X-41787Y-36537D02*
Y-34963D01*
X29713Y-12500D02*
X31287D01*
X30500Y-13287D02*
Y-11713D01*
M02*
@@ -0,0 +1,42 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Positive*
G04*
G01*
G75*
%ADD44C,0.00394*%
D44*
X-57087Y0D02*
G03*
X-68898Y-11811I0J-11811D01*
G01*
Y-98425D02*
G03*
X-57087Y-110236I11811J0D01*
G01*
X57087Y-110236D02*
G03*
X68898Y-98425I0J11811D01*
G01*
Y-11811D02*
G03*
X57087Y0I-11811J0D01*
G01*
X-68898Y-98425D02*
Y-11811D01*
X-57087Y-110236D02*
X57087D01*
X-57087Y-0D02*
X57087D01*
X68898Y-98425D02*
Y-11811D01*
M02*
@@ -0,0 +1,441 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Physical_Order=1*
G04 Layer_Color=255*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Positive*
G04*
G01*
G75*
%ADD11C,0.02362*%
%ADD16R,0.02756X0.03543*%
%ADD17R,0.05906X0.05906*%
%ADD18R,0.03543X0.03150*%
%ADD19R,0.06102X0.02362*%
%ADD20R,0.03347X0.03740*%
%ADD21R,0.03543X0.02756*%
%ADD33C,0.01181*%
%ADD34C,0.03150*%
%ADD35C,0.01968*%
%ADD36C,0.01575*%
%ADD37O,0.07874X0.05906*%
%ADD38R,0.07874X0.05906*%
%ADD39C,0.14567*%
%ADD40R,0.05906X0.07874*%
%ADD41O,0.05906X0.07874*%
%ADD42C,0.03150*%
D11*
X3937Y-34957D02*
X8457D01*
X9000Y-34413D01*
X5000Y-12500D02*
Y-6500D01*
X3000Y-4500D02*
X5000Y-6500D01*
X-9500Y-4500D02*
X3000D01*
X-29000Y-24000D02*
X-9500Y-4500D01*
X-46000Y-24000D02*
X-29000D01*
X-48008Y-26008D02*
X-46000Y-24000D01*
X-48008Y-30500D02*
Y-26008D01*
X20000Y-19500D02*
X34500D01*
X9000D02*
X20000D01*
X19890Y-19390D02*
X20000Y-19500D01*
X19890Y-19390D02*
Y-12500D01*
X34500Y-19500D02*
X39713Y-24713D01*
Y-30500D02*
Y-24713D01*
X39713Y-50500D02*
X59055D01*
X33500Y-45500D02*
X38500D01*
X30000D02*
X33500D01*
X33492Y-45508D02*
X33500Y-45500D01*
X33492Y-50500D02*
Y-45508D01*
X-16000Y-57500D02*
X-10630D01*
X-20787D02*
X-16000D01*
Y-43000D02*
X-5500D01*
X-35500D02*
X-16000D01*
X39713Y-44287D02*
Y-40500D01*
X38500Y-45500D02*
X39713Y-44287D01*
X28000Y-43500D02*
X30000Y-45500D01*
X16500Y-43500D02*
X28000D01*
X11500Y-48500D02*
X16500Y-43500D01*
X19390Y-57500D02*
X19500Y-57610D01*
X10630Y-57500D02*
X19390D01*
X0Y-48500D02*
X11500D01*
X-5500Y-43000D02*
X0Y-48500D01*
X-39000Y-46500D02*
X-35500Y-43000D01*
X-47000Y-46500D02*
X-39000D01*
X-48008Y-45492D02*
X-47000Y-46500D01*
X-48008Y-45492D02*
Y-41000D01*
X33492Y-50500D02*
X33492Y-50500D01*
X33492Y-60500D02*
Y-50500D01*
X-27000Y-70000D02*
Y-57508D01*
X-27008Y-57500D02*
X-27000Y-57508D01*
X33492Y-35500D02*
Y-30500D01*
Y-40500D02*
Y-35500D01*
X-41787Y-35750D02*
Y-30500D01*
Y-41000D02*
Y-35750D01*
X26110Y-12500D02*
X30500D01*
X59055Y-30500D02*
X59055Y-30500D01*
X39713Y-30500D02*
X59055D01*
X39713Y-30500D02*
X39713Y-30500D01*
Y-40500D02*
X59055D01*
X39713Y-40500D02*
X39713Y-40500D01*
X59055D02*
X59055Y-40500D01*
X39713Y-60500D02*
X59055D01*
X-59055Y-30500D02*
X-48008D01*
Y-41000D02*
Y-40947D01*
X-58805Y-40750D02*
X-48205D01*
X-59055Y-40500D02*
X-58805Y-40750D01*
X-48205D02*
X-48008Y-40947D01*
X-20787Y-64000D02*
Y-57500D01*
X-27008Y-64000D02*
Y-57500D01*
D16*
X-48008Y-30500D02*
D03*
X-41787D02*
D03*
X-48008Y-41000D02*
D03*
X-41787D02*
D03*
X46110Y-81500D02*
D03*
X39890D02*
D03*
X39713Y-60500D02*
D03*
X33492D02*
D03*
X39713Y-50500D02*
D03*
X33492D02*
D03*
Y-40500D02*
D03*
X39713D02*
D03*
X33492Y-30500D02*
D03*
X39713D02*
D03*
X26110Y-12500D02*
D03*
X19890D02*
D03*
X-27008Y-57500D02*
D03*
X-20787D02*
D03*
X-27008Y-64000D02*
D03*
X-20787D02*
D03*
D17*
X9000Y-26500D02*
D03*
X-9000D02*
D03*
D18*
X3937Y-42043D02*
D03*
Y-34957D02*
D03*
X-3937Y-38500D02*
D03*
D19*
X-10630Y-57500D02*
D03*
Y-62500D02*
D03*
Y-67500D02*
D03*
Y-72500D02*
D03*
Y-77500D02*
D03*
Y-82500D02*
D03*
Y-87500D02*
D03*
X10630Y-57500D02*
D03*
Y-62500D02*
D03*
Y-67500D02*
D03*
Y-72500D02*
D03*
Y-77500D02*
D03*
Y-82500D02*
D03*
Y-87500D02*
D03*
D20*
X33847Y-81500D02*
D03*
X27154D02*
D03*
D21*
X25500Y-57610D02*
D03*
Y-51390D02*
D03*
X19500Y-57610D02*
D03*
Y-51390D02*
D03*
D33*
X11457Y-42043D02*
X14000Y-39500D01*
X25500D01*
X3937Y-42043D02*
X11457D01*
X19500Y-51390D02*
X25500D01*
Y-61500D02*
Y-57610D01*
X24500Y-62500D02*
X25500Y-61500D01*
X10630Y-62500D02*
X24500D01*
X59055Y-76945D02*
Y-70500D01*
X54500Y-81500D02*
X59055Y-76945D01*
X46110Y-81500D02*
X54500D01*
X33847D02*
X39890D01*
X27154Y-84847D02*
Y-81500D01*
X24500Y-87500D02*
X27154Y-84847D01*
X10630Y-87500D02*
X24500D01*
X5000Y-101500D02*
Y-94000D01*
X2000Y-91000D02*
X5000Y-94000D01*
X2000Y-91000D02*
Y-79500D01*
X4000Y-77500D01*
X10630D01*
X-5000Y-101500D02*
Y-88500D01*
X-6000Y-87500D02*
X-5000Y-88500D01*
X-10630Y-87500D02*
X-6000D01*
X-15000Y-101500D02*
Y-94000D01*
X-20787Y-88213D02*
X-15000Y-94000D01*
X-20787Y-88213D02*
Y-64000D01*
X25500Y-51390D02*
Y-48000D01*
X39713Y-65287D02*
Y-60500D01*
X37500Y-67500D02*
X39713Y-65287D01*
X10630Y-67500D02*
X37500D01*
D34*
X-3937Y-38500D02*
Y-34563D01*
X-5500Y-33000D02*
X-3937Y-34563D01*
X-7500Y-33000D02*
X-5500D01*
X-9000Y-31500D02*
X-7500Y-33000D01*
X-9000Y-31500D02*
Y-26500D01*
X9000Y-19500D02*
Y-16500D01*
Y-26500D02*
Y-19500D01*
X-9000Y-17246D02*
X-5000Y-13246D01*
Y-12500D01*
X-9000Y-26500D02*
Y-17246D01*
X5000Y-12500D02*
X9000Y-16500D01*
D35*
X59055Y-50500D02*
X61500D01*
X65500Y-54500D01*
Y-64500D02*
Y-54500D01*
X64500Y-65500D02*
X65500Y-64500D01*
X51500Y-65500D02*
X64500D01*
X44500Y-72500D02*
X51500Y-65500D01*
X10630Y-72500D02*
X44500D01*
X-65000Y-55500D02*
X-60000Y-50500D01*
X-65000Y-63500D02*
Y-55500D01*
X-63000Y-65500D02*
X-46500D01*
X-65000Y-63500D02*
X-63000Y-65500D01*
X2500Y-72500D02*
X10630D01*
X-2000Y-68000D02*
X2500Y-72500D01*
X-2000Y-68000D02*
Y-57000D01*
X-7500Y-51500D02*
X-2000Y-57000D01*
X-32500Y-51500D02*
X-7500D01*
X-46500Y-65500D02*
X-32500Y-51500D01*
X3000Y-65500D02*
Y-56500D01*
X-5500Y-48000D02*
X3000Y-56500D01*
X-35000Y-48000D02*
X-5500D01*
X5000Y-67500D02*
X10630D01*
X3000Y-65500D02*
X5000Y-67500D01*
X-47500Y-60500D02*
X-35000Y-48000D01*
X-59055Y-60500D02*
X-47500D01*
D36*
X-60000Y-50500D02*
X-59055D01*
D37*
X59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
X-59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
D38*
X59055Y-30500D02*
D03*
X-59055D02*
D03*
D39*
X51181Y-98425D02*
D03*
X-51181Y-11811D02*
D03*
D40*
X-15000Y-101500D02*
D03*
X5000Y-12500D02*
D03*
D41*
X-5000Y-101500D02*
D03*
X5000D02*
D03*
X15000D02*
D03*
X-5000Y-12500D02*
D03*
D42*
X25500Y-39500D02*
D03*
X9000Y-34413D02*
D03*
X-16000Y-57500D02*
D03*
Y-43000D02*
D03*
X25500Y-48000D02*
D03*
X15500Y-57500D02*
D03*
X-27000Y-70000D02*
D03*
X33492Y-35500D02*
D03*
X-41787Y-35750D02*
D03*
X30500Y-12500D02*
D03*
M02*
@@ -0,0 +1,118 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Color=8421504*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Positive*
G04*
G01*
G75*
%ADD16R,0.02756X0.03543*%
%ADD17R,0.05906X0.05906*%
%ADD18R,0.03543X0.03150*%
%ADD19R,0.06102X0.02362*%
%ADD20R,0.03347X0.03740*%
%ADD21R,0.03543X0.02756*%
D16*
X-48008Y-30500D02*
D03*
X-41787D02*
D03*
X-48008Y-41000D02*
D03*
X-41787D02*
D03*
X46110Y-81500D02*
D03*
X39890D02*
D03*
X39713Y-60500D02*
D03*
X33492D02*
D03*
X39713Y-50500D02*
D03*
X33492D02*
D03*
Y-40500D02*
D03*
X39713D02*
D03*
X33492Y-30500D02*
D03*
X39713D02*
D03*
X26110Y-12500D02*
D03*
X19890D02*
D03*
X-27008Y-57500D02*
D03*
X-20787D02*
D03*
X-27008Y-64000D02*
D03*
X-20787D02*
D03*
D17*
X9000Y-26500D02*
D03*
X-9000D02*
D03*
D18*
X3937Y-42043D02*
D03*
Y-34957D02*
D03*
X-3937Y-38500D02*
D03*
D19*
X-10630Y-57500D02*
D03*
Y-62500D02*
D03*
Y-67500D02*
D03*
Y-72500D02*
D03*
Y-77500D02*
D03*
Y-82500D02*
D03*
Y-87500D02*
D03*
X10630Y-57500D02*
D03*
Y-62500D02*
D03*
Y-67500D02*
D03*
Y-72500D02*
D03*
Y-77500D02*
D03*
Y-82500D02*
D03*
Y-87500D02*
D03*
D20*
X33847Y-81500D02*
D03*
X27154D02*
D03*
D21*
X25500Y-57610D02*
D03*
Y-51390D02*
D03*
X19500Y-57610D02*
D03*
Y-51390D02*
D03*
M02*
@@ -0,0 +1,164 @@
G04*
G04 #@! TF.GenerationSoftware,Altium Limited,Altium Designer,21.2.1 (34)*
G04*
G04 Layer_Color=8388736*
%FSLAX25Y25*%
%MOIN*%
G70*
G04*
G04 #@! TF.SameCoordinates,9466BED1-F6BD-4CF9-8920-6B0B1F58636F*
G04*
G04*
G04 #@! TF.FilePolarity,Negative*
G04*
G01*
G75*
%ADD22R,0.03556X0.04343*%
%ADD23R,0.06706X0.06706*%
%ADD24R,0.04343X0.03950*%
%ADD25R,0.06902X0.03162*%
%ADD26R,0.04147X0.04540*%
%ADD27R,0.04343X0.03556*%
%ADD28O,0.08674X0.06706*%
%ADD29R,0.08674X0.06706*%
%ADD30C,0.15367*%
%ADD31R,0.06706X0.08674*%
%ADD32O,0.06706X0.08674*%
D22*
X-48008Y-30500D02*
D03*
X-41787D02*
D03*
X-48008Y-41000D02*
D03*
X-41787D02*
D03*
X46110Y-81500D02*
D03*
X39890D02*
D03*
X39713Y-60500D02*
D03*
X33492D02*
D03*
X39713Y-50500D02*
D03*
X33492D02*
D03*
Y-40500D02*
D03*
X39713D02*
D03*
X33492Y-30500D02*
D03*
X39713D02*
D03*
X26110Y-12500D02*
D03*
X19890D02*
D03*
X-27008Y-57500D02*
D03*
X-20787D02*
D03*
X-27008Y-64000D02*
D03*
X-20787D02*
D03*
D23*
X9000Y-26500D02*
D03*
X-9000D02*
D03*
D24*
X3937Y-42043D02*
D03*
Y-34957D02*
D03*
X-3937Y-38500D02*
D03*
D25*
X-10630Y-57500D02*
D03*
Y-62500D02*
D03*
Y-67500D02*
D03*
Y-72500D02*
D03*
Y-77500D02*
D03*
Y-82500D02*
D03*
Y-87500D02*
D03*
X10630Y-57500D02*
D03*
Y-62500D02*
D03*
Y-67500D02*
D03*
Y-72500D02*
D03*
Y-77500D02*
D03*
Y-82500D02*
D03*
Y-87500D02*
D03*
D26*
X33847Y-81500D02*
D03*
X27154D02*
D03*
D27*
X25500Y-57610D02*
D03*
Y-51390D02*
D03*
X19500Y-57610D02*
D03*
Y-51390D02*
D03*
D28*
X59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
X-59055Y-70500D02*
D03*
Y-60500D02*
D03*
Y-50500D02*
D03*
Y-40500D02*
D03*
D29*
X59055Y-30500D02*
D03*
X-59055D02*
D03*
D30*
X51181Y-98425D02*
D03*
X-51181Y-11811D02*
D03*
D31*
X-15000Y-101500D02*
D03*
X5000Y-12500D02*
D03*
D32*
X-5000Y-101500D02*
D03*
X5000D02*
D03*
X15000D02*
D03*
X-5000Y-12500D02*
D03*
M02*
@@ -0,0 +1,199 @@
*************************************************************
FileName = SolenoidValveDriver_v01_PCB.GBR
AutoAperture = True
*************************************************************
Generating : Keep-Out Layer
File : SolenoidValveDriver_v01_PCB.GKO
Adding Layer : Keep-Out Layer
Used DCodes :
D44
*************************************************************
*************************************************************
Generating : Bottom Overlay
File : SolenoidValveDriver_v01_PCB.GBO
Adding Layer : Bottom Overlay
Used DCodes :
D43
*************************************************************
*************************************************************
Generating : Bottom Paste
File : SolenoidValveDriver_v01_PCB.GBP
Adding Layer : Bottom Paste
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
*************************************************************
*************************************************************
Generating : Bottom Solder
File : SolenoidValveDriver_v01_PCB.GBS
Adding Layer : Bottom Solder
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D28
D29
D30
D31
D32
*************************************************************
*************************************************************
Generating : Top Solder
File : SolenoidValveDriver_v01_PCB.GTS
Adding Layer : Top Solder
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D22
D23
D24
D25
D26
D27
D28
D29
D30
D31
D32
*************************************************************
*************************************************************
Generating : Top Paste
File : SolenoidValveDriver_v01_PCB.GTP
Adding Layer : Top Paste
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D16
D17
D18
D19
D20
D21
*************************************************************
*************************************************************
Generating : Top Overlay
File : SolenoidValveDriver_v01_PCB.GTO
Adding Layer : Top Overlay
Used DCodes :
D10
D11
D12
D13
D14
D15
*************************************************************
*************************************************************
Generating : Bottom Layer
File : SolenoidValveDriver_v01_PCB.GBL
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D11
D37
D38
D39
D40
D41
D42
*************************************************************
*************************************************************
Generating : Top Layer
File : SolenoidValveDriver_v01_PCB.GTL
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D11
D16
D17
D18
D19
D20
D21
D33
D34
D35
D36
D37
D38
D39
D40
D41
D42
*************************************************************
*************************************************************
Generating : Drill Drawing
File : SolenoidValveDriver_v01_PCB.GD1
Adding Drill Pair : Top Layer-Bottom Layer
Adding Layer : Drill Drawing
Used DCodes :
D44
D45
D46
D47
D48
D49
D50
*************************************************************
*************************************************************
Generating : Drill Guide
File : SolenoidValveDriver_v01_PCB.GG1
Adding Drill Pair : Top Layer-Bottom Layer
Adding Layer : Drill Guide
Used DCodes :
D46
*************************************************************
@@ -0,0 +1,5 @@
DRC Rules Export File for PCB: C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Actuator_board\Hardware\SolenoidValveDriver_v01_PCB.PcbDoc
RuleKind=ShortCircuit|RuleName=ShortCircuit|Scope=Board|Allowed=0
RuleKind=Clearance|RuleName=Clearance|Scope=Board|Minimum=6.00
RuleKind=Width|RuleName=Width|Scope=Board|Minimum=6.06
RuleKind=SolderMaskExpansion|RuleName=SolderMaskExpansion|Scope=Board|Minimum=4.00
@@ -0,0 +1,41 @@
D10 ROUNDED 9.842 9.842 0.000 LINE 0.000
D11 ROUNDED 23.622 23.622 0.000 LINE 0.000
D12 ROUNDED 7.874 7.874 0.000 LINE 0.000
D13 ROUNDED 8.000 8.000 0.000 LINE 0.000
D14 ROUNDED 7.000 7.000 0.000 LINE 0.000
D15 ROUNDED 5.906 5.906 0.000 LINE 0.000
D16 RECTANGULAR 27.559 35.433 0.000 FLASH 180.000
D17 RECTANGULAR 59.055 59.055 0.000 FLASH 0.000
D18 RECTANGULAR 31.496 35.433 0.000 FLASH 270.000
D19 RECTANGULAR 23.622 61.024 0.000 FLASH 90.000
D20 RECTANGULAR 37.402 33.465 0.000 FLASH 90.000
D21 RECTANGULAR 27.559 35.433 0.000 FLASH 90.000
D22 RECTANGULAR 35.559 43.433 0.000 FLASH 180.000
D23 RECTANGULAR 67.055 67.055 0.000 FLASH 0.000
D24 RECTANGULAR 39.496 43.433 0.000 FLASH 270.000
D25 RECTANGULAR 31.622 69.024 0.000 FLASH 90.000
D26 RECTANGULAR 45.402 41.465 0.000 FLASH 90.000
D27 RECTANGULAR 35.559 43.433 0.000 FLASH 90.000
D28 ROUNDED 67.055 86.740 0.000 FLASH 270.000
D29 RECTANGULAR 67.055 86.740 0.000 FLASH 270.000
D30 ROUNDED 153.669 153.669 0.000 FLASH 0.000
D31 RECTANGULAR 67.055 86.740 0.000 FLASH 0.000
D32 ROUNDED 67.055 86.740 0.000 FLASH 0.000
D33 ROUNDED 11.811 11.811 0.000 LINE 0.000
D34 ROUNDED 31.496 31.496 0.000 LINE 0.000
D35 ROUNDED 19.685 19.685 0.000 LINE 0.000
D36 ROUNDED 15.748 15.748 0.000 LINE 0.000
D37 ROUNDED 59.055 78.740 0.000 FLASH 270.000
D38 RECTANGULAR 59.055 78.740 0.000 FLASH 270.000
D39 ROUNDED 145.669 145.669 0.000 FLASH 0.000
D40 RECTANGULAR 59.055 78.740 0.000 FLASH 0.000
D41 ROUNDED 59.055 78.740 0.000 FLASH 0.000
D42 ROUNDED 31.496 31.496 0.000 FLASH 0.000
D43 RECTANGULAR 787.402 196.850 0.000 FLASH 0.000
D44 ROUNDED 3.937 3.937 0.000 LINE 0.000
D45 ROUNDED 10.000 10.000 0.000 LINE 0.000
D46 ROUNDED 2.000 2.000 0.000 LINE 0.000
D47 ROUNDED 15.000 15.000 0.000 LINE 0.000
D48 ROUNDED 1.000 1.000 0.000 LINE 0.000
D49 ROUNDED 16.000 16.000 0.000 LINE 0.000
D50 ROUNDED 6.000 6.000 0.000 LINE 0.000
@@ -0,0 +1,16 @@
----------------------------------------------------------------------------------------------------------------------------------
NCDrill File Report For: SolenoidValveDriver_v01_PCB.PcbDoc 2021-05-27 22:55:18
----------------------------------------------------------------------------------------------------------------------------------
Layer Pair : Top Layer to Bottom Layer
ASCII RoundHoles File : SolenoidValveDriver_v01_PCB.TXT
Tool Hole Size Hole Tolerance Hole Type Hole Count Plated Tool Travel
----------------------------------------------------------------------------------------------------------------------------------
T1 16mil (0.4mm) Round 10 PTH 0.00inch (0.00mm)
T2 35mil (0.9mm) Round 16 PTH 0.00inch (0.00mm)
T3 138mil (3.5mm) Round 2 NPTH 0.00inch (0.00mm)
----------------------------------------------------------------------------------------------------------------------------------
Totals 28
Total Processing Time (hh:mm:ss) : 00:00:00
@@ -0,0 +1,2 @@
Layer Pairs Export File for PCB: C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Actuator_board\Hardware\SolenoidValveDriver_v01_PCB.PcbDoc
LayersSetName=Top_Bot_Thru_Holes|DrillFile=solenoidvalvedriver_v01_pcb.txt|DrillLayers=gtl,gbl
@@ -0,0 +1,42 @@
M48
;Layer_Color=9474304
;FILE_FORMAT=2:5
INCH,LZ
;TYPE=PLATED
T1F00S00C0.01575
T2F00S00C0.03543
;TYPE=NON_PLATED
T3F00S00C0.13780
%
T01
X-0027Y-007
X-0016Y-00575
Y-0043
X-0041787Y-003575
X0009Y-0034413
X00255Y-00395
Y-0048
X00155Y-00575
X0033492Y-00355
X00305Y-00125
T02
X-0015Y-01015
X-0005
X0005
X0015
X0059055Y-00705
Y-00605
Y-00505
Y-00405
Y-00305
X0005Y-00125
X-0005
X-0059055Y-00305
Y-00405
Y-00505
Y-00605
Y-00705
T03
X-0051181Y-0011811
X0051181Y-0098425
M30
@@ -0,0 +1,33 @@
Altium Designer Pick and Place Locations
C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Actuator_board\Hardware\Project Outputs for SolenoidValveDriver_v01\Pick Place\Pick Place for SolenoidValveDriver_v01_PCB.txt
========================================================================================================================
File Design Information:
Date: 27-05-21
Time: 22:55
Revision: 68dc99a6db214db595c0a2d2ebf8c6593c3e50d0
Variant: No variations
Units used: mil
Designator Comment Layer Footprint Center-X(mil) Center-Y(mil) Rotation Description
C1 Cap TopLayer 0603_-_CAP 230.000mil -125.000mil 180 Capacitor
C2 Cap TopLayer 0603_-_CAP -238.976mil -640.000mil 360 Capacitor
C3 Cap TopLayer 0603_-_CAP -238.976mil -575.000mil 360 Capacitor
C4 Cap TopLayer 0603_-_CAP -448.976mil -410.000mil 180 "CAP CER 0.1UF 50V X7R 0603"
C5 Cap TopLayer 0603_-_CAP 366.024mil -405.000mil 0 "CAP CER 0.1UF 50V X7R 0603"
C6 Cap TopLayer 0603_-_CAP -448.976mil -305.000mil 180 "CAP CER 0.1UF 50V X7R 0603"
C7 Cap TopLayer 0603_-_CAP 366.024mil -305.000mil 0 "CAP CER 0.1UF 50V X7R 0603"
D1 LED TopLayer 0603_Diode 305.000mil -815.000mil 360 "Typical RED GaAs LED"
D2 1N4148 TopLayer SOD123 0.000mil -265.000mil 360 "DIODE GEN PURP 100V 300MA SOD123"
P1 "Header 5" TopLayer Header_5x1 -590.551mil -505.000mil 270 "Header, 5-Pin"
P2 "Header 5" TopLayer Header_5x1 590.551mil -505.000mil 270 "Header, 5-Pin"
P3 "Header 4" TopLayer Header_4x1 0.000mil -1015.000mil 360 "Header, 4-Pin"
P4 "Solenoid Connector" TopLayer Header_2x1 0.000mil -125.000mil 180 "Header, 2-Pin"
Q1 DMN62D0U-13 TopLayer SOT90P240X100-3N 0.000mil -385.000mil 180 "MOSFET N-CH 60V 0.38A"
R1 Res TopLayer 0603 255.000mil -545.000mil 90 "RES SMD 0 OHM JUMPER 1/10W 0603"
R2 Res TopLayer 0603 366.024mil -605.000mil 180 Resistor
R3 Res TopLayer 0603 366.024mil -505.000mil 180 Resistor
R4 Res TopLayer 0603 430.000mil -815.000mil 180 Resistor
R5 Res TopLayer 0603 195.000mil -545.000mil 90 "RES SMD 1M OHM 5% 1/10W 0603"
U1 ATTiny814 TopLayer SOIC127P600X175-14N 0.000mil -725.000mil 0 "IC MCU 8BIT 8KB FLASH 14SOIC"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
Record=TopLevelDocument|FileName=SolenoidValveDriver_v01_Schematic.SchDoc
@@ -1,13 +1,17 @@
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <esp_task_wdt.h>
#include "CentralUnit_cfg.h"
#include "wifi_credentials.h"
#include "PlantSystem.h"
#include "Wire.h"
#define WDT_TIMEOUT 20000
AsyncWebServer server(80);
int WiFi_status = WL_IDLE_STATUS;
uint32_t nFlowSensorCount = 0;
volatile uint32_t nFlowSensorCount = 0;
volatile uint32_t nFlowSensorCount_last = 0;
void IRAM_ATTR ISR_flowSensor() {
nFlowSensorCount++;
@@ -16,6 +20,8 @@ void IRAM_ATTR ISR_flowSensor() {
void setup()
{
esp_task_wdt_init(30, true);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
@@ -23,7 +29,7 @@ void setup()
digitalWrite(I2C_EN_PIN, HIGH);
pinMode(WATER_PUMP_EN_PIN, OUTPUT);
digitalWrite(WATER_PUMP_EN_PIN, HIGH);
digitalWrite(WATER_PUMP_EN_PIN, LOW);
pinMode(FLOW_SENSOR_PIN, INPUT_PULLUP);
@@ -31,6 +37,11 @@ void setup()
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
// Configure WDT
Serial.println("Configuring WDT...");
esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts
esp_task_wdt_add(NULL); //add current thread to WDT watch
// Connect to WiFi
while ( WiFi_status != WL_CONNECTED) {
Serial.print("Connecting to SSID: ");
@@ -38,6 +49,7 @@ void setup()
WiFi_status = WiFi.begin(ssid, password);
// wait 5 seconds for connection:
esp_task_wdt_reset();
delay(5000);
}
@@ -49,7 +61,7 @@ void setup()
setupWebServer();
server.begin();
attachInterrupt(WATER_PUMP_EN_PIN, ISR_flowSensor, FALLING);
attachInterrupt(FLOW_SENSOR_PIN, ISR_flowSensor, FALLING);
}
@@ -84,8 +96,8 @@ void setupWebServer(void)
server.on("/sensorData", HTTP_GET, [] (AsyncWebServerRequest *request) {
Serial.println("Sensor data");
char buff[300] = {0};
if(PlantSystem_WAPI_SensorData(buff, 300) == true)
char buff[500] = {0};
if(PlantSystem_WAPI_SensorData(buff, 500) == true)
{
request->send(200, "text/plain", buff);
return;
@@ -102,8 +114,8 @@ void setupWebServer(void)
server.on("/solenoidData", HTTP_GET, [] (AsyncWebServerRequest *request) {
Serial.println("Solenoid data");
char buff[300] = {0};
if(PlantSystem_WAPI_SolenoidList(buff, 300) == true)
char buff[500] = {0};
if(PlantSystem_WAPI_SolenoidList(buff, 500) == true)
{
request->send(200, "text/plain", buff);
return;
@@ -121,8 +133,8 @@ void setupWebServer(void)
server.on("/deviceData", HTTP_GET, [] (AsyncWebServerRequest *request) {
Serial.println("Device data");
char buff[300] = {0};
if(PlantSystem_WAPI_GetDevices(buff, 300) == true)
char buff[500] = {0};
if(PlantSystem_WAPI_GetDevices(buff, 500) == true)
{
request->send(200, "text/plain", buff);
return;
@@ -141,7 +153,7 @@ void setupWebServer(void)
char buff[100] = {0};
int len;
len = snprintf(buff, 100, "{flowSensor:%d}", nFlowSensorCount);
len = snprintf(buff, 100, "{flowSensor:%d}", nFlowSensorCount_last);
if(len>0)
{
@@ -193,5 +205,57 @@ void setupWebServer(void)
return;
}
});
// Water plant connected to solenoid with X ml of water
server.on("/waterPlant", HTTP_GET, [] (AsyncWebServerRequest *request) {
Serial.println("Water plant request");
if ( request->hasParam("address") && request->hasParam("volume") )
{
String xAddress;
String xVolume;
uint32_t nAddress = 0;
uint32_t nVolume = 0;
xAddress = request->getParam("address")->value();
nAddress = xAddress.toInt();
xVolume = request->getParam("volume")->value();
nVolume = xVolume.toInt();
if(PlantSystem_WaterPlant(nAddress, nVolume) == true)
{
char buff[200] = {0};
int len;
len = snprintf(buff, 200, "{ \"result\": OK, \"Address\":%d, \"Volume\":%d }",
nAddress, nVolume);
request->send(200, "text/plain", buff);
return;
}
else
{
Serial.println("PlantSystem_WaterPlant() error");
request->send(200, "text/plain", "PlantSystem_WaterPlant() FAIL");
return;
}
}
else
{
request->send(200, "text/plain", "MISSING ARGUMENTS");
return;
}
});
// Prime the system with water
server.on("/PrimeSystemWithWater", HTTP_GET, [] (AsyncWebServerRequest *request) {
Serial.println("PlantSystem_RequestPrimeSystem()");
PlantSystem_RequestPrimeSystem();
request->send(200, "text/plain", "OK");
return;
});
}
@@ -35,18 +35,43 @@ uint8_t gnSensorsOnBusCnt = 0;
I2C_Solenoid_TypeDef gSolenoidsOnBus[20] = { {.i2cAddress=0, .lastState=0} };
uint8_t gnSolenoidsOnBusCnt = 0;
// Periods
#define PERIOD_RESCAN_BUS 24*3600*1000 // Every 24h
#define PERIOD_RELOAD_SENSORS 15*1000 // Every 5sec
// I2C bus config
#define I2C_ADDRESS_LIMIT_LOWER 0x08
#define I2C_ADDRESS_LIMIT_UPPER 0x7F
// Plant watering definitions
#define WATERING_VOLUME_MINIMUM 10
#define WATERING_VOLUME_MAXIMUM 550
#define WATERING_FLOW_EDGES_PER_ML 4
// PlantSystem_tick periods
#define PERIOD_RESCAN_BUS 24*3600*1000 // Every 24h
#define PERIOD_RELOAD_SENSORS 15*1000 // Every 5sec
#define PERIOD_FLOW_RATE 2*1000 // Every 2sec
// PlantSystem_tick global variables
uint32_t nPeriod_Rescanbus=0;
uint32_t nPeriod_ReloadSensors=0;
uint32_t nPeriod_FlowRate=0;
// Watering global variables
bool bPrimeSystem_requestPending=false;
bool bWatering_requestPending=false;
bool bWatering_inProgress=false;
bool bCloseValvesOnPowerUp=false;
uint32_t nWatering_volume=0;
uint8_t nWatering_i2cAddress=0;
uint32_t nTimeout = 0;
void PlantSystem_tick(void)
{
esp_task_wdt_reset();
// -- Rescan I2C bus
if(nPeriod_Rescanbus <= millis())
{
esp_task_wdt_reset();
PlantSystem_ScanBus();
#if 1
PlantSystem_debugShowDevicesOnBus();
@@ -60,14 +85,106 @@ void PlantSystem_tick(void)
PlantSystem_UpdateSensors();
nPeriod_ReloadSensors = millis() + PERIOD_RELOAD_SENSORS;
}
// -- Close all solenoids on boot
if(bCloseValvesOnPowerUp == false)
{
// Turn OFF all solenoids
delay(500);
esp_task_wdt_reset();
Serial.println("De-energizing ALL solenoids");
for(uint8_t i=0; i<gnSolenoidsOnBusCnt; i++)
{
if (PlantSystem_SetSolenoidState(gSolenoidsOnBus[i].i2cAddress, false) == true)
{
Serial.print("Closed solenoid 0x");
Serial.println(gSolenoidsOnBus[i].i2cAddress, HEX);
}
else
{
Serial.print("Failed to close solenoid 0x");
Serial.println(gSolenoidsOnBus[i].i2cAddress, HEX);
}
delay(500);
}
bCloseValvesOnPowerUp = true;
}
#if 0
// -- Flow sensor debug
if(nPeriod_FlowRate <= millis())
{
Serial.print("nFlowSensorCount: ");
Serial.println(nFlowSensorCount, DEC);
nPeriod_FlowRate = millis() + PERIOD_FLOW_RATE;
}
#endif
// -- Process watering request
if(bWatering_requestPending || bWatering_inProgress)
{
Serial.println("bWatering_requestPending | bWatering_inProgress");
// Transition to in progress
bWatering_inProgress = true;
bWatering_requestPending = false;
// Note: Solenoid address and volume must have been validated
Serial.println("Turning pump ON");
digitalWrite(WATER_PUMP_EN_PIN, HIGH);
delay(200);
Serial.println("Energizing solenoid");
if (PlantSystem_SetSolenoidState(nWatering_i2cAddress, true) != true)
{
bWatering_requestPending = false;
bWatering_inProgress = false;
digitalWrite(WATER_PUMP_EN_PIN, LOW);
Serial.println("Turning pump OFF");
Serial.println("Failed to open solenoid. Aborting...");
return;
}
esp_task_wdt_reset();
nTimeout = millis() + 10000;
while(nFlowSensorCount < (WATERING_FLOW_EDGES_PER_ML*nWatering_volume))
{
if(millis() > nTimeout)
{
break;
}
}
esp_task_wdt_reset();
Serial.println("De-Energizing solenoid");
PlantSystem_SetSolenoidState(nWatering_i2cAddress, false);
delay(200);
digitalWrite(WATER_PUMP_EN_PIN, LOW);
Serial.println("Turning pump OFF");
// Store last flow data and prepare for new request
nFlowSensorCount_last = nFlowSensorCount;
nFlowSensorCount = 0;
// Reset request
bWatering_inProgress = false;
bWatering_requestPending = false;
}
// -- Process prime system with water request
if(bPrimeSystem_requestPending)
{
esp_task_wdt_reset();
PlantSystem_PrimeSystemWithWater();
bPrimeSystem_requestPending = false;
}
}
void PlantSystem_ScanBus(void)
{
Serial.println ("Scanning I2C bus...");
for (uint8_t i = 8; i< 127; i++)
for (uint8_t i=I2C_ADDRESS_LIMIT_LOWER; i<I2C_ADDRESS_LIMIT_UPPER; i++)
{
Wire.beginTransmission (i); // Begin I2C transmission Address (i)
if (Wire.endTransmission () == 0) // Receive 0 = success (ACK response)
@@ -76,6 +193,7 @@ void PlantSystem_ScanBus(void)
// gDevicesOnBusCount++;
}
}
esp_task_wdt_reset();
Serial.print ("Found ");
Serial.print (gDevicesOnBusCount, DEC); // numbers of devices
Serial.println (" device(s).");
@@ -83,6 +201,8 @@ void PlantSystem_ScanBus(void)
for(uint8_t i=0; i<gDevicesOnBusCount; i++)
{
PlantSystem_getDeviceInfo(i);
delay(300);
esp_task_wdt_reset();
}
}
@@ -197,11 +317,11 @@ void PlantSystem_getDeviceInfo(uint8_t devID)
// --
bool PlantSystem_SetSolenoidState(uint32_t I2CAddress, bool energized)
{
if(I2CAddress < 0x08 || I2CAddress > 0x7F )
if(I2CAddress<I2C_ADDRESS_LIMIT_LOWER || I2CAddress>I2C_ADDRESS_LIMIT_UPPER )
{
return false;
}
uint8_t txBuffer[5];
uint8_t requestedState = (energized ? 1 : 0);
@@ -214,7 +334,7 @@ bool PlantSystem_SetSolenoidState(uint32_t I2CAddress, bool energized)
I2C_SendBuffer(I2CAddress, txBuffer, 5);
// Wait 100 ms
delay(100);
delay(200);
// Send read back value request
txBuffer[0] = CMD_GET_SOLENOID_STATE;
@@ -224,18 +344,26 @@ bool PlantSystem_SetSolenoidState(uint32_t I2CAddress, bool energized)
I2C_SendBuffer(I2CAddress, txBuffer, 4);
// Wait 100 ms
delay(100);
delay(200);
// Read new solenoid state
uint8_t newState = 0;
I2C_ReadFrom(I2CAddress, 10, &newState, PLANTSYSTEM_MIN_HEADER_LENGHT+1, 1);
uint8_t retData = 0;
I2C_ReadFrom(I2CAddress, 10, &retData, PLANTSYSTEM_MIN_HEADER_LENGHT+1, 1);
if(requestedState == newState)
if(requestedState == retData)
{
Serial.print("New state == Requested state 0x");
Serial.print(retData, DEC);
Serial.print("==0x");
Serial.println(requestedState, DEC);
return true;
}
else
{
Serial.print("New state != Requested state 0x");
Serial.print(retData, DEC);
Serial.print("!=0x");
Serial.println(requestedState, DEC);
return false;
}
@@ -366,10 +494,26 @@ bool I2C_ReadFrom(uint8_t address, uint8_t nLen, uint8_t *pData, uint8_t nPos, u
return false;
}
// Prepare variables
uint8_t rxBuffer[20] = {0};
uint32_t timeout = millis() + 2000;
bool bReady = false;
Wire.requestFrom(address, nLen, true);
while(Wire.available() == 0);
while(millis() <= timeout)
{
if(Wire.available())
{
bReady = true;
break;
}
}
if(bReady == false)
{
return false;
}
for(uint8_t i=0; i<nLen; i++)
{
rxBuffer[i] = Wire.read();
@@ -400,3 +544,122 @@ bool I2C_ReadFrom(uint8_t address, uint8_t nLen, uint8_t *pData, uint8_t nPos, u
}
// -- Request opening of solenoid at address `solenoidAddress`
// and pumping out (approximately) `n_volume_in_mL` mL of fluid
bool PlantSystem_WaterPlant(uint8_t solenoidAddress, uint32_t n_volume_in_mL)
{
// Valid I2C address requested
if(solenoidAddress<I2C_ADDRESS_LIMIT_LOWER || solenoidAddress>I2C_ADDRESS_LIMIT_UPPER)
{
Serial.println("Invalid I2C address!");
return false;
}
// Valid volume requested
if(n_volume_in_mL < WATERING_VOLUME_MINIMUM || n_volume_in_mL > WATERING_VOLUME_MAXIMUM)
{
Serial.println("Invalid volume requested!");
return false;
}
// Check if solenoid with this address is registered on the bus
bool bFound = false;
for(uint8_t i=0; i<gnSolenoidsOnBusCnt; i++)
{
if(gSolenoidsOnBus[i].i2cAddress == solenoidAddress)
{
bFound=true;
break;
}
}
// Solenoid not found or invalid request
if(bFound == false)
{
Serial.println("Solenoid not found!");
return false;
}
// Valid request, add to next tick
bWatering_requestPending=true;
nWatering_volume=n_volume_in_mL;
nWatering_i2cAddress=solenoidAddress;
#if 0
Serial.println ("Response");
for(uint8_t i=0; i<nLen; i++)
{
Serial.print ("[");
Serial.print (i, DEC);
Serial.print ("] = 0x");
Serial.println (rxBuffer[i], HEX);
}
#endif
return true;
}
void PlantSystem_RequestPrimeSystem(void)
{
bPrimeSystem_requestPending = true;
}
bool PlantSystem_PrimeSystemWithWater(void)
{
// Turn ON Pump
Serial.println("Turning pump ON");
digitalWrite(WATER_PUMP_EN_PIN, HIGH);
delay(1000);
// Turn ON all solenoids
Serial.println("Energizing ALL solenoids");
for(uint8_t i=0; i<gnSolenoidsOnBusCnt; i++)
{
if (PlantSystem_SetSolenoidState(gSolenoidsOnBus[i].i2cAddress, true) == true)
{
Serial.print("Openned solenoid 0x");
Serial.println(gSolenoidsOnBus[i].i2cAddress, HEX);
}
else
{
Serial.print("Failed to open solenoid 0x");
Serial.println(gSolenoidsOnBus[i].i2cAddress, HEX);
}
delay(500);
}
// Let the water flow for a while
delay(5000);
// Turn OFF all solenoids
Serial.println("De-energizing ALL solenoids");
for(uint8_t i=0; i<gnSolenoidsOnBusCnt; i++)
{
if (PlantSystem_SetSolenoidState(gSolenoidsOnBus[i].i2cAddress, false) == true)
{
Serial.print("Closed solenoid 0x");
Serial.println(gSolenoidsOnBus[i].i2cAddress, HEX);
}
else
{
Serial.print("Failed to close solenoid 0x");
Serial.println(gSolenoidsOnBus[i].i2cAddress, HEX);
}
delay(500);
}
// Turn OFF pump
delay(1000);
Serial.println("Turning pump OFF");
digitalWrite(WATER_PUMP_EN_PIN, LOW);
nFlowSensorCount = 0;
return true;
}
@@ -59,7 +59,7 @@ bool PlantSystem_WAPI_GetDevices(char *pBuff, uint32_t nMaxLen)
}
len = snprintf(&pBuff[currentPos], (nMaxLen-currentPos), "{\"address\":\"0x%02X\",\"type\":\"%s\"},",
len = snprintf(&pBuff[currentPos], (nMaxLen-currentPos), "{\"address\":\"%d\",\"type\":\"%s\"},",
gDevicesOnBus[i].i2cAddress,
pStrDevTyep);
if(len>0)
@@ -112,7 +112,7 @@ bool PlantSystem_WAPI_SensorData(char *pBuff, uint32_t nMaxLen)
// Start JSON string
len = snprintf(&pBuff[currentPos], (nMaxLen-currentPos), "{\"count\":%d,\"sensors\":[",
len = snprintf(&pBuff[currentPos], nMaxLen, "{\"count\":%d,\"sensors\":[",
gnSensorsOnBusCnt);
if(len<0)
{
@@ -121,24 +121,32 @@ bool PlantSystem_WAPI_SensorData(char *pBuff, uint32_t nMaxLen)
}
else
{
currentPos += len;
currentPos += len;
nMaxLen -= len;
}
// Construct response based on devices currently registered on the bus
for(uint8_t i=0; i<gnSensorsOnBusCnt; i++)
{
len = snprintf(&pBuff[currentPos], (nMaxLen-currentPos), "{\"address\":\"0x%02X\",\"T\":%.2f,\"M\":%d,\"A\":%d},",
len = snprintf(&pBuff[currentPos], nMaxLen, "{\"address\":\"%d\",\"T\":%.2f,\"M\":%d,\"A\":%d},",
gSensorsOnBus[i].i2cAddress,
gSensorsOnBus[i].temperature,
gSensorsOnBus[i].soilMoisture,
gSensorsOnBus[i].ambienLight);
if(len>0)
{
currentPos += len;
currentPos += len;
nMaxLen -= len;
}
else
{
Serial.println("Len issue");
Serial.print("snprintf ret: ");
Serial.println(len, DEC);
Serial.print("nMaxLen: ");
Serial.println(len, DEC);
Serial.print("currentPos :");
Serial.println(len, DEC);
return false;
}
@@ -146,14 +154,22 @@ bool PlantSystem_WAPI_SensorData(char *pBuff, uint32_t nMaxLen)
// Close JSON string
len = snprintf(&pBuff[currentPos-1], (nMaxLen-currentPos), "]}");
len = snprintf(&pBuff[currentPos-1], nMaxLen, "]}");
if(len<0)
{
Serial.println("Buffer too short");
Serial.print("snprintf ret: ");
Serial.println(len, DEC);
Serial.print("nMaxLen: ");
Serial.println(len, DEC);
Serial.print("currentPos :");
Serial.println(len, DEC);
return false;
}
if(len>0 && currentPos <nMaxLen)
if(len>0)
{
#if 0
Serial.println("Printing pBuff");
@@ -202,7 +218,7 @@ bool PlantSystem_WAPI_SolenoidList(char *pBuff, uint32_t nMaxLen)
// Construct response based on devices currently registered on the bus
for(uint8_t i=0; i<gnSolenoidsOnBusCnt; i++)
{
len = snprintf(&pBuff[currentPos], (nMaxLen-currentPos), "\"0x%02X\",",
len = snprintf(&pBuff[currentPos], (nMaxLen-currentPos), "\"%d\",",
gSolenoidsOnBus[i].i2cAddress);
if(len>0)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
Record=TopLevelDocument|FileName=CentralUnit_Schematic.SchDoc
Binary file not shown.
@@ -0,0 +1,300 @@
[OutputJobFile]
Version=1.0
Caption=
Description=
VaultGUID=
ItemGUID=
ItemHRID=
RevisionGUID=
RevisionId=
VaultHRID=
AutoItemHRID=
NextRevId=
FolderGUID=
LifeCycleDefinitionGUID=
RevisionNamingSchemeGUID=
[OutputGroup1]
Name=MFGOutput.OutJob
Description=
TargetOutputMedium=Folder Structure
VariantName=[No Variations]
VariantScope=1
CurrentConfigurationName=
TargetPrinter=Brother MFC-L2720DW
PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=0
OutputMedium1=Print Job
OutputMedium1_Type=Printer
OutputMedium1_Printer=
OutputMedium1_PrinterOptions=Record=PrinterOptions|Copies=1|Duplex=1|TrueTypeOptions=3|Collate=1|PrintJobKind=1|PrintWhat=1
OutputMedium2=PDF
OutputMedium2_Type=Publish
OutputMedium3=Folder Structure
OutputMedium3_Type=GeneratedFiles
OutputMedium4=Video
OutputMedium4_Type=Multimedia
OutputType1=Schematic Print
OutputName1=Schematic Prints
OutputCategory1=Documentation
OutputDocumentPath1=[Project Physical Documents]
OutputVariantName1=
OutputEnabled1=0
OutputEnabled1_OutputMedium1=0
OutputEnabled1_OutputMedium2=1
OutputEnabled1_OutputMedium3=0
OutputEnabled1_OutputMedium4=0
OutputDefault1=0
PageOptions1=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration1_Name1=OutputConfigurationParameter1
Configuration1_Item1=Record=SchPrintView|ShowNoERC=True|ShowParamSet=True|ShowProbe=True|ShowBlanket=True|NoERCSymbolsToShow="Thin Cross","Thick Cross","Small Cross",Checkbox,Triangle|ShowNote=True|ShowNoteCollapsed=True|ShowOpenEnds=True|ExpandDesignator=True|ExpandNetLabel=False|ExpandPort=False|ExpandSheetNum=False|ExpandDocNum=False|PrintArea=0|PrintAreaRect.X1=0|PrintAreaRect.Y1=0|PrintAreaRect.X2=0|PrintAreaRect.Y2=0|DocumentPath=[Project Physical Documents]
OutputType2=Pick Place
OutputName2=Generates pick and place files
OutputCategory2=Assembly
OutputDocumentPath2=
OutputVariantName2=
OutputEnabled2=1
OutputEnabled2_OutputMedium1=0
OutputEnabled2_OutputMedium2=0
OutputEnabled2_OutputMedium3=1
OutputEnabled2_OutputMedium4=0
OutputDefault2=0
Configuration2_Name1=OutputConfigurationParameter1
Configuration2_Item1=Record=PickPlaceView|Units=Imperial|GenerateCSVFormat=False|GenerateTextFormat=True|ShowUnits=True|Separator=.|ExcludeFilterParam=False|IncludeVariations=False|Filter= |FilterActive=False|Column#1=Name:Designator,Fixed:True,Metric:False,Visible:True,Sort:None,Position:0|Column#2=Name:Comment,Fixed:True,Metric:False,Visible:True,Sort:None,Position:1|Column#3=Name:Layer,Fixed:True,Metric:False,Visible:True,Sort:None,Position:2|Column#4=Name:Footprint,Fixed:True,Metric:False,Visible:True,Sort:None,Position:3|Column#5=Name:Footprint Description,Fixed:True,Metric:False,Visible:False,Sort:None,Position:4|Column#6=Name:Center-X,Fixed:True,Metric:True,Visible:True,Sort:None,Position:5|Column#7=Name:Center-Y,Fixed:True,Metric:True,Visible:True,Sort:None,Position:6|Column#8=Name:Rotation,Fixed:True,Metric:False,Visible:True,Sort:None,Position:7|Column#9=Name:Description,Fixed:True,Metric:False,Visible:True,Sort:None,Position:8|Column#10=Name:ComponentKind,Fixed:True,Metric:False,Visible:False,Sort:None,Position:9|Column#11=Name:Height,Fixed:True,Metric:True,Visible:False,Sort:None,Position:10|Column#12=Name:Ref-X,Fixed:True,Metric:True,Visible:False,Sort:None,Position:11|Column#13=Name:Ref-Y,Fixed:True,Metric:True,Visible:False,Sort:None,Position:12|Column#14=Name:Pad-X,Fixed:True,Metric:True,Visible:False,Sort:None,Position:13|Column#15=Name:Pad-Y,Fixed:True,Metric:True,Visible:False,Sort:None,Position:14|Column#16=Name:Variation,Fixed:True,Metric:False,Visible:False,Sort:None,Position:15|Column#17=Name:Published,Fixed:False,Metric:False,Visible:False,Sort:None,Position:24|Column#18=Name:LatestRevisionDate,Fixed:False,Metric:False,Visible:False,Sort:None,Position:18|Column#19=Name:PackageReference,Fixed:False,Metric:False,Visible:False,Sort:None,Position:23|Column#20=Name:Value,Fixed:False,Metric:False,Visible:False,Sort:None,Position:26|Column#21=Name:Publisher,Fixed:False,Metric:False,Visible:False,Sort:None,Position:25|Column#22=Name:Distributor Part Number,Fixed:False,Metric:False,Visible:False,Sort:None,Position:17|Column#23=Name:PackageDescription,Fixed:False,Metric:False,Visible:False,Sort:None,Position:22|Column#24=Name:LatestRevisionNote,Fixed:False,Metric:False,Visible:False,Sort:None,Position:19|Column#25=Name:Distributor,Fixed:False,Metric:False,Visible:False,Sort:None,Position:16|Column#26=Name:Manufacturer,Fixed:False,Metric:False,Visible:False,Sort:None,Position:20|Column#27=Name:Manufacturer Part Number,Fixed:False,Metric:False,Visible:False,Sort:None,Position:21|DocumentPath=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part1_Sensor_board\Hardware\PlantSensor_V02_PCB.PcbDoc
OutputType3=Assembly
OutputName3=Assembly Drawings
OutputCategory3=Assembly
OutputDocumentPath3=
OutputVariantName3=
OutputEnabled3=0
OutputEnabled3_OutputMedium1=0
OutputEnabled3_OutputMedium2=0
OutputEnabled3_OutputMedium3=0
OutputEnabled3_OutputMedium4=0
OutputDefault3=0
PageOptions3=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=0|PaperKind=A4|PaperIndex=9
Configuration3_Name1=OutputConfigurationParameter1
Configuration3_Item1=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration3_Name2=OutputConfigurationParameter2
Configuration3_Item2=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Top LayerAssembly Drawing|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=True|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration3_Name3=OutputConfigurationParameter3
Configuration3_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Hidden|FFill=Hidden|FPad=Hidden|FRegion=Hidden|FText=Hidden|FTrack=Hidden|FVia=Hidden|Layer=TopLayer|Polygon=Hidden|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name4=OutputConfigurationParameter4
Configuration3_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=TopOverlay|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name5=OutputConfigurationParameter5
Configuration3_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Hidden|Layer=MultiLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name6=OutputConfigurationParameter6
Configuration3_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name7=OutputConfigurationParameter7
Configuration3_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name8=OutputConfigurationParameter8
Configuration3_Item8=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name9=OutputConfigurationParameter9
Configuration3_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name10=OutputConfigurationParameter10
Configuration3_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration3_Name11=OutputConfigurationParameter11
Configuration3_Item11=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=1|Mirror=False|Name=Bottom LayerAssembly Drawing|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=True|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration3_Name12=OutputConfigurationParameter12
Configuration3_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Hidden|FFill=Hidden|FPad=Hidden|FRegion=Hidden|FText=Hidden|FTrack=Hidden|FVia=Hidden|Layer=BottomLayer|Polygon=Hidden|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name13=OutputConfigurationParameter13
Configuration3_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name14=OutputConfigurationParameter14
Configuration3_Item14=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=BottomOverlay|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name15=OutputConfigurationParameter15
Configuration3_Item15=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name16=OutputConfigurationParameter16
Configuration3_Item16=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Hidden|Layer=MultiLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name17=OutputConfigurationParameter17
Configuration3_Item17=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name18=OutputConfigurationParameter18
Configuration3_Item18=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration3_Name19=OutputConfigurationParameter19
Configuration3_Item19=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
PcbPrintPreferences3=
OutputType4=Gerber
OutputName4=Gerber Files
OutputCategory4=Fabrication
OutputDocumentPath4=
OutputVariantName4=
OutputEnabled4=1
OutputEnabled4_OutputMedium1=0
OutputEnabled4_OutputMedium2=0
OutputEnabled4_OutputMedium3=2
OutputEnabled4_OutputMedium4=0
OutputDefault4=0
Configuration4_Name1=OutputConfigurationParameter1
Configuration4_Item1=AddToAllLayerClasses.Set= |AddToAllPlots.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|CentrePlots=False|DrillDrawingSymbol=GraphicsSymbol|DrillDrawingSymbolSize=200000|EmbeddedApertures=True|FilmBorderSize=10000000|FilmXSize=200000000|FilmYSize=160000000|FlashAllFills=False|FlashPadShapes=True|G54OnApertureChange=False|GenerateDRCRulesFile=True|GenerateDRCRulesFile=True|GenerateReliefShapes=True|GerberUnit=Imperial|GerberUnit=Imperial|IncludeUnconnectedMidLayerPads=False|LayerClassesMirror.Set= |LayerClassesPlot.Set= |LeadingAndTrailingZeroesMode=SuppressLeadingZeroes|MaxApertureSize=2500000|MinusApertureTolerance=50|MinusApertureTolerance=50|Mirror.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean|MirrorDrillDrawingPlots=False|MirrorDrillGuidePlots=False|NoRegularPolygons=False|NumberOfDecimals=5|NumberOfDecimals=5|OptimizeChangeLocationCommands=True|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Panelize=False|Plot.Set=SerializeLayerHash.Version~2,ClassName~TLayerToBoolean,16973830~1,16973832~1,16973834~1,16777217~1,16777218~1,16777219~1,16842751~1,16973835~1,16973833~1,16973831~1,16973837~1|PlotPositivePlaneLayers=False|PlotUsedDrillDrawingLayerPairs=True|PlotUsedDrillGuideLayerPairs=True|PlusApertureTolerance=50|PlusApertureTolerance=50|Record=GerberView|SoftwareArcs=False|Sorted=False|Sorted=False|DocumentPath=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part1_Sensor_board\Hardware\PlantSensor_V02_PCB.PcbDoc
OutputType5=NC Drill
OutputName5=NC Drill Files
OutputCategory5=Fabrication
OutputDocumentPath5=
OutputVariantName5=
OutputEnabled5=1
OutputEnabled5_OutputMedium1=0
OutputEnabled5_OutputMedium2=0
OutputEnabled5_OutputMedium3=3
OutputEnabled5_OutputMedium4=0
OutputDefault5=0
Configuration5_Name1=OutputConfigurationParameter1
Configuration5_Item1=BoardEdgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes|DocumentPath=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part1_Sensor_board\Hardware\PlantSensor_V02_PCB.PcbDoc
OutputType6=Drill
OutputName6=Drill Drawing/Guides
OutputCategory6=Fabrication
OutputDocumentPath6=
OutputVariantName6=
OutputEnabled6=0
OutputEnabled6_OutputMedium1=0
OutputEnabled6_OutputMedium2=0
OutputEnabled6_OutputMedium3=0
OutputEnabled6_OutputMedium4=0
OutputDefault6=0
PageOptions6=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=0|PaperKind=A4|PaperIndex=9
Configuration6_Name1=OutputConfigurationParameter1
Configuration6_Item1=DesignatorDisplayMode=Physical|PrintArea=DesignExtent|PrintAreaLowerLeftCornerX=0|PrintAreaLowerLeftCornerY=0|PrintAreaUpperRightCornerX=0|PrintAreaUpperRightCornerY=0|Record=PcbPrintView
Configuration6_Name2=OutputConfigurationParameter2
Configuration6_Item2=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=0|Mirror=False|Name=Drill Drawing For (Bottom Layer,Top Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration6_Name3=OutputConfigurationParameter3
Configuration6_Item3=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=BottomLayer|DLayer2=TopLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillDrawing|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name4=OutputConfigurationParameter4
Configuration6_Item4=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name5=OutputConfigurationParameter5
Configuration6_Item5=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name6=OutputConfigurationParameter6
Configuration6_Item6=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name7=OutputConfigurationParameter7
Configuration6_Item7=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=0|Record=PcbPrintLayer
Configuration6_Name8=OutputConfigurationParameter8
Configuration6_Item8=IncludeBoardCutouts=False|IncludeBottomLayerComponents=True|IncludeMultiLayerComponents=True|IncludeTopLayerComponents=True|IncludeViewports=True|Index=1|Mirror=False|Name=Drill Guide For (Bottom Layer,Top Layer)|PadNumberFontSize=14|Record=PcbPrintOut|ShowHoles=False|ShowPadNets=False|ShowPadNumbers=False|SubstituteFonts=False
Configuration6_Name9=OutputConfigurationParameter9
Configuration6_Item9=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=BottomLayer|DLayer2=TopLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=DrillGuide|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name10=OutputConfigurationParameter10
Configuration6_Item10=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical1|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name11=OutputConfigurationParameter11
Configuration6_Item11=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=KeepOutLayer|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name12=OutputConfigurationParameter12
Configuration6_Item12=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical13|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
Configuration6_Name13=OutputConfigurationParameter13
Configuration6_Item13=CArc=Full|CFill=Full|Comment=Full|Coordinate=Full|CPad=Full|CRegion=Full|CText=Full|CTrack=Full|CVia=Full|Designator=Full|Dimension=Full|DLayer1=TopLayer|DLayer2=BottomLayer|DrillType=Regular|FArc=Full|FFill=Full|FPad=Full|FRegion=Full|FText=Full|FTrack=Full|FVia=Full|Layer=Mechanical15|Polygon=Full|PrintOutIndex=1|Record=PcbPrintLayer
PcbPrintPreferences6=
OutputType7=BOM_PartType
OutputName7=Bill of Materials
OutputCategory7=Report
OutputDocumentPath7=
OutputVariantName7=
OutputEnabled7=1
OutputEnabled7_OutputMedium1=0
OutputEnabled7_OutputMedium2=0
OutputEnabled7_OutputMedium3=4
OutputEnabled7_OutputMedium4=0
OutputDefault7=0
PageOptions7=Record=PageOptions|CenterHorizontal=True|CenterVertical=True|PrintScale=1.00|XCorrection=1.00|YCorrection=1.00|PrintKind=0|BorderSize=5000000|LeftOffset=0|BottomOffset=0|Orientation=2|PaperLength=1000|PaperWidth=1000|Scale=100|PaperSource=7|PrintQuality=-3|MediaType=1|DitherType=10|PrintScaleMode=1|PaperKind=A4|PaperIndex=9
Configuration7_Name1=ColumnNameFormat
Configuration7_Item1=CaptionAsName
Configuration7_Name2=Filter
Configuration7_Item2=545046300E5446696C74657257726170706572000D46696C7465722E416374697665090F46696C7465722E43726974657269610A04000000000000000000
Configuration7_Name3=General
Configuration7_Item3=OpenExported=False|AddToProject=False|ForceFit=False|NotFitted=False|Database=False|DatabasePriority=False|IncludePCBData=False|IncludeVaultData=False|IncludeAlternatives=False|ShowExportOptions=True|TemplateFilename=|BatchMode=5|FormWidth=1732|FormHeight=1296|SupplierProdQty=1|SupplierAutoQty=False|SupplierUseCachedPricing=False|SupplierCurrency=<none>
Configuration7_Name4=GroupOrder
Configuration7_Item4=Manufacturer Part Number=True
Configuration7_Name5=OutputConfigurationParameter1
Configuration7_Item5=dgeRoutToolDia=2000000|GenerateBoardEdgeRout=False|GenerateDrilledSlotsG85=False|GenerateEIADrillFile=False|GenerateSeparatePlatedNonPlatedFiles=False|NumberOfDecimals=5|NumberOfUnits=2|OptimizeChangeLocationCommands=True|OriginPosition=Relative|Record=DrillView|Units=Imperial|ZeroesMode=SuppressTrailingZeroes|DocumentPath=[Project]
Configuration7_Name6=SortOrder
Configuration7_Item6=Designator=Up|Comment=Up|Footprint=Up
Configuration7_Name7=VisibleOrder
Configuration7_Item7=Designator=175|Description=175|Distributor=175|Distributor Part Number=175|Manufacturer=175|Manufacturer Part Number=175|Quantity=177
[PublishSettings]
OutputFilePath2=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Central_board\Hardware\Project Outputs for CentralUnit\MFGOutput.PDF
ReleaseManaged2=1
OutputBasePath2=Project Outputs for CentralUnit
OutputPathMedia2=
OutputPathMediaValue2=
OutputPathOutputer2=[Output Type]
OutputPathOutputerPrefix2=
OutputPathOutputerValue2=
OutputFileName2=MFGOutput.PDF
OutputFileNameMulti2=
UseOutputNameForMulti2=1
OutputFileNameSpecial2=
OpenOutput2=1
PromptOverwrite2=1
PublishMethod2=0
ZoomLevel2=50
FitSCHPrintSizeToDoc2=1
FitPCBPrintSizeToDoc2=1
GenerateNetsInfo2=1
MarkPins2=1
MarkNetLabels2=1
MarkPortsId2=1
GenerateTOC2=1
ShowComponentParameters2=1
GlobalBookmarks2=0
PDFACompliance2=Disabled
PDFVersion2=Default
OutputFilePath3=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Central_board\Hardware\Project Outputs for CentralUnit\
ReleaseManaged3=1
OutputBasePath3=Project Outputs for CentralUnit
OutputPathMedia3=
OutputPathMediaValue3=
OutputPathOutputer3=[Output Type]
OutputPathOutputerPrefix3=
OutputPathOutputerValue3=
OutputFileName3=
OutputFileNameMulti3=
UseOutputNameForMulti3=1
OutputFileNameSpecial3=
OpenOutput3=0
OutputFilePath4=
ReleaseManaged4=1
OutputBasePath4=Project Outputs for CentralUnit
OutputPathMedia4=
OutputPathMediaValue4=
OutputPathOutputer4=[Output Type]
OutputPathOutputerPrefix4=
OutputPathOutputerValue4=
OutputFileName4=
OutputFileNameMulti4=
UseOutputNameForMulti4=1
OutputFileNameSpecial4=
OpenOutput4=1
PromptOverwrite4=1
PublishMethod4=5
ZoomLevel4=50
FitSCHPrintSizeToDoc4=1
FitPCBPrintSizeToDoc4=1
GenerateNetsInfo4=1
MarkPins4=1
MarkNetLabels4=1
MarkPortsId4=1
MediaFormat4=Windows Media file (*.wmv,*.wma,*.asf)
FixedDimensions4=1
Width4=352
Height4=288
MultiFile4=0
FramesPerSecond4=25
FramesPerSecondDenom4=1
AviPixelFormat4=7
AviCompression4=MP42 MS-MPEG4 V2
AviQuality4=100
FFmpegVideoCodecId4=13
FFmpegPixelFormat4=0
FFmpegQuality4=80
WmvVideoCodecName4=Windows Media Video V7
WmvQuality4=80
[GeneratedFilesSettings]
RelativeOutputPath2=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Central_board\Hardware\Project Outputs for CentralUnit\MFGOutput.PDF
OpenOutputs2=1
RelativeOutputPath3=C:\Users\Sasa\Desktop\git\DIY_PlantSystem_public\Part2_Central_board\Hardware\Project Outputs for CentralUnit\
OpenOutputs3=0
AddToProject3=0
TimestampFolder3=0
UseOutputName3=0
OpenODBOutput3=0
OpenGerberOutput3=0
OpenNCDrillOutput3=0
OpenIPCOutput3=0
EnableReload3=0
RelativeOutputPath4=
OpenOutputs4=1
@@ -0,0 +1,20 @@
------------------------------------------------------------------------------------------
Gerber File Extension Report For: CentralUnit_PCB.GBR 2021-05-27 23:14:40
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
Layer Extension Layer Description
------------------------------------------------------------------------------------------
.GTL Top Layer
.GBL Bottom Layer
.GTO Top Overlay
.GTP Top Paste
.GTS Top Solder
.GBS Bottom Solder
.GBP Bottom Paste
.GBO Bottom Overlay
.GKO Keep-Out Layer
.GD1 Drill Drawing
.GG1 Drill Guide
------------------------------------------------------------------------------------------
@@ -0,0 +1,7 @@
G04 Layer_Color=128*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
M02*
@@ -0,0 +1,145 @@
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD52C,0.12611*%
%ADD53C,0.06800*%
%ADD54C,0.05524*%
%ADD55R,0.05524X0.05524*%
%ADD56C,0.20485*%
%ADD57R,0.06706X0.06706*%
%ADD58C,0.06706*%
%ADD59O,0.06706X0.08674*%
%ADD60R,0.06706X0.08674*%
D52*
X232142Y-8224D02*
D03*
X245921D02*
D03*
X95973Y-8228D02*
D03*
X82193D02*
D03*
X68413D02*
D03*
X24374D02*
D03*
X38154D02*
D03*
X154421Y-8224D02*
D03*
X168201D02*
D03*
X181980D02*
D03*
X140642D02*
D03*
X126862D02*
D03*
D53*
X230921Y-40224D02*
D03*
X250921D02*
D03*
D54*
X165921Y-41728D02*
D03*
X189421D02*
D03*
X279921Y-73224D02*
D03*
X207421D02*
D03*
D55*
X165921Y-51728D02*
D03*
X189421D02*
D03*
X279921Y-83224D02*
D03*
X207421D02*
D03*
D56*
X289500Y0D02*
D03*
Y-197000D02*
D03*
X0Y0D02*
D03*
Y-197000D02*
D03*
D57*
X22000Y-190500D02*
D03*
Y-60000D02*
D03*
D58*
X32000Y-190500D02*
D03*
X12000Y-60000D02*
D03*
D59*
X162039Y-174499D02*
D03*
X152039D02*
D03*
X142039D02*
D03*
X132039D02*
D03*
X122039D02*
D03*
X112039D02*
D03*
X102039D02*
D03*
X92039D02*
D03*
X82039D02*
D03*
X72039D02*
D03*
X62039D02*
D03*
X52039D02*
D03*
X42039D02*
D03*
X32039D02*
D03*
X22039D02*
D03*
Y-74499D02*
D03*
X32039D02*
D03*
X42039D02*
D03*
X52039D02*
D03*
X62039D02*
D03*
X72039D02*
D03*
X82039D02*
D03*
X92039D02*
D03*
X102039D02*
D03*
X112039D02*
D03*
X122039D02*
D03*
X132039D02*
D03*
X142039D02*
D03*
X152039D02*
D03*
D60*
X162039D02*
D03*
M02*
@@ -0,0 +1,309 @@
G04 Layer_Color=128*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD61C,0.00200*%
D61*
X228992Y-8224D02*
X235291D01*
X232142Y-11374D02*
Y-5075D01*
X242772Y-8224D02*
X249071D01*
X245921Y-11374D02*
Y-5075D01*
X92823Y-8228D02*
X99122D01*
X95973Y-11378D02*
Y-5079D01*
X79043Y-8228D02*
X85343D01*
X82193Y-11378D02*
Y-5079D01*
X65264Y-8228D02*
X71563D01*
X68413Y-11378D02*
Y-5079D01*
X21224Y-8228D02*
X27524D01*
X24374Y-11378D02*
Y-5079D01*
X35004Y-8228D02*
X41303D01*
X38154Y-11378D02*
Y-5079D01*
X151272Y-8224D02*
X157571D01*
X154421Y-11374D02*
Y-5075D01*
X165051Y-8224D02*
X171350D01*
X168201Y-11374D02*
Y-5075D01*
X178831Y-8224D02*
X185130D01*
X181980Y-11374D02*
Y-5075D01*
X137492Y-8224D02*
X143791D01*
X140642Y-11374D02*
Y-5075D01*
X123713Y-8224D02*
X130012D01*
X126862Y-11374D02*
Y-5075D01*
X229421Y-40224D02*
X232421D01*
X230921Y-41724D02*
Y-38724D01*
X249421Y-40224D02*
X252421D01*
X250921Y-41724D02*
Y-38724D01*
X164347Y-41728D02*
X167496D01*
X165921Y-43303D02*
Y-40154D01*
X164347Y-51728D02*
X167496D01*
X165921Y-53303D02*
Y-50154D01*
X187847Y-41728D02*
X190996D01*
X189421Y-43303D02*
Y-40154D01*
X187847Y-51728D02*
X190996D01*
X189421Y-53303D02*
Y-50154D01*
X278346Y-73224D02*
X281496D01*
X279921Y-74799D02*
Y-71650D01*
X278346Y-83224D02*
X281496D01*
X279921Y-84799D02*
Y-81650D01*
X205847Y-73224D02*
X208996D01*
X207421Y-74799D02*
Y-71650D01*
X205847Y-83224D02*
X208996D01*
X207421Y-84799D02*
Y-81650D01*
X282610Y0D02*
X296390D01*
X289500Y-6890D02*
Y6890D01*
X282610Y-197000D02*
X296390D01*
X289500Y-203890D02*
Y-190110D01*
X-6890Y0D02*
X6890D01*
X0Y-6890D02*
Y6890D01*
X-6890Y-197000D02*
X6890D01*
X0Y-203890D02*
Y-190110D01*
X20228Y-190500D02*
X23772D01*
X22000Y-192272D02*
Y-188728D01*
X30228Y-190500D02*
X33772D01*
X32000Y-192272D02*
Y-188728D01*
X160465Y-174499D02*
X163614D01*
X162039Y-176074D02*
Y-172924D01*
X150465Y-174499D02*
X153614D01*
X152039Y-176074D02*
Y-172924D01*
X140465Y-174499D02*
X143614D01*
X142039Y-176074D02*
Y-172924D01*
X130465Y-174499D02*
X133614D01*
X132039Y-176074D02*
Y-172924D01*
X120465Y-174499D02*
X123614D01*
X122039Y-176074D02*
Y-172924D01*
X110465Y-174499D02*
X113614D01*
X112039Y-176074D02*
Y-172924D01*
X100465Y-174499D02*
X103614D01*
X102039Y-176074D02*
Y-172924D01*
X90465Y-174499D02*
X93614D01*
X92039Y-176074D02*
Y-172924D01*
X80465Y-174499D02*
X83614D01*
X82039Y-176074D02*
Y-172924D01*
X70465Y-174499D02*
X73614D01*
X72039Y-176074D02*
Y-172924D01*
X60465Y-174499D02*
X63614D01*
X62039Y-176074D02*
Y-172924D01*
X50465Y-174499D02*
X53614D01*
X52039Y-176074D02*
Y-172924D01*
X40465Y-174499D02*
X43614D01*
X42039Y-176074D02*
Y-172924D01*
X30465Y-174499D02*
X33614D01*
X32039Y-176074D02*
Y-172924D01*
X20465Y-174499D02*
X23614D01*
X22039Y-176074D02*
Y-172924D01*
X20465Y-74499D02*
X23614D01*
X22039Y-76074D02*
Y-72924D01*
X30465Y-74499D02*
X33614D01*
X32039Y-76074D02*
Y-72924D01*
X40465Y-74499D02*
X43614D01*
X42039Y-76074D02*
Y-72924D01*
X50465Y-74499D02*
X53614D01*
X52039Y-76074D02*
Y-72924D01*
X60465Y-74499D02*
X63614D01*
X62039Y-76074D02*
Y-72924D01*
X70465Y-74499D02*
X73614D01*
X72039Y-76074D02*
Y-72924D01*
X80465Y-74499D02*
X83614D01*
X82039Y-76074D02*
Y-72924D01*
X90465Y-74499D02*
X93614D01*
X92039Y-76074D02*
Y-72924D01*
X100465Y-74499D02*
X103614D01*
X102039Y-76074D02*
Y-72924D01*
X110465Y-74499D02*
X113614D01*
X112039Y-76074D02*
Y-72924D01*
X120465Y-74499D02*
X123614D01*
X122039Y-76074D02*
Y-72924D01*
X130465Y-74499D02*
X133614D01*
X132039Y-76074D02*
Y-72924D01*
X140465Y-74499D02*
X143614D01*
X142039Y-76074D02*
Y-72924D01*
X150465Y-74499D02*
X153614D01*
X152039Y-76074D02*
Y-72924D01*
X160465Y-74499D02*
X163614D01*
X162039Y-76074D02*
Y-72924D01*
X20228Y-60000D02*
X23772D01*
X22000Y-61772D02*
Y-58228D01*
X10228Y-60000D02*
X13772D01*
X12000Y-61772D02*
Y-58228D01*
X200634Y-21228D02*
X202209D01*
X201421Y-22016D02*
Y-20441D01*
X230847Y-80575D02*
X232421D01*
X231634Y-81362D02*
Y-79787D01*
X244232Y-80575D02*
X245807D01*
X245020Y-81362D02*
Y-79787D01*
X244134Y-118024D02*
X245709D01*
X244921Y-118811D02*
Y-117236D01*
X239134Y-118224D02*
X240709D01*
X239921Y-119012D02*
Y-117437D01*
X249134Y-118224D02*
X250709D01*
X249921Y-119012D02*
Y-117437D01*
X244134Y-113224D02*
X245709D01*
X244921Y-114012D02*
Y-112437D01*
X244134Y-123224D02*
X245709D01*
X244921Y-124012D02*
Y-122437D01*
X220984Y-118524D02*
X222559D01*
X221772Y-119311D02*
Y-117736D01*
X153134Y-27228D02*
X154709D01*
X153921Y-28016D02*
Y-26441D01*
X59213Y-23000D02*
X60787D01*
X60000Y-23787D02*
Y-22213D01*
X271213Y-59000D02*
X272787D01*
X272000Y-59787D02*
Y-58213D01*
X116634Y-46228D02*
X118209D01*
X117421Y-47016D02*
Y-45441D01*
X151823Y-53390D02*
X153398D01*
X152610Y-54177D02*
Y-52602D01*
X43197Y-38728D02*
X44772D01*
X43984Y-39516D02*
Y-37941D01*
M02*
@@ -0,0 +1,33 @@
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD41C,0.00394*%
D41*
X1606Y23622D02*
G03*
X-18079Y3937I0J-19685D01*
G01*
X308685D02*
G03*
X289000Y23622I-19685J0D01*
G01*
X-18079Y-196000D02*
G03*
X1606Y-215685I19685J0D01*
G01*
X289000D02*
G03*
X308685Y-196000I0J19685D01*
G01*
X-18079D02*
X-18079Y3937D01*
X1606Y23622D02*
X289000D01*
X308685Y-196000D02*
X308685Y3937D01*
X1606Y-215685D02*
X289000D01*
M02*
@@ -0,0 +1,713 @@
G04 Layer_Physical_Order=1*
G04 Layer_Color=255*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD10R,0.05905X0.05905*%
%ADD11R,0.39370X0.39370*%
%ADD12R,0.03543X0.07874*%
%ADD13R,0.11811X0.23622*%
%ADD14R,0.03543X0.03799*%
%ADD15O,0.01772X0.05709*%
%ADD16R,0.03799X0.03543*%
%ADD17R,0.03543X0.03150*%
%ADD18R,0.05276X0.07087*%
%ADD19C,0.02362*%
%ADD20C,0.01772*%
%ADD21C,0.03150*%
%ADD22C,0.01181*%
%ADD23C,0.05905*%
%ADD24C,0.03937*%
%ADD25C,0.11811*%
%ADD26C,0.06000*%
%ADD27C,0.04724*%
%ADD28R,0.04724X0.04724*%
%ADD29C,0.19685*%
%ADD30R,0.05905X0.05905*%
%ADD31C,0.05905*%
%ADD32O,0.05905X0.07874*%
%ADD33R,0.05905X0.07874*%
%ADD34C,0.03150*%
D10*
X268921Y-40335D02*
D03*
Y-54114D02*
D03*
D11*
X244921Y-114173D02*
D03*
D12*
X258307Y-73181D02*
D03*
X251713Y-72984D02*
D03*
X245020D02*
D03*
X238327D02*
D03*
X231634D02*
D03*
D13*
X230921Y-40224D02*
D03*
X250921D02*
D03*
D14*
X117421Y-40878D02*
D03*
Y-34579D02*
D03*
X123421D02*
D03*
Y-40878D02*
D03*
X129421Y-34429D02*
D03*
Y-40728D02*
D03*
X81921Y-31378D02*
D03*
Y-25079D02*
D03*
X216421Y-106024D02*
D03*
Y-99724D02*
D03*
Y-118524D02*
D03*
Y-112224D02*
D03*
X152000Y-157350D02*
D03*
Y-163650D02*
D03*
X122000Y-157350D02*
D03*
Y-163650D02*
D03*
X49421Y-46079D02*
D03*
Y-52378D02*
D03*
D15*
X139583Y-53390D02*
D03*
X142142D02*
D03*
X144701D02*
D03*
X147260D02*
D03*
X139583Y-36067D02*
D03*
X142142D02*
D03*
X144701D02*
D03*
X147260D02*
D03*
D16*
X159272Y-27228D02*
D03*
X165571D02*
D03*
X159272Y-21228D02*
D03*
X165571D02*
D03*
X196071Y-27228D02*
D03*
X189772D02*
D03*
X196071Y-21228D02*
D03*
X189772D02*
D03*
X72071Y-25228D02*
D03*
X65772D02*
D03*
X98571D02*
D03*
X92272D02*
D03*
X272071Y-63724D02*
D03*
X265772D02*
D03*
X40071Y-55728D02*
D03*
X33772D02*
D03*
X54571Y-22728D02*
D03*
X48272D02*
D03*
D17*
X32063Y-42500D02*
D03*
X39937Y-38957D02*
D03*
Y-46043D02*
D03*
D18*
X25791Y-22728D02*
D03*
X37051D02*
D03*
D19*
X72071Y-25228D02*
X92272D01*
X129347Y-34504D02*
X129421Y-34429D01*
X235921Y-89224D02*
X238421Y-86724D01*
Y-73079D01*
X238327Y-72984D02*
X238421Y-73079D01*
X59787Y-23000D02*
X60000D01*
X54571Y-22728D02*
X59515D01*
X59787Y-23000D01*
X60213D02*
X61851Y-24638D01*
X65181D02*
X65772Y-25228D01*
X60000Y-23000D02*
X60213D01*
X61851Y-24638D02*
X65181D01*
X82057Y-8364D02*
X82193Y-8228D01*
X81921Y-25079D02*
X82057Y-24943D01*
Y-8364D01*
X181980Y-21352D02*
X182104Y-21228D01*
X189772D01*
X181980Y-27916D02*
X182668Y-27228D01*
X189772D01*
X265500Y-73203D02*
X265772Y-72931D01*
Y-63724D01*
X37051Y-22728D02*
X37602Y-22177D01*
Y-8779D02*
X38154Y-8228D01*
X37602Y-22177D02*
Y-8779D01*
X117496Y-34504D02*
X129347D01*
X221500Y-90608D02*
X222884Y-89224D01*
X220116Y-105761D02*
X221500Y-104377D01*
X216421Y-106024D02*
X216684Y-105761D01*
X221500Y-104377D02*
Y-90608D01*
X216684Y-105761D02*
X220116D01*
X222884Y-89224D02*
X235921D01*
X40051Y-38842D02*
X43870D01*
D20*
X140921Y-41728D02*
X142142Y-40508D01*
Y-36067D01*
X129421Y-40843D02*
Y-40728D01*
X130307Y-41728D02*
X140921D01*
X129421Y-40843D02*
X130307Y-41728D01*
X142921Y-45728D02*
X144701Y-43949D01*
Y-36067D01*
X123421Y-44690D02*
X124459Y-45728D01*
X123421Y-44690D02*
Y-40878D01*
X124459Y-45728D02*
X142921D01*
X129421Y-34429D02*
X133122D01*
X134921Y-36228D01*
X139583D02*
Y-36067D01*
X134921Y-36228D02*
X139583D01*
X144701Y-36067D02*
Y-23449D01*
X147921Y-20228D01*
X150921D02*
X154421Y-16728D01*
X147921Y-20228D02*
X150921D01*
X154421Y-16728D02*
Y-8224D01*
X140642D02*
X142142Y-9724D01*
Y-36067D02*
Y-9724D01*
X107421Y-49228D02*
X111583Y-53390D01*
X107421Y-49228D02*
Y-35728D01*
X108646Y-34504D01*
X111583Y-53390D02*
X139583D01*
X207421Y-73224D02*
X213224D01*
X146739Y-62500D02*
X165500D01*
X179000Y-76000D01*
Y-174000D02*
Y-76000D01*
X144701Y-60462D02*
X146739Y-62500D01*
X144701Y-60462D02*
Y-53390D01*
X142142Y-63642D02*
Y-53390D01*
Y-63642D02*
X145000Y-66500D01*
X163500D01*
X171500Y-74500D01*
Y-158500D02*
Y-74500D01*
X108646Y-34504D02*
X117421D01*
X117496D01*
X147260Y-40760D02*
Y-36067D01*
Y-40760D02*
X151000Y-44500D01*
X156000D01*
X158000Y-46500D01*
Y-56000D02*
Y-46500D01*
Y-56000D02*
X160500Y-58500D01*
X169000D01*
X186500Y-76000D01*
X166350Y-163650D02*
X171500Y-158500D01*
X152000Y-163650D02*
X166350D01*
X122000D02*
X122020Y-163669D01*
Y-174479D02*
X122039Y-174499D01*
X122020Y-174479D02*
Y-163669D01*
X122039Y-181539D02*
Y-174499D01*
Y-181539D02*
X124000Y-183500D01*
X169500D01*
X179000Y-174000D01*
X112039Y-185539D02*
Y-174499D01*
Y-185539D02*
X115500Y-189000D01*
X173500D01*
X186500Y-176000D02*
Y-76000D01*
X173500Y-189000D02*
X186500Y-176000D01*
X213224Y-73224D02*
X216500Y-76500D01*
X216421Y-99724D02*
X216500Y-99646D01*
Y-76500D01*
X216421Y-112224D02*
Y-106024D01*
D21*
X196071Y-21228D02*
X201421D01*
X153921Y-27228D02*
X159272D01*
X196071D02*
Y-21228D01*
X159272Y-27228D02*
Y-21228D01*
X165571D02*
X171772D01*
X172000Y-21000D01*
X171728Y-27228D02*
X172000Y-27500D01*
X165571Y-27228D02*
X171728D01*
X102150Y-195650D02*
X176850D01*
X272071Y-63724D02*
Y-57264D01*
X268921Y-54114D02*
X272071Y-57264D01*
X25791Y-40291D02*
Y-22728D01*
X49224Y-46315D02*
X49421Y-46118D01*
Y-46079D01*
X12000Y-60000D02*
Y-7500D01*
X28000Y8500D01*
X43500D01*
X25083Y-22020D02*
X25791Y-22728D01*
X24374Y-8228D02*
X25083Y-8937D01*
Y-22020D02*
Y-8937D01*
X37051Y-22728D02*
X48272D01*
X52039Y-74499D02*
Y-65539D01*
X49421Y-62921D02*
X52039Y-65539D01*
X49421Y-62921D02*
Y-52378D01*
X81980Y-74440D02*
X82039Y-74499D01*
X81921Y-31378D02*
X81980Y-31437D01*
Y-74440D02*
Y-31437D01*
X32000Y-190500D02*
X97000D01*
X102150Y-195650D01*
X22000Y-190500D02*
X22020Y-190480D01*
Y-174519D01*
X22039Y-174499D01*
X117421Y-34504D02*
Y1421D01*
X117500Y1500D01*
X117421Y-34579D02*
Y-34504D01*
X22000Y-60000D02*
X22020Y-60020D01*
Y-74479D02*
X22039Y-74499D01*
X22020Y-74479D02*
Y-60020D01*
X176850Y-195650D02*
X195000Y-177500D01*
Y-73224D01*
X152000Y-163650D02*
X152020Y-163669D01*
Y-174479D02*
Y-163669D01*
Y-174479D02*
X152039Y-174499D01*
X152020Y-174519D02*
X152039Y-174499D01*
X14000Y-165500D02*
X22150Y-157350D01*
X14000Y-195500D02*
Y-165500D01*
Y-195500D02*
X17500Y-199000D01*
X29500D01*
X31473Y-197027D01*
Y-191027D02*
X32000Y-190500D01*
X31473Y-197027D02*
Y-191027D01*
X22150Y-157350D02*
X122000D01*
X152000D01*
X40004Y-55661D02*
X40071Y-55728D01*
X40004Y-55661D02*
Y-46043D01*
X40134D02*
X40169Y-46079D01*
X49421D01*
X39937Y-46043D02*
X40004D01*
X40134D01*
X28000Y-42500D02*
X32063D01*
X25791Y-40291D02*
X28000Y-42500D01*
D22*
X231634Y-80575D02*
Y-72984D01*
X245020Y-80575D02*
Y-72984D01*
X216421Y-118524D02*
X221772D01*
X98571Y-25228D02*
Y-21071D01*
X95973Y-18473D02*
X98571Y-21071D01*
X95973Y-18473D02*
Y-8228D01*
X117421Y-46228D02*
Y-40878D01*
X147260Y-53390D02*
X152610D01*
D23*
X271921Y-8224D02*
X279921Y-16224D01*
X245921Y-8224D02*
X271921D01*
X279921Y-73224D02*
Y-16224D01*
X244791Y-7095D02*
Y2709D01*
Y-7095D02*
X245921Y-8224D01*
X239000Y8500D02*
X244791Y2709D01*
X38154Y-8228D02*
X39283Y-7098D01*
X181980Y8480D02*
X182000Y8500D01*
X181980Y-8224D02*
Y8480D01*
X182000Y8500D02*
X239000D01*
X39283Y4284D02*
X43500Y8500D01*
X39283Y-7098D02*
Y4284D01*
X189228Y-41728D02*
X189421D01*
X181980Y-34480D02*
X189228Y-41728D01*
X181980Y-21352D02*
Y-8224D01*
Y-34480D02*
Y-27916D01*
Y-21352D01*
X43500Y8500D02*
X182000D01*
D24*
X258307Y-73181D02*
X258329Y-73203D01*
X279900D02*
X279921Y-73224D01*
X268866Y-40280D02*
X268921Y-40335D01*
X250921Y-40224D02*
X250976Y-40280D01*
X268866D01*
X250921Y-40783D02*
X251713Y-41574D01*
Y-72984D02*
Y-41574D01*
X250921Y-40783D02*
Y-40224D01*
X168201Y-10355D02*
X172000Y-14154D01*
X168201Y-10355D02*
Y-8224D01*
X172000Y-21000D02*
Y-14154D01*
Y-41000D02*
Y-27500D01*
Y-21000D01*
Y-41000D02*
X177500Y-46500D01*
X207421Y-73224D02*
Y-50579D01*
X217776Y-40224D01*
X230921D01*
X166072Y-41578D02*
X171422D01*
X165921Y-41728D02*
X166072Y-41578D01*
X171422D02*
X172000Y-41000D01*
X258329Y-73203D02*
X265500D01*
X279900D01*
X166694Y-6718D02*
X168201Y-8224D01*
X166694Y-6718D02*
Y-806D01*
X164388Y1500D02*
X166694Y-806D01*
X97479Y-6722D02*
Y-2521D01*
X101500Y1500D01*
X95973Y-8228D02*
X97479Y-6722D01*
X101500Y1500D02*
X117500D01*
X164388D01*
X195000Y-73224D02*
X207421D01*
X177500Y-55724D02*
X195000Y-73224D01*
X177500Y-55724D02*
Y-46500D01*
D25*
X232142Y-8224D02*
D03*
X245921D02*
D03*
X95973Y-8228D02*
D03*
X82193D02*
D03*
X68413D02*
D03*
X24374D02*
D03*
X38154D02*
D03*
X154421Y-8224D02*
D03*
X168201D02*
D03*
X181980D02*
D03*
X140642D02*
D03*
X126862D02*
D03*
D26*
X230921Y-40224D02*
D03*
X250921D02*
D03*
D27*
X165921Y-41728D02*
D03*
X189421D02*
D03*
X279921Y-73224D02*
D03*
X207421D02*
D03*
D28*
X165921Y-51728D02*
D03*
X189421D02*
D03*
X279921Y-83224D02*
D03*
X207421D02*
D03*
D29*
X289500Y0D02*
D03*
Y-197000D02*
D03*
X0Y0D02*
D03*
Y-197000D02*
D03*
D30*
X22000Y-190500D02*
D03*
Y-60000D02*
D03*
D31*
X32000Y-190500D02*
D03*
X12000Y-60000D02*
D03*
D32*
X162039Y-174499D02*
D03*
X152039D02*
D03*
X142039D02*
D03*
X132039D02*
D03*
X122039D02*
D03*
X112039D02*
D03*
X102039D02*
D03*
X92039D02*
D03*
X82039D02*
D03*
X72039D02*
D03*
X62039D02*
D03*
X52039D02*
D03*
X42039D02*
D03*
X32039D02*
D03*
X22039D02*
D03*
Y-74499D02*
D03*
X32039D02*
D03*
X42039D02*
D03*
X52039D02*
D03*
X62039D02*
D03*
X72039D02*
D03*
X82039D02*
D03*
X92039D02*
D03*
X102039D02*
D03*
X112039D02*
D03*
X122039D02*
D03*
X132039D02*
D03*
X142039D02*
D03*
X152039D02*
D03*
D33*
X162039D02*
D03*
D34*
X201421Y-21228D02*
D03*
X231634Y-80575D02*
D03*
X245020D02*
D03*
X244921Y-118024D02*
D03*
X239921Y-118224D02*
D03*
X249921D02*
D03*
X244921Y-113224D02*
D03*
Y-123224D02*
D03*
X221772Y-118524D02*
D03*
X153921Y-27228D02*
D03*
X60000Y-23000D02*
D03*
X272000Y-59000D02*
D03*
X117421Y-46228D02*
D03*
X152610Y-53390D02*
D03*
X43984Y-38728D02*
D03*
M02*
@@ -0,0 +1,143 @@
G04 Layer_Color=8421504*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD10R,0.05905X0.05905*%
%ADD11R,0.39370X0.39370*%
%ADD12R,0.03543X0.07874*%
%ADD13R,0.11811X0.23622*%
%ADD14R,0.03543X0.03799*%
%ADD15O,0.01772X0.05709*%
%ADD16R,0.03799X0.03543*%
%ADD17R,0.03543X0.03150*%
%ADD18R,0.05276X0.07087*%
D10*
X268921Y-40335D02*
D03*
Y-54114D02*
D03*
D11*
X244921Y-114173D02*
D03*
D12*
X258307Y-73181D02*
D03*
X251713Y-72984D02*
D03*
X245020D02*
D03*
X238327D02*
D03*
X231634D02*
D03*
D13*
X230921Y-40224D02*
D03*
X250921D02*
D03*
D14*
X117421Y-40878D02*
D03*
Y-34579D02*
D03*
X123421D02*
D03*
Y-40878D02*
D03*
X129421Y-34429D02*
D03*
Y-40728D02*
D03*
X81921Y-31378D02*
D03*
Y-25079D02*
D03*
X216421Y-106024D02*
D03*
Y-99724D02*
D03*
Y-118524D02*
D03*
Y-112224D02*
D03*
X152000Y-157350D02*
D03*
Y-163650D02*
D03*
X122000Y-157350D02*
D03*
Y-163650D02*
D03*
X49421Y-46079D02*
D03*
Y-52378D02*
D03*
D15*
X139583Y-53390D02*
D03*
X142142D02*
D03*
X144701D02*
D03*
X147260D02*
D03*
X139583Y-36067D02*
D03*
X142142D02*
D03*
X144701D02*
D03*
X147260D02*
D03*
D16*
X159272Y-27228D02*
D03*
X165571D02*
D03*
X159272Y-21228D02*
D03*
X165571D02*
D03*
X196071Y-27228D02*
D03*
X189772D02*
D03*
X196071Y-21228D02*
D03*
X189772D02*
D03*
X72071Y-25228D02*
D03*
X65772D02*
D03*
X98571D02*
D03*
X92272D02*
D03*
X272071Y-63724D02*
D03*
X265772D02*
D03*
X40071Y-55728D02*
D03*
X33772D02*
D03*
X54571Y-22728D02*
D03*
X48272D02*
D03*
D17*
X32063Y-42500D02*
D03*
X39937Y-38957D02*
D03*
Y-46043D02*
D03*
D18*
X25791Y-22728D02*
D03*
X37051D02*
D03*
M02*
@@ -0,0 +1,281 @@
G04 Layer_Color=8388736*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD43R,0.06706X0.06706*%
%ADD44R,0.40170X0.40170*%
%ADD45R,0.04343X0.08674*%
%ADD46R,0.12611X0.24422*%
%ADD47R,0.04343X0.04599*%
%ADD48O,0.02572X0.06509*%
%ADD49R,0.04599X0.04343*%
%ADD50R,0.04343X0.03950*%
%ADD51R,0.06076X0.07887*%
%ADD52C,0.12611*%
%ADD53C,0.06800*%
%ADD54C,0.05524*%
%ADD55R,0.05524X0.05524*%
%ADD56C,0.20485*%
%ADD57R,0.06706X0.06706*%
%ADD58C,0.06706*%
%ADD59O,0.06706X0.08674*%
%ADD60R,0.06706X0.08674*%
D43*
X268921Y-40335D02*
D03*
Y-54114D02*
D03*
D44*
X244921Y-114173D02*
D03*
D45*
X258307Y-73181D02*
D03*
X251713Y-72984D02*
D03*
X245020D02*
D03*
X238327D02*
D03*
X231634D02*
D03*
D46*
X230921Y-40224D02*
D03*
X250921D02*
D03*
D47*
X117421Y-40878D02*
D03*
Y-34579D02*
D03*
X123421D02*
D03*
Y-40878D02*
D03*
X129421Y-34429D02*
D03*
Y-40728D02*
D03*
X81921Y-31378D02*
D03*
Y-25079D02*
D03*
X216421Y-106024D02*
D03*
Y-99724D02*
D03*
Y-118524D02*
D03*
Y-112224D02*
D03*
X152000Y-157350D02*
D03*
Y-163650D02*
D03*
X122000Y-157350D02*
D03*
Y-163650D02*
D03*
X49421Y-46079D02*
D03*
Y-52378D02*
D03*
D48*
X139583Y-53390D02*
D03*
X142142D02*
D03*
X144701D02*
D03*
X147260D02*
D03*
X139583Y-36067D02*
D03*
X142142D02*
D03*
X144701D02*
D03*
X147260D02*
D03*
D49*
X159272Y-27228D02*
D03*
X165571D02*
D03*
X159272Y-21228D02*
D03*
X165571D02*
D03*
X196071Y-27228D02*
D03*
X189772D02*
D03*
X196071Y-21228D02*
D03*
X189772D02*
D03*
X72071Y-25228D02*
D03*
X65772D02*
D03*
X98571D02*
D03*
X92272D02*
D03*
X272071Y-63724D02*
D03*
X265772D02*
D03*
X40071Y-55728D02*
D03*
X33772D02*
D03*
X54571Y-22728D02*
D03*
X48272D02*
D03*
D50*
X32063Y-42500D02*
D03*
X39937Y-38957D02*
D03*
Y-46043D02*
D03*
D51*
X25791Y-22728D02*
D03*
X37051D02*
D03*
D52*
X232142Y-8224D02*
D03*
X245921D02*
D03*
X95973Y-8228D02*
D03*
X82193D02*
D03*
X68413D02*
D03*
X24374D02*
D03*
X38154D02*
D03*
X154421Y-8224D02*
D03*
X168201D02*
D03*
X181980D02*
D03*
X140642D02*
D03*
X126862D02*
D03*
D53*
X230921Y-40224D02*
D03*
X250921D02*
D03*
D54*
X165921Y-41728D02*
D03*
X189421D02*
D03*
X279921Y-73224D02*
D03*
X207421D02*
D03*
D55*
X165921Y-51728D02*
D03*
X189421D02*
D03*
X279921Y-83224D02*
D03*
X207421D02*
D03*
D56*
X289500Y0D02*
D03*
Y-197000D02*
D03*
X0Y0D02*
D03*
Y-197000D02*
D03*
D57*
X22000Y-190500D02*
D03*
Y-60000D02*
D03*
D58*
X32000Y-190500D02*
D03*
X12000Y-60000D02*
D03*
D59*
X162039Y-174499D02*
D03*
X152039D02*
D03*
X142039D02*
D03*
X132039D02*
D03*
X122039D02*
D03*
X112039D02*
D03*
X102039D02*
D03*
X92039D02*
D03*
X82039D02*
D03*
X72039D02*
D03*
X62039D02*
D03*
X52039D02*
D03*
X42039D02*
D03*
X32039D02*
D03*
X22039D02*
D03*
Y-74499D02*
D03*
X32039D02*
D03*
X42039D02*
D03*
X52039D02*
D03*
X62039D02*
D03*
X72039D02*
D03*
X82039D02*
D03*
X92039D02*
D03*
X102039D02*
D03*
X112039D02*
D03*
X122039D02*
D03*
X132039D02*
D03*
X142039D02*
D03*
X152039D02*
D03*
D60*
X162039D02*
D03*
M02*
@@ -0,0 +1,225 @@
*************************************************************
FileName = CentralUnit_PCB.GBR
AutoAperture = True
*************************************************************
Generating : Top Layer
File : CentralUnit_PCB.GTL
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D10
D11
D12
D13
D14
D15
D16
D17
D18
D19
D20
D21
D22
D23
D24
D25
D26
D27
D28
D29
D30
D31
D32
D33
D34
*************************************************************
*************************************************************
Generating : Bottom Layer
File : CentralUnit_PCB.GBL
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D25
D26
D27
D28
D29
D30
D31
D32
D33
D34
*************************************************************
*************************************************************
Generating : Top Overlay
File : CentralUnit_PCB.GTO
Adding Layer : Top Overlay
Used DCodes :
D35
D36
D37
D38
D39
D40
D41
D42
*************************************************************
*************************************************************
Generating : Top Paste
File : CentralUnit_PCB.GTP
Adding Layer : Top Paste
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D10
D11
D12
D13
D14
D15
D16
D17
D18
*************************************************************
*************************************************************
Generating : Top Solder
File : CentralUnit_PCB.GTS
Adding Layer : Top Solder
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D43
D44
D45
D46
D47
D48
D49
D50
D51
D52
D53
D54
D55
D56
D57
D58
D59
D60
*************************************************************
*************************************************************
Generating : Bottom Solder
File : CentralUnit_PCB.GBS
Adding Layer : Bottom Solder
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D52
D53
D54
D55
D56
D57
D58
D59
D60
*************************************************************
*************************************************************
Generating : Bottom Paste
File : CentralUnit_PCB.GBP
Adding Layer : Bottom Paste
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
*************************************************************
*************************************************************
Generating : Bottom Overlay
File : CentralUnit_PCB.GBO
Adding Layer : Bottom Overlay
Used DCodes :
*************************************************************
*************************************************************
Generating : Keep-Out Layer
File : CentralUnit_PCB.GKO
Adding Layer : Keep-Out Layer
Used DCodes :
D41
*************************************************************
*************************************************************
Generating : Drill Drawing
File : CentralUnit_PCB.GD1
Adding Drill Pair : Top Layer-Bottom Layer
Adding Layer : Drill Drawing
Used DCodes :
D37
D39
D41
D61
D62
D63
D64
*************************************************************
*************************************************************
Generating : Drill Guide
File : CentralUnit_PCB.GG1
Adding Drill Pair : Top Layer-Bottom Layer
Adding Layer : Drill Guide
Used DCodes :
D61
*************************************************************

Some files were not shown because too many files have changed in this diff Show More