110 lines
2.7 KiB
C
110 lines
2.7 KiB
C
/*!
|
|
* \file hal.h
|
|
*
|
|
* Copyright (C) 2020 Choutouridis Christos (http://www.houtouridis.net)
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as
|
|
* published by the Free Software Foundation, either version 3
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
#ifndef DRIVERS_HAL_H_
|
|
#define DRIVERS_HAL_H_
|
|
|
|
#include <thermostat_shield.h>
|
|
#include <alcd.h>
|
|
#include <jiffies.h>
|
|
#include <onewire_uart.h>
|
|
#include <deque08.h>
|
|
#include <thermostat.h>
|
|
#include <stdio.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
int hal_hw_init (void);
|
|
|
|
/*
|
|
* ========== LCD ===========
|
|
*/
|
|
void lcd_init (void);
|
|
void lcd_enable (uint8_t en) ;
|
|
int lcd_putchar (char c);
|
|
int lcd_puts (const char *s);
|
|
|
|
/*
|
|
* ========== Led interface ==========
|
|
*/
|
|
void led_red (uint8_t en);
|
|
void led_green (uint8_t en);
|
|
|
|
|
|
/*
|
|
* ========= Relay ===========
|
|
*/
|
|
void relay(uint8_t on);
|
|
|
|
/*
|
|
* ========= Temperature ===========
|
|
*/
|
|
// OneWire commands
|
|
#define SKIPROM 0xCC // Skip ROM matching transition
|
|
#define STARTCONV 0x44 // Tells device to take a temperature reading and put it on the scratchpad
|
|
#define COPYSCRATCH 0x48 // Copy EEPROM
|
|
#define READSCRATCH 0xBE // Read EEPROM
|
|
#define WRITESCRATCH 0x4E // Write to EEPROM
|
|
#define RECALLSCRATCH 0xB8 // Reload from last known
|
|
#define READPOWERSUPPLY 0xB4 // Determine if device needs parasite power
|
|
#define ALARMSEARCH 0xEC // Query bus for devices with an alarm condition
|
|
|
|
// Device resolution
|
|
#define TEMP_9_BIT 0x1F // 9 bit
|
|
#define TEMP_10_BIT 0x3F // 10 bit
|
|
#define TEMP_11_BIT 0x5F // 11 bit
|
|
#define TEMP_12_BIT 0x7F // 12 bit
|
|
#define IS_TEMP_RESOLUTION(x) \
|
|
((x == TEMP_9_BIT) || (x == TEMP_10_BIT) || (x == TEMP_11_BIT) || (x == TEMP_12_BIT))
|
|
|
|
int temp_init (uint8_t resolution);
|
|
float temp_read (void);
|
|
|
|
/*
|
|
* ========= Proximity ===========
|
|
*/
|
|
#define PROX_TIME_MAX 25 // [msec]
|
|
#define PROX_READINGS 7 // How many readings for averaging
|
|
#define PROX_MAX_DISTANSE 450 // [cm]
|
|
|
|
typedef struct {
|
|
float_t readings[7];
|
|
int iter;
|
|
} proximity_t;
|
|
|
|
void proximity_init (proximity_t* p);
|
|
float_t proximity (proximity_t* p);
|
|
|
|
|
|
/*
|
|
* Public data types / classes
|
|
*/
|
|
extern alcd_t alcd;
|
|
extern ow_uart_t ow;
|
|
extern proximity_t prox;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* DRIVERS_HAL_H_ */
|