cleanup and function-splitup

This commit is contained in:
formtapez
2019-04-30 23:32:10 +02:00
parent 1c2f184417
commit 8885c2667b
29 changed files with 6066 additions and 1021 deletions

View File

@@ -4650,9 +4650,78 @@
</configuration>
<group>
<name>App</name>
<file>
<name>$PROJ_DIR$\..\Source\adc.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\adc.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\bitmasks.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\delay.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\delay.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\dht22.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\dht22.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\ds18b20.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\ds18b20.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\global.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\global.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\interrupts.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\interrupts.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\led.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\led.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\OSAL_ZigUP.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\random.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\random.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\uart.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\uart.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\utils.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\utils.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\ws2812.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\ws2812.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\Source\zcl_zigup.c</name>
</file>

5034
src/ZigUP/CC2530DB/ZigUP.ewt Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,3 @@
/*********************************************************************
* INCLUDES
*/
#include "ZComDef.h"
#include "hal_drivers.h"
#include "OSAL.h"
@@ -24,9 +20,6 @@
#include "zcl_zigup.h"
/*********************************************************************
* GLOBAL VARIABLES
*/
// The order in this table must be identical to the task initialization calls below in osalInitTask.
const pTaskEventHandlerFn tasksArr[] = {
@@ -51,10 +44,6 @@ const pTaskEventHandlerFn tasksArr[] = {
const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );
uint16 *tasksEvents;
/*********************************************************************
* FUNCTIONS
*********************************************************************/
/*********************************************************************
* @fn osalInitTasks
*

59
src/ZigUP/Source/adc.c Executable file
View File

@@ -0,0 +1,59 @@
#include "ZComDef.h"
#include "onboard.h"
#include "bitmasks.h"
#include "adc.h"
uint16 ADC_Read(void)
{
int16 result = 0;
ADCCON3 = b00110000; // internal reference, decimation 512, channel 0, start conversation
while (!(ADCCON1 & (1<<7))); // wait for conversation to finish
result = (uint16)ADCL;
result |= (uint16)(ADCH << 8);
if (result < 0) result = 0;
result >>= 2;
return result;
}
uint16 ADC_Read_Avg(void)
{
uint32 result = 0;
for (uint8 i=0; i<32; i++) result += ADC_Read();
return (uint16)(result / 32);
}
float ADC_GetVoltage(void)
{
return ADC_Read_Avg() * 0.003949905;
}
uint16 ADC_Temperature(void)
{
int16 result = 0;
ADCCON3 = b00111110; // internal reference, decimation 512, temperature, start conversation
while (!(ADCCON1 & (1<<7))); // wait for conversation to finish
result = (uint16)ADCL;
result |= (uint16)(ADCH << 8);
if (result < 0) result = 0;
result >>= 2;
return result;
}
uint16 ADC_Temperature_Avg(void)
{
TR0 = 1; // connect the temperature sensor to the SOC_ADC
ATEST = 1; // Enables the temperature sensor
uint32 result = 0;
for (uint8 i=0; i<32; i++) result += ADC_Temperature();
ATEST = 0; // Disables the temperature sensor
TR0 = 0; // disconnect the temperature sensor from the SOC_ADC
return (uint16)(result / 32);
}
float ADC_GetTemperature(void)
{
return ADC_Temperature_Avg() * 0.0556 - 303.89;
}

6
src/ZigUP/Source/adc.h Executable file
View File

@@ -0,0 +1,6 @@
uint16 ADC_Read(void);
uint16 ADC_Read_Avg(void);
float ADC_GetVoltage(void);
uint16 ADC_Temperature(void);
uint16 ADC_Temperature_Avg(void);
float ADC_GetTemperature(void);

256
src/ZigUP/Source/bitmasks.h Executable file
View File

@@ -0,0 +1,256 @@
#define b00000000 0x00
#define b00000001 0x01
#define b00000010 0x02
#define b00000011 0x03
#define b00000100 0x04
#define b00000101 0x05
#define b00000110 0x06
#define b00000111 0x07
#define b00001000 0x08
#define b00001001 0x09
#define b00001010 0x0a
#define b00001011 0x0b
#define b00001100 0x0c
#define b00001101 0x0d
#define b00001110 0x0e
#define b00001111 0x0f
#define b00010000 0x10
#define b00010001 0x11
#define b00010010 0x12
#define b00010011 0x13
#define b00010100 0x14
#define b00010101 0x15
#define b00010110 0x16
#define b00010111 0x17
#define b00011000 0x18
#define b00011001 0x19
#define b00011010 0x1a
#define b00011011 0x1b
#define b00011100 0x1c
#define b00011101 0x1d
#define b00011110 0x1e
#define b00011111 0x1f
#define b00100000 0x20
#define b00100001 0x21
#define b00100010 0x22
#define b00100011 0x23
#define b00100100 0x24
#define b00100101 0x25
#define b00100110 0x26
#define b00100111 0x27
#define b00101000 0x28
#define b00101001 0x29
#define b00101010 0x2a
#define b00101011 0x2b
#define b00101100 0x2c
#define b00101101 0x2d
#define b00101110 0x2e
#define b00101111 0x2f
#define b00110000 0x30
#define b00110001 0x31
#define b00110010 0x32
#define b00110011 0x33
#define b00110100 0x34
#define b00110101 0x35
#define b00110110 0x36
#define b00110111 0x37
#define b00111000 0x38
#define b00111001 0x39
#define b00111010 0x3a
#define b00111011 0x3b
#define b00111100 0x3c
#define b00111101 0x3d
#define b00111110 0x3e
#define b00111111 0x3f
#define b01000000 0x40
#define b01000001 0x41
#define b01000010 0x42
#define b01000011 0x43
#define b01000100 0x44
#define b01000101 0x45
#define b01000110 0x46
#define b01000111 0x47
#define b01001000 0x48
#define b01001001 0x49
#define b01001010 0x4a
#define b01001011 0x4b
#define b01001100 0x4c
#define b01001101 0x4d
#define b01001110 0x4e
#define b01001111 0x4f
#define b01010000 0x50
#define b01010001 0x51
#define b01010010 0x52
#define b01010011 0x53
#define b01010100 0x54
#define b01010101 0x55
#define b01010110 0x56
#define b01010111 0x57
#define b01011000 0x58
#define b01011001 0x59
#define b01011010 0x5a
#define b01011011 0x5b
#define b01011100 0x5c
#define b01011101 0x5d
#define b01011110 0x5e
#define b01011111 0x5f
#define b01100000 0x60
#define b01100001 0x61
#define b01100010 0x62
#define b01100011 0x63
#define b01100100 0x64
#define b01100101 0x65
#define b01100110 0x66
#define b01100111 0x67
#define b01101000 0x68
#define b01101001 0x69
#define b01101010 0x6a
#define b01101011 0x6b
#define b01101100 0x6c
#define b01101101 0x6d
#define b01101110 0x6e
#define b01101111 0x6f
#define b01110000 0x70
#define b01110001 0x71
#define b01110010 0x72
#define b01110011 0x73
#define b01110100 0x74
#define b01110101 0x75
#define b01110110 0x76
#define b01110111 0x77
#define b01111000 0x78
#define b01111001 0x79
#define b01111010 0x7a
#define b01111011 0x7b
#define b01111100 0x7c
#define b01111101 0x7d
#define b01111110 0x7e
#define b01111111 0x7f
#define b10000000 0x80
#define b10000001 0x81
#define b10000010 0x82
#define b10000011 0x83
#define b10000100 0x84
#define b10000101 0x85
#define b10000110 0x86
#define b10000111 0x87
#define b10001000 0x88
#define b10001001 0x89
#define b10001010 0x8a
#define b10001011 0x8b
#define b10001100 0x8c
#define b10001101 0x8d
#define b10001110 0x8e
#define b10001111 0x8f
#define b10010000 0x90
#define b10010001 0x91
#define b10010010 0x92
#define b10010011 0x93
#define b10010100 0x94
#define b10010101 0x95
#define b10010110 0x96
#define b10010111 0x97
#define b10011000 0x98
#define b10011001 0x99
#define b10011010 0x9a
#define b10011011 0x9b
#define b10011100 0x9c
#define b10011101 0x9d
#define b10011110 0x9e
#define b10011111 0x9f
#define b10100000 0xa0
#define b10100001 0xa1
#define b10100010 0xa2
#define b10100011 0xa3
#define b10100100 0xa4
#define b10100101 0xa5
#define b10100110 0xa6
#define b10100111 0xa7
#define b10101000 0xa8
#define b10101001 0xa9
#define b10101010 0xaa
#define b10101011 0xab
#define b10101100 0xac
#define b10101101 0xad
#define b10101110 0xae
#define b10101111 0xaf
#define b10110000 0xb0
#define b10110001 0xb1
#define b10110010 0xb2
#define b10110011 0xb3
#define b10110100 0xb4
#define b10110101 0xb5
#define b10110110 0xb6
#define b10110111 0xb7
#define b10111000 0xb8
#define b10111001 0xb9
#define b10111010 0xba
#define b10111011 0xbb
#define b10111100 0xbc
#define b10111101 0xbd
#define b10111110 0xbe
#define b10111111 0xbf
#define b11000000 0xc0
#define b11000001 0xc1
#define b11000010 0xc2
#define b11000011 0xc3
#define b11000100 0xc4
#define b11000101 0xc5
#define b11000110 0xc6
#define b11000111 0xc7
#define b11001000 0xc8
#define b11001001 0xc9
#define b11001010 0xca
#define b11001011 0xcb
#define b11001100 0xcc
#define b11001101 0xcd
#define b11001110 0xce
#define b11001111 0xcf
#define b11010000 0xd0
#define b11010001 0xd1
#define b11010010 0xd2
#define b11010011 0xd3
#define b11010100 0xd4
#define b11010101 0xd5
#define b11010110 0xd6
#define b11010111 0xd7
#define b11011000 0xd8
#define b11011001 0xd9
#define b11011010 0xda
#define b11011011 0xdb
#define b11011100 0xdc
#define b11011101 0xdd
#define b11011110 0xde
#define b11011111 0xdf
#define b11100000 0xe0
#define b11100001 0xe1
#define b11100010 0xe2
#define b11100011 0xe3
#define b11100100 0xe4
#define b11100101 0xe5
#define b11100110 0xe6
#define b11100111 0xe7
#define b11101000 0xe8
#define b11101001 0xe9
#define b11101010 0xea
#define b11101011 0xeb
#define b11101100 0xec
#define b11101101 0xed
#define b11101110 0xee
#define b11101111 0xef
#define b11110000 0xf0
#define b11110001 0xf1
#define b11110010 0xf2
#define b11110011 0xf3
#define b11110100 0xf4
#define b11110101 0xf5
#define b11110110 0xf6
#define b11110111 0xf7
#define b11111000 0xf8
#define b11111001 0xf9
#define b11111010 0xfa
#define b11111011 0xfb
#define b11111100 0xfc
#define b11111101 0xfd
#define b11111110 0xfe
#define b11111111 0xff

18
src/ZigUP/Source/delay.c Executable file
View File

@@ -0,0 +1,18 @@
#include "ZComDef.h"
#include "delay.h"
void _delay_us(uint16 microSecs)
{
while(microSecs--)
{
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
}
}
void _delay_ms(uint16 milliSecs)
{
while(milliSecs--)
{
_delay_us(1000);
}
}

2
src/ZigUP/Source/delay.h Executable file
View File

@@ -0,0 +1,2 @@
void _delay_us(uint16 microSecs);
void _delay_ms(uint16 milliSecs);

107
src/ZigUP/Source/dht22.c Executable file
View File

@@ -0,0 +1,107 @@
#include <stdio.h>
#include "onboard.h"
#include "bitmasks.h"
#include "delay.h"
#include "dht22.h"
#include "uart.h"
#include "global.h"
int DHT22_Measure(void)
{
uint8 last_state = 0xFF;
uint8 i;
uint8 j = 0;
uint8 counter = 0;
uint8 checksum = 0;
uint8 dht22_data[5];
/*
uint8 dht22_debug[100];
uint8 debugcnt;
for(debugcnt = 0; debugcnt < 100; debugcnt++) dht22_debug[debugcnt] = 0;
debugcnt = 0;
*/
P0DIR |= (1<<7); // output
P0_7 = 1;
_delay_ms(250);
P0_7 = 0;
_delay_ms(1);
P0DIR &= ~(1<<7); // input
for(i = 0; i < 85; i++)
{
counter = 0;
while(P0_7 == last_state)
{
counter++;
_delay_us(1);
if(counter > 60) break; // Exit if not responsive
}
last_state = P0_7;
if(counter > 60) break; // Double check for stray sensor
// Ignore the first 3 transitions (the 80us x 2 start condition plus the first ready-to-send-bit state), and discard ready-to-send-bit counts
if((i >= 4) && ((i % 2) != 0))
{
dht22_data[j / 8] <<= 1;
// dht22_debug[debugcnt++] = counter;
if(counter > 20) // detect "1" bit time
{
dht22_data[j / 8] |= 1;
}
j++;
}
}
char buffer[100];
/*
sprintf(buffer, "j: %u", j);
UART_String(buffer);
for(i = 0; i < 5; i++)
{
sprintf(buffer, "DHT22: (%u) %u\n", i, dht22_data[i]);
UART_String(buffer);
}
for(debugcnt = 0; debugcnt < 100; debugcnt++)
{
sprintf(buffer, "DHT22 Debug: (%u) %u\n", debugcnt, dht22_debug[debugcnt]);
UART_String(buffer);
}
*/
// If we have 5 bytes (40 bits), wrap-up and end
if(j >= 40)
{
// The first 2 bytes are humidity values, the next 2 are temperature, the final byte is the checksum
checksum = dht22_data[0] + dht22_data[1] + dht22_data[2] + dht22_data[3];
checksum &= 0xFF;
if(dht22_data[4] == checksum)
{
float humidity = (dht22_data[0] * 256 + dht22_data[1]) / 10.0;
float temperature = ((dht22_data[2] & b01111111)* 256 + dht22_data[3]) / 10.0;
if (dht22_data[2] & b10000000) temperature = -temperature; // negative temperatures when MSB is set
EXT_Temperature = temperature;
EXT_Humidity = humidity;
sprintf(buffer, "DHT22: %.1f <20>C / %.1f %%\n", temperature, humidity);
UART_String(buffer);
return (1);
}
else
{
UART_String("DHT22: CRC-Fail");
return (0);
}
}
else
{
UART_String("DHT22: Timeout");
return (0);
}
}

1
src/ZigUP/Source/dht22.h Executable file
View File

@@ -0,0 +1 @@
int DHT22_Measure(void);

103
src/ZigUP/Source/ds18b20.c Executable file
View File

@@ -0,0 +1,103 @@
#include <stdio.h>
#include "onboard.h"
#include "ZComDef.h"
#include "bitmasks.h"
#include "delay.h"
#include "ds18b20.h"
#include "uart.h"
#include "global.h"
// Sends one bit to bus
void ds18b20_send(uint8 bit)
{
P0DIR |= (1<<7); // output
P0_7 = 0;
_delay_us(5);
if (bit==1) P0_7 = 1;
_delay_us(80);
P0_7 = 1;
}
// Reads one bit from bus
uint8 ds18b20_read(void)
{
P0DIR |= (1<<7); // output
P0_7 = 0;
_delay_us(2);
P0_7 = 1;
_delay_us(15);
P0DIR &= ~(1<<7); // input
return P0_7;
}
// Sends one byte to bus
void ds18b20_send_byte(int8 data)
{
uint8 i,x;
for(i=0;i<8;i++)
{
x = data>>i;
x &= 0x01;
ds18b20_send(x);
}
_delay_us(100);
}
// Reads one byte from bus
uint8 ds18b20_read_byte(void)
{
uint8 i;
uint8 data = 0;
for (i=0;i<8;i++)
{
if(ds18b20_read()) data|=0x01<<i;
_delay_us(15);
}
return(data);
}
// Sends reset pulse
uint8 ds18b20_RST_PULSE(void)
{
P0DIR |= (1<<7); // output
P0_7 = 0;
_delay_us(500);
P0_7 = 1;
P0DIR &= ~(1<<7); // input
_delay_us(500);
return P0_7;
}
// Returns temperature from sensor
uint8 ds18b20_get_temp(void)
{
char buffer[100];
uint8 temp1, temp2;
if(ds18b20_RST_PULSE())
{
ds18b20_send_byte(0xCC);
ds18b20_send_byte(0x44);
_delay_ms(750);
ds18b20_RST_PULSE();
ds18b20_send_byte(0xCC);
ds18b20_send_byte(0xBE);
temp1=ds18b20_read_byte();
temp2=ds18b20_read_byte();
ds18b20_RST_PULSE();
EXT_Temperature = ((uint16)temp1 | (uint16)(temp2 & b00000111) << 8) / 16.0;
// neg. temp
if (temp2 & b00001000) EXT_Temperature = ((uint16)temp1 | (uint16)(temp2 & b00000111) << 8) / 16.0 - 128.0;
// pos. temp
else EXT_Temperature = ((uint16)temp1 | (uint16)(temp2 & b00000111) << 8) / 16.0;
sprintf(buffer, "DS18B20: %.2f <20>C\n", EXT_Temperature);
UART_String(buffer);
return 1;
}
else
{
UART_String("DS18B20: Fail.");
return 0;
}
}

6
src/ZigUP/Source/ds18b20.h Executable file
View File

@@ -0,0 +1,6 @@
void ds18b20_send(uint8 bit);
uint8 ds18b20_read(void);
void ds18b20_send_byte(int8 data);
uint8 ds18b20_read_byte(void);
uint8 ds18b20_RST_PULSE(void);
uint8 ds18b20_get_temp(void);

14
src/ZigUP/Source/global.c Executable file
View File

@@ -0,0 +1,14 @@
#include "ZComDef.h"
float EXT_Temperature = -1000;
float EXT_Humidity = -1000;
float ADC_Voltage = -1000;
float CPU_Temperature = -1000;
uint16 DIG_IN = 0;
byte zclZigUP_TaskID;
uint16 zclZigUPSeqNum=0;
volatile uint32 S0=0;
volatile uint8 STATE_LIGHT=0;
volatile uint8 STATE_LED=0;

14
src/ZigUP/Source/global.h Executable file
View File

@@ -0,0 +1,14 @@
#include "ZComDef.h"
extern float EXT_Temperature;
extern float EXT_Humidity;
extern float ADC_Voltage;
extern float CPU_Temperature;
extern uint16 DIG_IN;
extern byte zclZigUP_TaskID;
extern uint16 zclZigUPSeqNum;
extern volatile uint32 S0;
extern volatile uint8 STATE_LIGHT;
extern volatile uint8 STATE_LED;

121
src/ZigUP/Source/interrupts.c Executable file
View File

@@ -0,0 +1,121 @@
#include <stdio.h>
#include "onboard.h"
#include "ZComDef.h"
#include "bitmasks.h"
#include "delay.h"
#include "ds18b20.h"
#include "uart.h"
#include "global.h"
#include "ws2812.h"
#include "led.h"
#include "interrupts.h"
#include "zcl_zigup.h"
#include "utils.h"
#pragma vector=P0INT_VECTOR
__interrupt void IRQ_S0(void)
{
if (P0IFG & (1<<6)) // Interrupt flag for P0.6 (S0)?
{
// debounce
_delay_ms(5);
if (!P0_6) // still pressed?
{
/*
WS2812_SendLED(255, 0, 0);
_delay_ms(500);
WS2812_SendLED(127, 0, 0);
_delay_ms(500);
WS2812_SendLED(63, 0, 0);
_delay_ms(500);
WS2812_SendLED(0, 255, 0);
_delay_ms(500);
WS2812_SendLED(0, 127, 0);
_delay_ms(500);
WS2812_SendLED(0, 63, 0);
_delay_ms(500);
WS2812_SendLED(0, 0, 255);
_delay_ms(500);
WS2812_SendLED(0, 0, 127);
_delay_ms(500);
WS2812_SendLED(0, 0, 63);
_delay_ms(500);
*/
S0++;
UART_String("[INT] S0!");
char buffer[100];
sprintf(buffer, "S0-Counts: %lu", S0);
UART_String(buffer);
// FactoryReset();
LED(!STATE_LED);
}
// Clear interrupt flags
P0IFG &= ~(1<<6); // Clear Interrupt flag for P0.6 (S0)
IRCON &= ~(1<<5); // Clear Interrupt flag for Port 0
}
}
#pragma vector=P1INT_VECTOR
__interrupt void IRQ_KEY(void)
{
if (P1IFG & (1<<3)) // Interrupt flag for P1.3 (KEY)?
{
// debounce
_delay_ms(20);
if (!P1_3) // still pressed?
{
uint8 counter = 0;
while (!P1_3 && counter++ < 100)
{
_delay_ms(10);
counter++;
}
if (counter > 50) UART_String("lang");
else UART_String("kurz");
WS2812_SendLED(22, 55, 11);
Relais(!STATE_LIGHT);
UART_String("[INT] KEY!");
char buffer[100];
sprintf(buffer, "Light-Status: %u", STATE_LIGHT);
UART_String(buffer);
Measure();
zclZigUP_Reporting();
}
// Clear interrupt flags
P1IFG &= ~(1<<3); // Clear Interrupt flag for P1.3 (KEY)
IRCON2 &= ~(1<<3); // Clear Interrupt flag for Port 1
}
}
#pragma vector=P2INT_VECTOR
__interrupt void IRQ_DIGIN(void)
{
if (P2IFG & (1<<0)) // Interrupt flag for P2.0 (Dig-In)?
{
// debounce
_delay_ms(20);
if (!P2_0) // still pressed?
{
UART_String("[INT] Dig-In!");
DIG_IN = P2_0;
}
// Clear interrupt flags
P2IFG &= ~(1<<0); // Clear Interrupt flag for P2.0 (Dig-In)
IRCON2 &= ~(1<<0); // Clear Interrupt flag for Port 2
}
}

3
src/ZigUP/Source/interrupts.h Executable file
View File

@@ -0,0 +1,3 @@
__interrupt void IRQ_S0(void);
__interrupt void IRQ_KEY(void);
__interrupt void IRQ_DIGIN(void);

20
src/ZigUP/Source/led.c Executable file
View File

@@ -0,0 +1,20 @@
#include "onboard.h"
#include "global.h"
#include "led.h"
void LED(uint8 state)
{
P1SEL &= ~BV(6); // LED = GPIO
if (state) // Switch LED on
{
P1_6 = 1; // ON
}
else // Switch LED off
{
P1_6 = 0; // OFF
}
STATE_LED = state;
}

1
src/ZigUP/Source/led.h Executable file
View File

@@ -0,0 +1 @@
void LED(uint8 state);

9
src/ZigUP/Source/random.c Executable file
View File

@@ -0,0 +1,9 @@
#include "onboard.h"
#include "bitmasks.h"
#include "random.h"
uint8 GetRandomNumber(void)
{
ADCCON1 = b00110111; // Clock the LFSR once (13x unrolling)
return RNDL;
}

1
src/ZigUP/Source/random.h Executable file
View File

@@ -0,0 +1 @@
uint8 GetRandomNumber(void);

29
src/ZigUP/Source/uart.c Executable file
View File

@@ -0,0 +1,29 @@
#include "ZComDef.h"
#include "onboard.h"
#include "uart.h"
void UART_Init(void)
{
U0CSR |= (1<<7); // Mode = UART, Receiver disabled
// U0UCR defaults ok (8,N,1)
U0GCR = 11; // 115200 Baud
U0BAUD = 216; // 115200 Baud
}
void UART_Transmit(char data)
{
U0DBUF = data;
while (U0CSR & (1<<0)); // wait until byte has been sent
}
void UART_String(const char *s)
{
while (*s)
{
UART_Transmit(*s++);
}
UART_Transmit('\r');
UART_Transmit('\n');
}

3
src/ZigUP/Source/uart.h Executable file
View File

@@ -0,0 +1,3 @@
void UART_Init(void);
void UART_Transmit(char data);
void UART_String(const char *s);

38
src/ZigUP/Source/utils.c Executable file
View File

@@ -0,0 +1,38 @@
#include "hal_flash.h"
#include "onboard.h"
#include "delay.h"
#include "uart.h"
#include "global.h"
#include "utils.h"
void FactoryReset(void)
{
UART_String("Performing factory reset...");
for (int i = HAL_NV_PAGE_BEG; i <= (HAL_NV_PAGE_BEG + HAL_NV_PAGE_CNT); i++)
{
HalFlashErase(i);
}
UART_String("Performing system reset...");
SystemReset();
}
void Relais(uint8 state)
{
if (state) // Switch light on
{
P1_1 = 1; // activate ON-solenoid
P1_2 = 0; // deactivate OFF-solenoid
_delay_ms(250);
P1_1 = 0; // deactivate ON-solenoid
}
else // Switch light off
{
P1_1 = 0; // deactivate ON-solenoid
P1_2 = 1; // activate OFF-solenoid
_delay_ms(250);
P1_2 = 0; // deactivate OFF-solenoid
}
STATE_LIGHT = state;
}

2
src/ZigUP/Source/utils.h Executable file
View File

@@ -0,0 +1,2 @@
void FactoryReset(void);
void Relais(uint8 state);

117
src/ZigUP/Source/ws2812.c Executable file
View File

@@ -0,0 +1,117 @@
#include "ZComDef.h"
#include "onboard.h"
#include "ws2812.h"
uint8 WS2812_buffer[WS2812_buffersize];
uint8 WS2812_bit=0;
uint16 WS2812_byte=0;
void WS2812_StoreBit(uint8 bit)
{
// store bit (only the 1 bits)
if (bit) WS2812_buffer[WS2812_byte] |= 1 << WS2812_bit;
WS2812_bit++;
// 8 bits per byte...
if (WS2812_bit > 7)
{
WS2812_bit = 0;
WS2812_byte++;
}
}
void WS2812_SendLED(uint8 red, uint8 green, uint8 blue)
{
P1SEL |= BV(6); // LED = Peripheral
WS2812_bit = 0;
WS2812_byte = 0;
// delete buffer
for (uint16 i=0; i<WS2812_buffersize; i++) WS2812_buffer[i] = 0;
uint8 i;
for (i=8; i; i--)
{
if ((green >> (i-1)) & 1)
{
WS2812_StoreBit(1);
WS2812_StoreBit(1);
WS2812_StoreBit(0);
}
else
{
WS2812_StoreBit(1);
WS2812_StoreBit(0);
WS2812_StoreBit(0);
}
}
for (i=8; i; i--)
{
if ((red >> (i-1)) & 1)
{
WS2812_StoreBit(1);
WS2812_StoreBit(1);
WS2812_StoreBit(0);
}
else
{
WS2812_StoreBit(1);
WS2812_StoreBit(0);
WS2812_StoreBit(0);
}
}
for (i=8; i; i--)
{
if ((blue >> (i-1)) & 1)
{
WS2812_StoreBit(1);
WS2812_StoreBit(1);
WS2812_StoreBit(0);
}
else
{
WS2812_StoreBit(1);
WS2812_StoreBit(0);
WS2812_StoreBit(0);
}
}
// SPI method - a little bit jittery, but LED-Stripes seem to be okay with it
for (uint16 j=0; j<WS2812_buffersize; j++)
{
U1DBUF = WS2812_buffer[j];
while((U1CSR & (1<<0))); // wait until byte is sent
}
/*
// DMA method - slower, timing broken
uint8 DMACONFIG[8];
// DMA source address
DMACONFIG[0] = (uint16)(&WS2812_buffer) >> 8;
DMACONFIG[1] = (uint16)(&WS2812_buffer) & 0xff;
// DMA destination address
DMACONFIG[2] = 0x70;
DMACONFIG[3] = 0xf9; // Address of U1DBUF
// DMA length
DMACONFIG[4] = WS2812_buffersize;
DMACONFIG[5] = WS2812_buffersize;
// DMA block transfer, no trigger
DMACONFIG[6] = b00100000;
// DMA address increment for source only, high priority
DMACONFIG[7] = b01000010;
DMA0CFGH = (uint16)(&DMACONFIG) >> 8; // DMA Channel-0 Configuration Address High Byte
DMA0CFGL = (uint16)(&DMACONFIG) & 0xff; // DMA Channel-0 Configuration Address Low Byte
DMAARM = b00000001; // DMA Arm channel 0
DMAREQ = b00000001; // DMA transfer request channel 0
*/
}

5
src/ZigUP/Source/ws2812.h Executable file
View File

@@ -0,0 +1,5 @@
// buffersize = num_leds * 24 bits * 3 bits per bit / 8 bit
#define WS2812_buffersize 9
void WS2812_StoreBit(uint8 bit);
void WS2812_SendLED(uint8 red, uint8 green, uint8 blue);

View File

@@ -1,72 +1,27 @@
/*********************************************************************
* INCLUDES
*/
#include "zcl_zigup.h"
#include "ZComDef.h"
#include "OSAL.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "MT_SYS.h"
#include "nwk_util.h"
#include "zcl.h"
#include "zcl_ha.h"
#include "zcl_ms.h"
#include "zcl_ezmode.h"
#include "zcl_diagnostic.h"
#include "onboard.h"
/* HAL */
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "NLMEDE.h"
#include "ZDSecMgr.h"
#include "hal_flash.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "zcl_zigup.h"
#include "zcl.h"
#include "zcl_ha.h"
#include "zcl_diagnostic.h"
#include "onboard.h"
#include "ZDSecMgr.h"
#include "bitmasks.h"
#include "delay.h"
#include "ds18b20.h"
#include "uart.h"
#include "global.h"
#include "adc.h"
#include "random.h"
#include "ws2812.h"
#include "interrupts.h"
#include "led.h"
#include "dht22.h"
#include "utils.h"
/*********************************************************************
* MACROS
*/
/*********************************************************************
* CONSTANTS
*/
#define ZIGUP_REPORTING_INTERVAL 5000
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* GLOBAL VARIABLES
*/
byte zclZigUP_TaskID;
uint16 zclZigUPSeqNum=0;
volatile uint32 S0=0;
volatile uint8 STATE_LIGHT=0;
volatile uint8 STATE_LED=0;
#define WS2812_buffersize 9
uint8 WS2812_buffer[WS2812_buffersize];
uint8 WS2812_bit=0;
uint16 WS2812_byte=0;
/*********************************************************************
* GLOBAL FUNCTIONS
*/
/*********************************************************************
* LOCAL VARIABLES
*/
afAddrType_t zclZigUP_DstAddr;
uint16 bindingInClusters[] =
@@ -86,420 +41,19 @@ static endPointDesc_t ZigUP_TestEp =
devStates_t zclZigUP_NwkState = DEV_INIT;
float ADC_Voltage = -1000;;
float CPU_Temperature = -1000;
float EXT_Temperature = -1000;
float EXT_Humidity = -1000;
uint16 DIG_IN = 0;
/*********************************************************************
* LOCAL FUNCTIONS
*/
#pragma inline=forced
void _delay_ns_400(void)
{
/* 13 NOPs == 400nsecs */
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop"); asm("nop"); asm("nop");
}
#pragma inline=forced
void _delay_ns_800(void)
{
/* 26 NOPs == 800nsecs */
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
asm("nop");
}
#pragma inline=forced
void _delay_us(uint16 microSecs)
{
while(microSecs--)
{
asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
}
}
void _delay_ms(uint16 milliSecs)
{
while(milliSecs--)
{
_delay_us(1000);
}
}
void FactoryReset(void)
{
UART0_String("Performing factory reset...");
for (int i = HAL_NV_PAGE_BEG; i <= (HAL_NV_PAGE_BEG + HAL_NV_PAGE_CNT); i++)
{
HalFlashErase(i);
}
UART0_String("Performing system reset...");
SystemReset();
}
uint16 ADC_Read(void)
{
int16 result = 0;
ADCCON3 = b00110000; // internal reference, decimation 512, channel 0, start conversation
while (!(ADCCON1 & (1<<7))); // wait for conversation to finish
result = (uint16)ADCL;
result |= (uint16)(ADCH << 8);
if (result < 0) result = 0;
result >>= 2;
return result;
}
uint16 ADC_Read_Avg(void)
{
uint32 result = 0;
for (uint8 i=0; i<32; i++) result += ADC_Read();
return (uint16)(result / 32);
}
float ADC_GetVoltage(void)
{
return ADC_Read_Avg() * 0.003949905;
}
uint16 ADC_Temperature(void)
{
int16 result = 0;
ADCCON3 = b00111110; // internal reference, decimation 512, temperature, start conversation
while (!(ADCCON1 & (1<<7))); // wait for conversation to finish
result = (uint16)ADCL;
result |= (uint16)(ADCH << 8);
if (result < 0) result = 0;
result >>= 2;
return result;
}
uint16 ADC_Temperature_Avg(void)
{
TR0 = 1; // connect the temperature sensor to the SOC_ADC
ATEST = 1; // Enables the temperature sensor
uint32 result = 0;
for (uint8 i=0; i<32; i++) result += ADC_Temperature();
ATEST = 0; // Disables the temperature sensor
TR0 = 0; // disconnect the temperature sensor from the SOC_ADC
return (uint16)(result / 32);
}
float ADC_GetTemperature(void)
{
return ADC_Temperature_Avg() * 0.0556 - 303.89;
}
void UART0_Init(void)
{
U0CSR |= (1<<7); // Mode = UART, Receiver disabled
// U0UCR defaults ok (8,N,1)
U0GCR = 11; // 115200 Baud
U0BAUD = 216; // 115200 Baud
}
void UART0_Transmit(char data)
{
U0DBUF = data;
while (U0CSR & (1<<0)); // wait until byte has been sent
}
void UART0_String(const char *s)
{
while (*s)
{
UART0_Transmit(*s++);
}
UART0_Transmit('\r');
UART0_Transmit('\n');
}
void Relais(uint8 state)
{
if (state) // Switch light on
{
P1_1 = 1; // ON
P1_2 = 0; // OFF
_delay_ms(250);
P1_1 = 0; // ON
}
else // Switch light off
{
P1_1 = 0; // ON
P1_2 = 1; // OFF
_delay_ms(250);
P1_2 = 0; // OFF
}
STATE_LIGHT = state;
}
void LED(uint8 state)
{
P1SEL &= ~BV(6); // LED = GPIO
if (state) // Switch LED on
{
P1_6 = 1; // ON
}
else // Switch LED off
{
P1_6 = 0; // OFF
}
STATE_LED = state;
}
void WS2812_StoreBit(uint8 bit)
{
// store bit (only the 1 bits)
if (bit) WS2812_buffer[WS2812_byte] |= 1 << WS2812_bit;
WS2812_bit++;
// 8 bits per byte...
if (WS2812_bit > 7)
{
WS2812_bit = 0;
WS2812_byte++;
}
}
void WS2812_SendLED(uint8 red, uint8 green, uint8 blue)
{
P1SEL |= BV(6); // LED = Peripheral
WS2812_bit = 0;
WS2812_byte = 0;
// delete buffer
for (uint16 i=0; i<WS2812_buffersize; i++) WS2812_buffer[i] = 0;
uint8 i;
for (i=8; i; i--)
{
if ((green >> (i-1)) & 1)
{
WS2812_StoreBit(1);
WS2812_StoreBit(1);
WS2812_StoreBit(0);
}
else
{
WS2812_StoreBit(1);
WS2812_StoreBit(0);
WS2812_StoreBit(0);
}
}
for (i=8; i; i--)
{
if ((red >> (i-1)) & 1)
{
WS2812_StoreBit(1);
WS2812_StoreBit(1);
WS2812_StoreBit(0);
}
else
{
WS2812_StoreBit(1);
WS2812_StoreBit(0);
WS2812_StoreBit(0);
}
}
for (i=8; i; i--)
{
if ((blue >> (i-1)) & 1)
{
WS2812_StoreBit(1);
WS2812_StoreBit(1);
WS2812_StoreBit(0);
}
else
{
WS2812_StoreBit(1);
WS2812_StoreBit(0);
WS2812_StoreBit(0);
}
}
// SPI method - a little bit jittery, but LED-Stripes seem to be okay with it
for (uint16 j=0; j<WS2812_buffersize; j++)
{
U1DBUF = WS2812_buffer[j];
while((U1CSR & (1<<0))); // wait until byte is sent
}
/*
// DMA method - slower, timing broken
uint8 DMACONFIG[8];
// DMA source address
DMACONFIG[0] = (uint16)(&WS2812_buffer) >> 8;
DMACONFIG[1] = (uint16)(&WS2812_buffer) & 0xff;
// DMA destination address
DMACONFIG[2] = 0x70;
DMACONFIG[3] = 0xf9; // Address of U1DBUF
// DMA length
DMACONFIG[4] = WS2812_buffersize;
DMACONFIG[5] = WS2812_buffersize;
// DMA block transfer, no trigger
DMACONFIG[6] = b00100000;
// DMA address increment for source only, high priority
DMACONFIG[7] = b01000010;
DMA0CFGH = (uint16)(&DMACONFIG) >> 8; // DMA Channel-0 Configuration Address High Byte
DMA0CFGL = (uint16)(&DMACONFIG) & 0xff; // DMA Channel-0 Configuration Address Low Byte
DMAARM = b00000001; // DMA Arm channel 0
DMAREQ = b00000001; // DMA transfer request channel 0
*/
}
uint8 GetRandomNumber(void)
{
ADCCON1 = b00110111; // Clock the LFSR once (13x unrolling)
return RNDL;
}
#pragma vector=P0INT_VECTOR
__interrupt void IRQ_S0(void)
{
if (P0IFG & (1<<6)) // Interrupt flag for P0.6 (S0)?
{
// debounce
_delay_ms(5);
if (!P0_6) // still pressed?
{
/*
WS2812_SendLED(255, 0, 0);
_delay_ms(500);
WS2812_SendLED(127, 0, 0);
_delay_ms(500);
WS2812_SendLED(63, 0, 0);
_delay_ms(500);
WS2812_SendLED(0, 255, 0);
_delay_ms(500);
WS2812_SendLED(0, 127, 0);
_delay_ms(500);
WS2812_SendLED(0, 63, 0);
_delay_ms(500);
WS2812_SendLED(0, 0, 255);
_delay_ms(500);
WS2812_SendLED(0, 0, 127);
_delay_ms(500);
WS2812_SendLED(0, 0, 63);
_delay_ms(500);
*/
S0++;
UART0_String("[INT] S0!");
char buffer[100];
sprintf(buffer, "S0-Counts: %lu", S0);
UART0_String(buffer);
// FactoryReset();
LED(!STATE_LED);
}
// Clear interrupt flags
P0IFG &= ~(1<<6); // Clear Interrupt flag for P0.6 (S0)
IRCON &= ~(1<<5); // Clear Interrupt flag for Port 0
}
}
#pragma vector=P1INT_VECTOR
__interrupt void IRQ_KEY(void)
{
if (P1IFG & (1<<3)) // Interrupt flag for P1.3 (KEY)?
{
// debounce
_delay_ms(20);
if (!P1_3) // still pressed?
{
uint8 counter = 0;
while (!P1_3 && counter++ < 100)
{
_delay_ms(10);
counter++;
}
if (counter > 50) UART0_String("lang");
else UART0_String("kurz");
WS2812_SendLED(22, 55, 11);
Relais(!STATE_LIGHT);
UART0_String("[INT] KEY!");
char buffer[100];
sprintf(buffer, "Light-Status: %u", STATE_LIGHT);
UART0_String(buffer);
Measure();
zclZigUP_Reporting();
}
// Clear interrupt flags
P1IFG &= ~(1<<3); // Clear Interrupt flag for P1.3 (KEY)
IRCON2 &= ~(1<<3); // Clear Interrupt flag for Port 1
}
}
#pragma vector=P2INT_VECTOR
__interrupt void IRQ_DIGIN(void)
{
if (P2IFG & (1<<0)) // Interrupt flag for P2.0 (Dig-In)?
{
// debounce
_delay_ms(20);
if (!P2_0) // still pressed?
{
UART0_String("[INT] Dig-In!");
DIG_IN = P2_0;
}
// Clear interrupt flags
P2IFG &= ~(1<<0); // Clear Interrupt flag for P2.0 (Dig-In)
IRCON2 &= ~(1<<0); // Clear Interrupt flag for Port 2
}
}
void Measure(void)
{
ADC_Voltage = ADC_GetVoltage();
CPU_Temperature = ADC_GetTemperature();
// if (!DHT22_Measure())
// {
if (!DHT22_Measure())
{
EXT_Humidity = -1000;
if (!ds18b20_get_temp())
{
EXT_Temperature = -1000;
}
// }
}
}
void zclZigUP_Reporting(void)
@@ -552,205 +106,7 @@ void zclZigUP_Reporting(void)
osal_mem_free( pReportCmd );
}
int DHT22_Measure(void)
{
uint8 last_state = 0xFF;
uint8 i;
uint8 j = 0;
uint8 counter = 0;
uint8 checksum = 0;
uint8 dht22_data[5];
/*
uint8 dht22_debug[100];
uint8 debugcnt;
for(debugcnt = 0; debugcnt < 100; debugcnt++) dht22_debug[debugcnt] = 0;
debugcnt = 0;
*/
P0DIR |= (1<<7); // output
P0_7 = 1;
_delay_ms(250);
P0_7 = 0;
_delay_ms(1);
P0DIR &= ~(1<<7); // input
for(i = 0; i < 85; i++)
{
counter = 0;
while(P0_7 == last_state)
{
counter++;
_delay_us(1);
if(counter > 60) break; // Exit if not responsive
}
last_state = P0_7;
if(counter > 60) break; // Double check for stray sensor
// Ignore the first 3 transitions (the 80us x 2 start condition plus the first ready-to-send-bit state), and discard ready-to-send-bit counts
if((i >= 4) && ((i % 2) != 0))
{
dht22_data[j / 8] <<= 1;
// dht22_debug[debugcnt++] = counter;
if(counter > 20) // detect "1" bit time
{
dht22_data[j / 8] |= 1;
}
j++;
}
}
char buffer[100];
/*
sprintf(buffer, "j: %u", j);
UART0_String(buffer);
for(i = 0; i < 5; i++)
{
sprintf(buffer, "DHT22: (%u) %u\n", i, dht22_data[i]);
UART0_String(buffer);
}
for(debugcnt = 0; debugcnt < 100; debugcnt++)
{
sprintf(buffer, "DHT22 Debug: (%u) %u\n", debugcnt, dht22_debug[debugcnt]);
UART0_String(buffer);
}
*/
// If we have 5 bytes (40 bits), wrap-up and end
if(j >= 40)
{
// The first 2 bytes are humidity values, the next 2 are temperature, the final byte is the checksum
checksum = dht22_data[0] + dht22_data[1] + dht22_data[2] + dht22_data[3];
checksum &= 0xFF;
if(dht22_data[4] == checksum)
{
float humidity = (dht22_data[0] * 256 + dht22_data[1]) / 10.0;
float temperature = ((dht22_data[2] & b01111111)* 256 + dht22_data[3]) / 10.0;
if (dht22_data[2] & b10000000) temperature = -temperature; // negative temperatures when MSB is set
EXT_Temperature = temperature;
EXT_Humidity = humidity;
sprintf(buffer, "DHT22: %.1f <20>C / %.1f %%\n", temperature, humidity);
UART0_String(buffer);
return (1);
}
else
{
UART0_String("DHT22: CRC-Fail");
return (0);
}
}
else
{
UART0_String("DHT22: Timeout");
return (0);
}
}
int DS1820_Measure(void)
{
return (0);
}
// Sends one bit to bus
void ds18b20_send(uint8 bit)
{
P0DIR |= (1<<7); // output
P0_7 = 0;
_delay_us(5);
if (bit==1) P0_7 = 1;
_delay_us(80);
P0_7 = 1;
}
// Reads one bit from bus
uint8 ds18b20_read(void)
{
P0DIR |= (1<<7); // output
P0_7 = 0;
_delay_us(2);
P0_7 = 1;
_delay_us(15);
P0DIR &= ~(1<<7); // input
return P0_7;
}
// Sends one byte to bus
void ds18b20_send_byte(int8 data)
{
uint8 i,x;
for(i=0;i<8;i++)
{
x = data>>i;
x &= 0x01;
ds18b20_send(x);
}
_delay_us(100);
}
// Reads one byte from bus
uint8 ds18b20_read_byte(void)
{
uint8 i;
uint8 data = 0;
for (i=0;i<8;i++)
{
if(ds18b20_read()) data|=0x01<<i;
_delay_us(15);
}
return(data);
}
// Sends reset pulse
uint8 ds18b20_RST_PULSE(void)
{
P0DIR |= (1<<7); // output
P0_7 = 0;
_delay_us(500);
P0_7 = 1;
P0DIR &= ~(1<<7); // input
_delay_us(500);
return P0_7;
}
// Returns temperature from sensor
uint8 ds18b20_get_temp(void)
{
char buffer[100];
uint8 temp1, temp2;
if(ds18b20_RST_PULSE())
{
ds18b20_send_byte(0xCC);
ds18b20_send_byte(0x44);
_delay_ms(750);
ds18b20_RST_PULSE();
ds18b20_send_byte(0xCC);
ds18b20_send_byte(0xBE);
temp1=ds18b20_read_byte();
temp2=ds18b20_read_byte();
ds18b20_RST_PULSE();
EXT_Temperature = ((uint16)temp1 | (uint16)(temp2 & b00000111) << 8) / 16.0;
// neg. temp
if (temp2 & b00001000) EXT_Temperature = ((uint16)temp1 | (uint16)(temp2 & b00000111) << 8) / 16.0 - 128.0;
// pos. temp
else EXT_Temperature = ((uint16)temp1 | (uint16)(temp2 & b00000111) << 8) / 16.0;
sprintf(buffer, "DS18B20: %.2f <20>C\n", EXT_Temperature);
UART0_String(buffer);
return 1;
}
else
{
UART0_String("DS18B20: Fail.");
return 0;
}
}
/*********************************************************************
@@ -874,16 +230,16 @@ void zclZigUP_Init( byte task_id )
Relais(0);
// WS2812_SendLED(0, 0, 0);
UART0_Init();
UART_Init();
if (P0_7) UART0_String("Sensor: High.");
else UART0_String("Sensor: Low.");
if (P0_7) UART_String("Sensor: High.");
else UART_String("Sensor: Low.");
osal_start_reload_timer( zclZigUP_TaskID, ZIGUP_REPORTING_EVT, ZIGUP_REPORTING_INTERVAL );
UART0_String("Init done.");
UART_String("Init done.");
@@ -974,7 +330,7 @@ static void zclZigUP_ProcessIdentifyTimeChange( void )
if ( zclZigUP_IdentifyTime > 0 )
{
osal_start_timerEx( zclZigUP_TaskID, ZIGUP_IDENTIFY_TIMEOUT_EVT, 1000 );
HalLedBlink ( HAL_LED_4, 0xFF, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME );
// HalLedBlink ( HAL_LED_4, 0xFF, HAL_LED_DEFAULT_DUTY_CYCLE, HAL_LED_DEFAULT_FLASH_TIME );
}
else
{

View File

@@ -6,15 +6,10 @@ extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
#include "zcl.h"
#include "zcl_general.h"
/*********************************************************************
* CONSTANTS
*/
#define ZIGUP_ENDPOINT 8
#define LIGHT_OFF 0x00
@@ -32,274 +27,6 @@ extern "C"
#define ATTRID_ADC_VOLT 41365
#define ATTRID_DIG_INPUT 41366
// Bitmasks
#define b00000000 0x00
#define b00000001 0x01
#define b00000010 0x02
#define b00000011 0x03
#define b00000100 0x04
#define b00000101 0x05
#define b00000110 0x06
#define b00000111 0x07
#define b00001000 0x08
#define b00001001 0x09
#define b00001010 0x0a
#define b00001011 0x0b
#define b00001100 0x0c
#define b00001101 0x0d
#define b00001110 0x0e
#define b00001111 0x0f
#define b00010000 0x10
#define b00010001 0x11
#define b00010010 0x12
#define b00010011 0x13
#define b00010100 0x14
#define b00010101 0x15
#define b00010110 0x16
#define b00010111 0x17
#define b00011000 0x18
#define b00011001 0x19
#define b00011010 0x1a
#define b00011011 0x1b
#define b00011100 0x1c
#define b00011101 0x1d
#define b00011110 0x1e
#define b00011111 0x1f
#define b00100000 0x20
#define b00100001 0x21
#define b00100010 0x22
#define b00100011 0x23
#define b00100100 0x24
#define b00100101 0x25
#define b00100110 0x26
#define b00100111 0x27
#define b00101000 0x28
#define b00101001 0x29
#define b00101010 0x2a
#define b00101011 0x2b
#define b00101100 0x2c
#define b00101101 0x2d
#define b00101110 0x2e
#define b00101111 0x2f
#define b00110000 0x30
#define b00110001 0x31
#define b00110010 0x32
#define b00110011 0x33
#define b00110100 0x34
#define b00110101 0x35
#define b00110110 0x36
#define b00110111 0x37
#define b00111000 0x38
#define b00111001 0x39
#define b00111010 0x3a
#define b00111011 0x3b
#define b00111100 0x3c
#define b00111101 0x3d
#define b00111110 0x3e
#define b00111111 0x3f
#define b01000000 0x40
#define b01000001 0x41
#define b01000010 0x42
#define b01000011 0x43
#define b01000100 0x44
#define b01000101 0x45
#define b01000110 0x46
#define b01000111 0x47
#define b01001000 0x48
#define b01001001 0x49
#define b01001010 0x4a
#define b01001011 0x4b
#define b01001100 0x4c
#define b01001101 0x4d
#define b01001110 0x4e
#define b01001111 0x4f
#define b01010000 0x50
#define b01010001 0x51
#define b01010010 0x52
#define b01010011 0x53
#define b01010100 0x54
#define b01010101 0x55
#define b01010110 0x56
#define b01010111 0x57
#define b01011000 0x58
#define b01011001 0x59
#define b01011010 0x5a
#define b01011011 0x5b
#define b01011100 0x5c
#define b01011101 0x5d
#define b01011110 0x5e
#define b01011111 0x5f
#define b01100000 0x60
#define b01100001 0x61
#define b01100010 0x62
#define b01100011 0x63
#define b01100100 0x64
#define b01100101 0x65
#define b01100110 0x66
#define b01100111 0x67
#define b01101000 0x68
#define b01101001 0x69
#define b01101010 0x6a
#define b01101011 0x6b
#define b01101100 0x6c
#define b01101101 0x6d
#define b01101110 0x6e
#define b01101111 0x6f
#define b01110000 0x70
#define b01110001 0x71
#define b01110010 0x72
#define b01110011 0x73
#define b01110100 0x74
#define b01110101 0x75
#define b01110110 0x76
#define b01110111 0x77
#define b01111000 0x78
#define b01111001 0x79
#define b01111010 0x7a
#define b01111011 0x7b
#define b01111100 0x7c
#define b01111101 0x7d
#define b01111110 0x7e
#define b01111111 0x7f
#define b10000000 0x80
#define b10000001 0x81
#define b10000010 0x82
#define b10000011 0x83
#define b10000100 0x84
#define b10000101 0x85
#define b10000110 0x86
#define b10000111 0x87
#define b10001000 0x88
#define b10001001 0x89
#define b10001010 0x8a
#define b10001011 0x8b
#define b10001100 0x8c
#define b10001101 0x8d
#define b10001110 0x8e
#define b10001111 0x8f
#define b10010000 0x90
#define b10010001 0x91
#define b10010010 0x92
#define b10010011 0x93
#define b10010100 0x94
#define b10010101 0x95
#define b10010110 0x96
#define b10010111 0x97
#define b10011000 0x98
#define b10011001 0x99
#define b10011010 0x9a
#define b10011011 0x9b
#define b10011100 0x9c
#define b10011101 0x9d
#define b10011110 0x9e
#define b10011111 0x9f
#define b10100000 0xa0
#define b10100001 0xa1
#define b10100010 0xa2
#define b10100011 0xa3
#define b10100100 0xa4
#define b10100101 0xa5
#define b10100110 0xa6
#define b10100111 0xa7
#define b10101000 0xa8
#define b10101001 0xa9
#define b10101010 0xaa
#define b10101011 0xab
#define b10101100 0xac
#define b10101101 0xad
#define b10101110 0xae
#define b10101111 0xaf
#define b10110000 0xb0
#define b10110001 0xb1
#define b10110010 0xb2
#define b10110011 0xb3
#define b10110100 0xb4
#define b10110101 0xb5
#define b10110110 0xb6
#define b10110111 0xb7
#define b10111000 0xb8
#define b10111001 0xb9
#define b10111010 0xba
#define b10111011 0xbb
#define b10111100 0xbc
#define b10111101 0xbd
#define b10111110 0xbe
#define b10111111 0xbf
#define b11000000 0xc0
#define b11000001 0xc1
#define b11000010 0xc2
#define b11000011 0xc3
#define b11000100 0xc4
#define b11000101 0xc5
#define b11000110 0xc6
#define b11000111 0xc7
#define b11001000 0xc8
#define b11001001 0xc9
#define b11001010 0xca
#define b11001011 0xcb
#define b11001100 0xcc
#define b11001101 0xcd
#define b11001110 0xce
#define b11001111 0xcf
#define b11010000 0xd0
#define b11010001 0xd1
#define b11010010 0xd2
#define b11010011 0xd3
#define b11010100 0xd4
#define b11010101 0xd5
#define b11010110 0xd6
#define b11010111 0xd7
#define b11011000 0xd8
#define b11011001 0xd9
#define b11011010 0xda
#define b11011011 0xdb
#define b11011100 0xdc
#define b11011101 0xdd
#define b11011110 0xde
#define b11011111 0xdf
#define b11100000 0xe0
#define b11100001 0xe1
#define b11100010 0xe2
#define b11100011 0xe3
#define b11100100 0xe4
#define b11100101 0xe5
#define b11100110 0xe6
#define b11100111 0xe7
#define b11101000 0xe8
#define b11101001 0xe9
#define b11101010 0xea
#define b11101011 0xeb
#define b11101100 0xec
#define b11101101 0xed
#define b11101110 0xee
#define b11101111 0xef
#define b11110000 0xf0
#define b11110001 0xf1
#define b11110010 0xf2
#define b11110011 0xf3
#define b11110100 0xf4
#define b11110101 0xf5
#define b11110110 0xf6
#define b11110111 0xf7
#define b11111000 0xf8
#define b11111001 0xf9
#define b11111010 0xfa
#define b11111011 0xfb
#define b11111100 0xfc
#define b11111101 0xfd
#define b11111110 0xfe
#define b11111111 0xff
/*********************************************************************
* MACROS
*/
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* VARIABLES
*/
extern SimpleDescriptionFormat_t zclZigUP_SimpleDesc[];
extern CONST zclCommandRec_t zclZigUP_Cmds[];
@@ -317,43 +44,13 @@ extern uint8 zclZigUP_IdentifyCommissionState;
// OnOff attributes
extern uint8 zclZigUP_OnOff;
/*********************************************************************
* FUNCTIONS
*/
void _delay_ns_400(void);
void _delay_ns_800(void);
void _delay_us(uint16 microSecs);
void _delay_ms(uint16 milliSecs);
void FactoryReset(void);
uint16 ADC_Read(void);
uint16 ADC_Read_Avg(void);
float ADC_GetVoltage(void);
uint16 ADC_Temperature(void);
uint16 ADC_Temperature_Avg(void);
float ADC_GetTemperature(void);
void UART0_Init(void);
void UART0_Transmit(char data);
void UART0_String(const char *s);
void Relais(uint8 state);
void LED(uint8 state);
void WS2812_StoreBit(uint8 bit);
void WS2812_SendLED(uint8 red, uint8 green, uint8 blue);
uint8 GetRandomNumber(void);
__interrupt void IRQ_S0(void);
__interrupt void IRQ_KEY(void);
__interrupt void IRQ_DIGIN(void);
void zclZigUP_Reporting(void);
void Measure(void);
int DHT22_Measure(void);
int DS1820_Measure(void);
void ds18b20_send(uint8 bit);
uint8 ds18b20_read(void);
void ds18b20_send_byte(int8 data);
uint8 ds18b20_read_byte(void);
uint8 ds18b20_RST_PULSE(void);
uint8 ds18b20_get_temp(void);
static void zclZigUP_BasicResetCB( void );
static void zclZigUP_IdentifyCB( zclIdentify_t *pCmd );
@@ -387,9 +84,6 @@ extern void zclZigUP_Init( byte task_id );
extern UINT16 zclZigUP_event_loop( byte task_id, UINT16 events );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif

View File

@@ -1,6 +1,3 @@
/*********************************************************************
* INCLUDES
*/
#include "ZComDef.h"
#include "OSAL.h"
#include "AF.h"
@@ -23,28 +20,12 @@
#include "zcl_zigup.h"
/*********************************************************************
* CONSTANTS
*/
#define ZIGUP_DEVICE_VERSION 0
#define ZIGUP_FLAGS 0
#define ZIGUP_HWVERSION 1
#define ZIGUP_ZCLVERSION 1
/*********************************************************************
* TYPEDEFS
*/
/*********************************************************************
* MACROS
*/
/*********************************************************************
* GLOBAL VARIABLES
*/
// Basic Cluster
const uint8 zclZigUP_HWRevision = ZIGUP_HWVERSION;
const uint8 zclZigUP_ZCLVersion = ZIGUP_ZCLVERSION;
@@ -241,16 +222,3 @@ SimpleDescriptionFormat_t zclZigUP_SimpleDesc[1] = {
(cId_t *)zclZigUP_OutClusterList // byte *pAppInClusterList;
}
};
/*********************************************************************
* GLOBAL FUNCTIONS
*/
/*********************************************************************
* LOCAL FUNCTIONS
*/
/****************************************************************************
****************************************************************************/