/*************************************************************************** * Copyright (C) 09/2007 by Olaf Rempel * * razzor@kopf-tisch.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; version 2 of the License, * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include "main.h" #include "blmc.h" #include "eeprom.h" extern struct blmc_ blmc; extern struct ee_param params; /* SLA+R */ #define CMD_WAIT 0x00 #define CMD_READ_VERSION 0x01 #define CMD_READ_MEMORY 0x02 /* internal mappings */ #define CMD_READ_CHIPINFO (0x10 | CMD_READ_MEMORY) #define CMD_READ_FLASH (0x20 | CMD_READ_MEMORY) #define CMD_READ_EEPROM (0x30 | CMD_READ_MEMORY) #define CMD_READ_PARAMETERS (0x40 | CMD_READ_MEMORY) /* only in APP */ /* SLA+W */ #define CMD_SWITCH_APPLICATION CMD_READ_VERSION #define CMD_WRITE_MEMORY CMD_READ_MEMORY /* internal mappings */ #define CMD_BOOT_BOOTLOADER (0x10 | CMD_SWITCH_APPLICATION) /* only in APP */ #define CMD_BOOT_APPLICATION (0x20 | CMD_SWITCH_APPLICATION) #define CMD_WRITE_CHIPINFO (0x10 | CMD_WRITE_MEMORY) /* invalid */ #define CMD_WRITE_FLASH (0x20 | CMD_WRITE_MEMORY) #define CMD_WRITE_EEPROM (0x30 | CMD_WRITE_MEMORY) #define CMD_WRITE_PARAMETERS (0x40 | CMD_WRITE_MEMORY) /* only in APP */ /* CMD_SWITCH_APPLICATION parameter */ #define BOOTTYPE_BOOTLOADER 0x00 /* only in APP */ #define BOOTTYPE_APPLICATION 0x80 /* CMD_{READ|WRITE}_* parameter */ #define MEMTYPE_CHIPINFO 0x00 #define MEMTYPE_FLASH 0x01 #define MEMTYPE_EEPROM 0x02 #define MEMTYPE_PARAMETERS 0x03 /* only in APP */ const static uint8_t info[16] = "blmc m8-v1.2 "; ISR(TWI_vect) { static uint8_t cmd; static uint8_t bcnt; uint8_t data; uint8_t ack = (1< receive Data and ACK */ case 0x60: bcnt = 0; TWCR |= (1< receive Data and ACK */ case 0x80: data = TWDR; switch (bcnt) { case 0: switch (data) { case CMD_SWITCH_APPLICATION: case CMD_WRITE_MEMORY: cmd = data; bcnt++; break; default: blmc.flags |= FLAG_I2C_ACTIVE; setpwm(data); cmd = CMD_WAIT; bcnt = 0; break; } break; case 1: switch (cmd) { case CMD_SWITCH_APPLICATION: if (data == BOOTTYPE_BOOTLOADER) { wdt_enable(WDTO_15MS); } else { ack = (0< send data */ case 0xA8: bcnt = 0; /* prev. SLA+R, data sent, ACK returned -> send data */ case 0xB8: switch (cmd) { case CMD_WAIT: switch (bcnt++) { case 0: data = blmc.current & 0xFF; break; case 1: data = 0xFF - blmc.pwm_limit; break; default: data = 0xFF; break; } break; case CMD_READ_VERSION: data = info[bcnt++]; bcnt %= sizeof(info); break; case CMD_READ_PARAMETERS: data = ((uint8_t *)¶ms)[bcnt++]; if (bcnt > sizeof(params)) bcnt = 0; break; default: data = 0xFF; break; } TWDR = data; TWCR |= (1< reset Hardware */ default: TWCR |= (1<