diff options
Diffstat (limited to 'software/avr.lib')
30 files changed, 0 insertions, 5802 deletions
diff --git a/software/avr.lib/anyio.c b/software/avr.lib/anyio.c deleted file mode 100644 index 2aae54e..0000000 --- a/software/avr.lib/anyio.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * Othmar Gsenger <otti@wirdorange.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdio.h> - -#include "anyio.h" - -#include <LUFA/Drivers/USB/USB.h> -#include "lufa-descriptor-usbserial.h" -#include "LUFA/Drivers/Peripheral/Serial.h" - -/* - LUFA Library - Copyright (C) Dean Camera, 2012. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = - { - .Config = - { - .ControlInterfaceNumber = 0, - - .DataINEndpointNumber = CDC_TX_EPNUM, - .DataINEndpointSize = CDC_TXRX_EPSIZE, - .DataINEndpointDoubleBank = false, - - .DataOUTEndpointNumber = CDC_RX_EPNUM, - .DataOUTEndpointSize = CDC_TXRX_EPSIZE, - .DataOUTEndpointDoubleBank = false, - - .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM, - .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, - .NotificationEndpointDoubleBank = false, - }, - }; - -void EVENT_USB_Device_ConfigurationChanged(void) -{ - CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); -} - -void EVENT_USB_Device_ControlRequest(void) -{ - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); -} -/* end LUFA CDC-ACM specific definitions*/ - -static FILE usb_stream; -static FILE serial_stream; - -void anyio_init(const uint32_t baudrate, const uint8_t doublespeed) -{ - Serial_Init(baudrate, doublespeed); - Serial_CreateStream(&serial_stream); - stdin = stdout = stderr = &serial_stream; - - USB_Init(); - CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,&usb_stream); -} - -void anyio_task(void) -{ -#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) - if(USB_DeviceState == DEVICE_STATE_Unattached && USB_VBUS_GetStatus()) { - USB_Disable(); - USB_Init(); - } -#endif - - CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - USB_USBTask(); -} - -int16_t anyio_bytes_received(void) -{ - if(stdin == &usb_stream) - return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); - else - return (int16_t)Serial_IsCharReceived(); -} - -void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - if(CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) - stdin = stdout = stderr = &usb_stream; - else - stdin = stdout = stderr = &serial_stream; -} - -void EVENT_USB_Device_Disconnect(void) -{ - stdin = stdout = stderr = &serial_stream; -} diff --git a/software/avr.lib/anyio.h b/software/avr.lib/anyio.h deleted file mode 100644 index 2cf4ae1..0000000 --- a/software/avr.lib/anyio.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * Othmar Gsenger <otti@wirdorange.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_anyio_h_INCLUDED -#define SPREADAVR_anyio_h_INCLUDED - -#include <stdint.h> - -void anyio_init(const uint32_t baudrate, const uint8_t doublespeed); -void anyio_task(void); -int16_t anyio_bytes_received(void); - -#endif diff --git a/software/avr.lib/cc1101.c b/software/avr.lib/cc1101.c deleted file mode 100644 index 20a2bda..0000000 --- a/software/avr.lib/cc1101.c +++ /dev/null @@ -1,850 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2015 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdio.h> - -#include "cc1101.h" -#include "cc1101_defines.h" - -static cc1101_driver_conf_t drv = { - .spi_cs_enable = NULL, - .spi_cs_disable = NULL, - .spi_read_miso = NULL, - .spi_write_byte = NULL, - .spi_read_byte = NULL, - .spi_transfer_byte = NULL, - .freq_corr = 1.0 -}; - -static uint8_t const pa_table_values_[] = { 0x00, 0x30, 0x20, 0x10, 0x01, 0x02, 0x11, 0x03, - 0x12, 0x04, 0x05, 0x13, 0x06, 0x07, 0x21, 0x14, 0x08, 0x09, 0x0A, 0x15, - 0x0B, 0x31, 0x16, 0x0C, 0x0D, 0x0E, 0x17, 0x0F, 0x22, 0x18, 0x19, 0x1A, - 0x1B, 0x32, 0x23, 0x1C, 0x6F, 0x1D, 0x1E, 0x1F, 0x24, 0x33, 0x25, 0x34, - 0x26, 0x6E, 0x27, 0x35, 0x28, 0x6D, 0x6C, 0x29, 0x36, 0x6B, 0x2A, 0x6A, - 0x37, 0x69, 0x2B, 0x68, 0x38, 0x2C, 0x8F, 0x67, 0x2D, 0x57, 0x39, 0x66, - 0x2E, 0x56, 0x3A, 0x2F, 0x65, 0x55, 0x3B, 0x64, 0x54, 0x3C, 0x63, 0x3D, - 0x53, 0x3E, 0x62, 0x3F, 0x52, 0x40, 0x61, 0x51, 0x60, 0x50, 0x8E, 0x8D, - 0x8C, 0xCF, 0x8B, 0x8A, 0x89, 0x88, 0x87, 0x86, 0x85, 0xCE, 0x84, 0x83, - 0xCD, 0x82, 0xCC, 0x81, 0xCB, 0x80, 0xCA, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5, - 0xC4, 0xC3, 0xC2, 0xC1, 0xC0 }; - -#define PA_TABLE_VALUES_MAX ((sizeof(pa_table_values_)/sizeof(uint8_t))-1) - -/* - * internal functions - */ - -static inline void cc1101_spi_wait_rdy(void) -{ - while(drv.spi_read_miso()); // wait for CHP_RDY to go low, TODO: timeout... -} - -static uint8_t cc1101_spi_strobe_command(const uint8_t cmd) -{ - if(cmd < CC1101_CMD_MIN || cmd > CC1101_CMD_MAX) - return -1; - - drv.spi_cs_enable(); - cc1101_spi_wait_rdy(); - - uint8_t status = drv.spi_transfer_byte(CC1101_HEADER_COMMAND | cmd); - - drv.spi_cs_disable(); - return status; -} - -static uint8_t cc1101_spi_read_register(const uint8_t addr) -{ - if(addr > CC1101_ADDR_MAX || (addr >= CC1101_CMD_MIN && addr <= CC1101_CMD_MAX)) - return 0xFF; - - uint8_t hdr = addr; - if(addr >= CC1101_REG_RO_MIN && addr <= CC1101_REG_RO_MAX) - hdr |= CC1101_HEADER_READONLY; - else - hdr |= CC1101_HEADER_READ; - - drv.spi_cs_enable(); - cc1101_spi_wait_rdy(); - - drv.spi_write_byte(hdr); - uint8_t data = drv.spi_read_byte(); - - drv.spi_cs_disable(); - return data; -} - -static void cc1101_spi_write_register(const uint8_t addr, const uint8_t data) -{ - if(addr > CC1101_REG_RW_MAX && addr != CC1101_REG_PATABLE && addr != CC1101_REG_FIFO) - return; - - drv.spi_cs_enable(); - cc1101_spi_wait_rdy(); - - drv.spi_write_byte(CC1101_HEADER_WRITE | addr); - drv.spi_write_byte(data); - - drv.spi_cs_disable(); -} - -// this is an internal-internal function - never use this outside of internal functions -static uint8_t cc1101_spi_read_register_burst_raw(const uint8_t addr, uint8_t* data, const uint8_t l) -{ - drv.spi_cs_enable(); - cc1101_spi_wait_rdy(); - - drv.spi_write_byte(CC1101_HEADER_READ | CC1101_HEADER_BURST | addr); - uint8_t i; - for(i = 0; i < l; ++i) - data[i] = drv.spi_read_byte(); - - drv.spi_cs_disable(); - return i; -} - -static uint8_t cc1101_spi_read_register_burst(const uint8_t addr, uint8_t* data, const uint8_t len) -{ - if(addr <= CC1101_REG_RW_MAX) { - uint8_t l = (CC1101_REG_RW_MAX - addr) + 1; - l = (len > l) ? l : len; - return cc1101_spi_read_register_burst_raw(addr, data, l); - - } else if(CC1101_REG_PATABLE) { - uint8_t l = (len > CC1101_PATABLE_SIZE) ? CC1101_PATABLE_SIZE : len; - return cc1101_spi_read_register_burst_raw(addr, data, l); - - } else if(CC1101_REG_FIFO) { - uint8_t l = (len > CC1101_FIFO_MAX_LEN) ? CC1101_FIFO_MAX_LEN : len; - return cc1101_spi_read_register_burst_raw(addr, data, l); - } - return 0; -} - -// this is an internal-internal function - never use this outside of internal functions -static uint8_t cc1101_spi_write_register_burst_raw(const uint8_t addr, uint8_t* data, const uint8_t l) -{ - drv.spi_cs_enable(); - cc1101_spi_wait_rdy(); - - drv.spi_write_byte(CC1101_HEADER_WRITE | CC1101_HEADER_BURST | addr); - uint8_t i; - for(i = 0; i < l; ++i) - drv.spi_write_byte(data[i]); - - drv.spi_cs_disable(); - return i; -} - -static uint8_t cc1101_spi_write_register_burst(const uint8_t addr, uint8_t* data, const uint8_t len) -{ - if(addr <= CC1101_REG_RW_MAX) { - uint8_t l = (CC1101_REG_RW_MAX - addr) + 1; - l = (len > l) ? l : len; - return cc1101_spi_write_register_burst_raw(addr, data, l); - - } else if(CC1101_REG_PATABLE) { - uint8_t l = (len > CC1101_PATABLE_SIZE) ? CC1101_PATABLE_SIZE : len; - return cc1101_spi_write_register_burst_raw(addr, data, l); - - } else if(CC1101_REG_FIFO) { - uint8_t l = (len > CC1101_FIFO_MAX_LEN) ? CC1101_FIFO_MAX_LEN : len; - return cc1101_spi_write_register_burst_raw(addr, data, l); - } - return 0; -} - - -/* - * EXTERNAL INTERFACE - */ - -void cc1101_init(cc1101_driver_conf_t conf) -{ - drv = conf; - cc1101_soft_reset(); -} - -void cc1101_reg_init(void) -{ - cc1101_set_iocfg0(CC1101_GDO_CFG_3STATE); - cc1101_set_iocfg1(CC1101_GDO_CFG_3STATE); - cc1101_set_iocfg2(CC1101_GDO_CFG_3STATE); -} - -void cc1101_soft_reset(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SRES); -} - - -void cc1101_powerdown(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SPWD); -} - -void cc1101_idle(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SIDLE); -} - -void cc1101_osc_off(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SXOFF); -} - -void cc1101_calibrate(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SCAL); -} - -void cc1101_fasttxon(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SFSTXON); -} - -void cc1101_rx(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_SRX); -} - -void cc1101_tx(void) -{ - cc1101_spi_strobe_command(CC1101_CMD_STX); -} - -char* cc1101_state_to_string(cc1101_state_t state) -{ - switch(state) { - case sleep: return "sleep"; - case idle: return "idle"; - case xoff: return "xoff"; - case mancal: return "mancal"; - case fs_wakeup: return "fs_wakeup"; - case calibrate: return "calibrate"; - case settling: return "settling"; - case rx: return "rx"; - case txrx_settling: return "txrx_settling"; - case rxfifo_overflow: return "rxfifo_overflow"; - case fstxon: return "fstxon"; - case tx: return "tx"; - case rxtx_settling: return "rxtx_settling"; - case txfifo_underflow: return "txfifo_underflow"; - default: return "unknown"; - } -} - -static cc1101_state_t cc1101_marcstate_to_state(uint8_t marcstate) -{ - switch(marcstate) { - case CC1101_MARCSTATE_SLEEP: return sleep; - case CC1101_MARCSTATE_IDLE: return idle; - case CC1101_MARCSTATE_XOFF: return xoff; - case CC1101_MARCSTATE_VCOON_MC: - case CC1101_MARCSTATE_REGON_MC: - case CC1101_MARCSTATE_MANCAL: return mancal; - case CC1101_MARCSTATE_VCOON: - case CC1101_MARCSTATE_REGON: return fs_wakeup; - case CC1101_MARCSTATE_STARTCAL: return calibrate; - case CC1101_MARCSTATE_BWBOOST: - case CC1101_MARCSTATE_FS_LOCK: - case CC1101_MARCSTATE_IFADCON: return settling; - case CC1101_MARCSTATE_ENDCAL: return calibrate; - case CC1101_MARCSTATE_RX: - case CC1101_MARCSTATE_RX_END: - case CC1101_MARCSTATE_RX_RST: return rx; - case CC1101_MARCSTATE_TXRX_SWITCH: return txrx_settling; - case CC1101_MARCSTATE_RXFIFO_OVERFLOW: return rxfifo_overflow; - case CC1101_MARCSTATE_FSTXON: return fstxon; - case CC1101_MARCSTATE_TX: - case CC1101_MARCSTATE_TX_END: return tx; - case CC1101_MARCSTATE_RXTX_SWITCH: return rxtx_settling; - case CC1101_MARCSTATE_TXFIFO_UNDERFLOW: return txfifo_underflow; - default: return unknown; - } -} - -cc1101_state_t cc1101_get_state(void) -{ - return cc1101_marcstate_to_state(cc1101_get_marcstate()); -} - - - - - -uint32_t cc1101_get_freq_hz(void) -{ - return (uint32_t)((float)(cc1101_get_freq()) * drv.freq_corr); -} - -void cc1101_set_freq_hz(uint32_t hz) -{ - uint32_t freq = (uint32_t)((float)hz / drv.freq_corr); - cc1101_set_freq(freq); -} - - - -// normalized register access - -uint8_t cc1101_get_iocfg0(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_IOCFG0) & CC1101_REG_RW_IOCFG0_MASK; -} - -void cc1101_set_iocfg0(uint8_t iocfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_IOCFG0, iocfg & CC1101_REG_RW_IOCFG0_MASK); -} - -uint8_t cc1101_get_iocfg1(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_IOCFG1) & CC1101_REG_RW_IOCFG1_MASK; -} - -void cc1101_set_iocfg1(uint8_t iocfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_IOCFG1, iocfg & CC1101_REG_RW_IOCFG1_MASK); -} - -uint8_t cc1101_get_iocfg2(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_IOCFG2) & CC1101_REG_RW_IOCFG2_MASK; -} - -void cc1101_set_iocfg2(uint8_t iocfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_IOCFG2, iocfg & CC1101_REG_RW_IOCFG2_MASK); -} - - -uint8_t cc1101_get_fifothr(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_FIFOTHR) & CC1101_REG_RW_FIFOTHR_MASK; -} - -void cc1101_set_fifothr(uint8_t fifothr) -{ - cc1101_spi_write_register(CC1101_REG_RW_FIFOTHR, fifothr & CC1101_REG_RW_FIFOTHR_MASK); -} - - -uint16_t cc1101_get_sync(void) -{ - uint16_t sync = cc1101_spi_read_register(CC1101_REG_RW_SYNC1) & CC1101_REG_RW_SYNC1_MASK; - sync = sync << 8; - sync |= cc1101_spi_read_register(CC1101_REG_RW_SYNC0) & CC1101_REG_RW_SYNC0_MASK; - return sync; -} - -void cc1101_set_sync(uint16_t sync) -{ - cc1101_spi_write_register(CC1101_REG_RW_SYNC0, (uint8_t)(sync) & CC1101_REG_RW_SYNC0_MASK); - sync = sync >> 8; - cc1101_spi_write_register(CC1101_REG_RW_SYNC1, (uint8_t)(sync) & CC1101_REG_RW_SYNC1_MASK); -} - -uint8_t cc1101_get_pktlen(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_PKTLEN) & CC1101_REG_RW_PKTLEN_MASK; -} - -void cc1101_set_pktlen(uint8_t len) -{ - cc1101_spi_write_register(CC1101_REG_RW_PKTLEN, len & CC1101_REG_RW_PKTLEN_MASK); -} - -uint16_t cc1101_get_pktctrl(void) -{ - uint16_t ctrl = cc1101_spi_read_register(CC1101_REG_RW_PKTCTRL1) & CC1101_REG_RW_PKTCTRL1_MASK; - ctrl = ctrl << 8; - ctrl |= cc1101_spi_read_register(CC1101_REG_RW_PKTCTRL0) & CC1101_REG_RW_PKTCTRL0_MASK; - return ctrl; -} - -void cc1101_set_pktctrl(uint16_t ctrl) -{ - cc1101_spi_write_register(CC1101_REG_RW_PKTCTRL0, (uint8_t)(ctrl) & CC1101_REG_RW_PKTCTRL0_MASK); - ctrl = ctrl >> 8; - cc1101_spi_write_register(CC1101_REG_RW_PKTCTRL1, (uint8_t)(ctrl) & CC1101_REG_RW_PKTCTRL1_MASK); -} - -uint8_t cc1101_get_addr(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_ADDR) & CC1101_REG_RW_ADDR_MASK; -} - -void cc1101_set_addr(uint8_t addr) -{ - cc1101_spi_write_register(CC1101_REG_RW_ADDR, addr & CC1101_REG_RW_ADDR_MASK); -} - - -uint8_t cc1101_get_channr(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_CHANNR) & CC1101_REG_RW_CHANNR_MASK; -} - -void cc1101_set_channr(uint8_t nr) -{ - cc1101_spi_write_register(CC1101_REG_RW_CHANNR, nr & CC1101_REG_RW_CHANNR_MASK); -} - -uint8_t cc1101_get_iffreq(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_FSCTRL1) & CC1101_REG_RW_FSCTRL1_MASK; -} - -void cc1101_set_iffreq(uint8_t iffreq) -{ - cc1101_spi_write_register(CC1101_REG_RW_FSCTRL1, iffreq & CC1101_REG_RW_FSCTRL1_MASK); -} - -uint8_t cc1101_get_freq_offset(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_FSCTRL0) & CC1101_REG_RW_FSCTRL0_MASK; -} - -void cc1101_set_freq_offset(uint8_t freqoff) -{ - cc1101_spi_write_register(CC1101_REG_RW_FSCTRL0, freqoff & CC1101_REG_RW_FSCTRL0_MASK); -} - -uint32_t cc1101_get_freq(void) -{ - uint32_t freq = cc1101_spi_read_register(CC1101_REG_RW_FREQ2) & CC1101_REG_RW_FREQ2_MASK; - freq = freq << 8; - freq |= cc1101_spi_read_register(CC1101_REG_RW_FREQ1) & CC1101_REG_RW_FREQ1_MASK; - freq = freq << 8; - freq |= cc1101_spi_read_register(CC1101_REG_RW_FREQ0) & CC1101_REG_RW_FREQ0_MASK; - return freq; -} - -void cc1101_set_freq(uint32_t freq) -{ - cc1101_spi_write_register(CC1101_REG_RW_FREQ0, (uint8_t)(freq) & CC1101_REG_RW_FREQ0_MASK); - freq = freq >> 8; - cc1101_spi_write_register(CC1101_REG_RW_FREQ1, (uint8_t)(freq) & CC1101_REG_RW_FREQ1_MASK); - freq = freq >> 8; - cc1101_spi_write_register(CC1101_REG_RW_FREQ2, (uint8_t)(freq) & CC1101_REG_RW_FREQ2_MASK); -} - -uint64_t cc1101_get_modemcfg(void) -{ - uint64_t cfg = cc1101_spi_read_register(CC1101_REG_RW_MDMCFG4) & CC1101_REG_RW_MDMCFG4_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG3) & CC1101_REG_RW_MDMCFG3_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG2) & CC1101_REG_RW_MDMCFG2_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG1) & CC1101_REG_RW_MDMCFG1_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_MDMCFG0) & CC1101_REG_RW_MDMCFG0_MASK; - return cfg; -} - -void cc1101_set_modemcfg(uint64_t cfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_MDMCFG0, cfg & CC1101_REG_RW_MDMCFG0_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_MDMCFG1, cfg & CC1101_REG_RW_MDMCFG1_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_MDMCFG2, cfg & CC1101_REG_RW_MDMCFG2_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_MDMCFG3, cfg & CC1101_REG_RW_MDMCFG3_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_MDMCFG4, cfg & CC1101_REG_RW_MDMCFG4_MASK); -} - -uint8_t cc1101_get_deviatn(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_DEVIATN) & CC1101_REG_RW_DEVIATN_MASK; -} - -void cc1101_set_deviatn(uint8_t dev) -{ - cc1101_spi_write_register(CC1101_REG_RW_DEVIATN, dev & CC1101_REG_RW_DEVIATN_MASK); -} - - - -uint32_t cc1101_get_mcsm(void) -{ - uint32_t cfg = cc1101_spi_read_register(CC1101_REG_RW_MCSM2) & CC1101_REG_RW_MCSM2_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_MCSM1) & CC1101_REG_RW_MCSM1_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_MCSM0) & CC1101_REG_RW_MCSM0_MASK; - return cfg; -} - -void cc1101_set_mcsm(uint32_t cfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_MCSM0, cfg & CC1101_REG_RW_MCSM0_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_MCSM1, cfg & CC1101_REG_RW_MCSM1_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_MCSM2, cfg & CC1101_REG_RW_MCSM2_MASK); -} - - -uint8_t cc1101_get_foccfg(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_FOCCFG) & CC1101_REG_RW_FOCCFG_MASK; -} - -void cc1101_set_foccfg(uint8_t cfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_FOCCFG, cfg & CC1101_REG_RW_FOCCFG_MASK); -} - -uint8_t cc1101_get_bscfg(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_BSCFG) & CC1101_REG_RW_BSCFG_MASK; -} - -void cc1101_set_bscfg(uint8_t cfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_BSCFG, cfg & CC1101_REG_RW_BSCFG_MASK); -} - -uint32_t cc1101_get_agcctrl(void) -{ - uint32_t ctrl = cc1101_spi_read_register(CC1101_REG_RW_AGCCTRL2) & CC1101_REG_RW_AGCCTRL2_MASK; - ctrl = ctrl << 8; - ctrl |= cc1101_spi_read_register(CC1101_REG_RW_AGCCTRL1) & CC1101_REG_RW_AGCCTRL1_MASK; - ctrl = ctrl << 8; - ctrl |= cc1101_spi_read_register(CC1101_REG_RW_AGCCTRL0) & CC1101_REG_RW_AGCCTRL0_MASK; - return ctrl; -} - -void cc1101_set_agcctrl(uint32_t ctrl) -{ - cc1101_spi_write_register(CC1101_REG_RW_AGCCTRL0, ctrl & CC1101_REG_RW_AGCCTRL0_MASK); - ctrl = ctrl >> 8; - cc1101_spi_write_register(CC1101_REG_RW_AGCCTRL1, ctrl & CC1101_REG_RW_AGCCTRL1_MASK); - ctrl = ctrl >> 8; - cc1101_spi_write_register(CC1101_REG_RW_AGCCTRL2, ctrl & CC1101_REG_RW_AGCCTRL2_MASK); -} - -uint16_t cc1101_get_worevt(void) -{ - uint16_t timeout = cc1101_spi_read_register(CC1101_REG_RW_WOREVT1) & CC1101_REG_RW_WOREVT1_MASK; - timeout = timeout << 8; - timeout |= cc1101_spi_read_register(CC1101_REG_RW_WOREVT0) & CC1101_REG_RW_WOREVT0_MASK; - return timeout; -} - -void cc1101_set_worevt(uint16_t timeout) -{ - cc1101_spi_write_register(CC1101_REG_RW_WOREVT0, timeout & CC1101_REG_RW_WOREVT0_MASK); - timeout = timeout >> 8; - cc1101_spi_write_register(CC1101_REG_RW_WOREVT1, timeout & CC1101_REG_RW_WOREVT1_MASK); -} - -uint8_t cc1101_get_worctrl(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_WORCTRL) & CC1101_REG_RW_WORCTRL_MASK; -} - -void cc1101_set_worctrl(uint8_t ctrl) -{ - cc1101_spi_write_register(CC1101_REG_RW_WORCTRL, ctrl & CC1101_REG_RW_WORCTRL_MASK); -} - - -uint16_t cc1101_get_frend(void) -{ - uint16_t cfg = cc1101_spi_read_register(CC1101_REG_RW_FREND1) & CC1101_REG_RW_FREND1_MASK; - cfg = cfg << 8; - cfg |= cc1101_spi_read_register(CC1101_REG_RW_FREND0) & CC1101_REG_RW_FREND0_MASK; - return cfg; -} - -void cc1101_set_frend(uint16_t cfg) -{ - cc1101_spi_write_register(CC1101_REG_RW_FREND0, cfg & CC1101_REG_RW_FREND0_MASK); - cfg = cfg >> 8; - cc1101_spi_write_register(CC1101_REG_RW_FREND1, cfg & CC1101_REG_RW_FREND1_MASK); -} - -uint32_t cc1101_get_fscal(void) -{ - uint32_t cal = cc1101_spi_read_register(CC1101_REG_RW_FSCAL3) & CC1101_REG_RW_FSCAL3_MASK; - cal = cal << 8; - cal = cc1101_spi_read_register(CC1101_REG_RW_FSCAL2) & CC1101_REG_RW_FSCAL2_MASK; - cal = cal << 8; - cal |= cc1101_spi_read_register(CC1101_REG_RW_FSCAL1) & CC1101_REG_RW_FSCAL1_MASK; - cal = cal << 8; - cal |= cc1101_spi_read_register(CC1101_REG_RW_FSCAL0) & CC1101_REG_RW_FSCAL0_MASK; - return cal; -} - -void cc1101_set_fscal(uint32_t cal) -{ - cc1101_spi_write_register(CC1101_REG_RW_FSCAL0, cal & CC1101_REG_RW_FSCAL0_MASK); - cal = cal >> 8; - cc1101_spi_write_register(CC1101_REG_RW_FSCAL1, cal & CC1101_REG_RW_FSCAL1_MASK); - cal = cal >> 8; - cc1101_spi_write_register(CC1101_REG_RW_FSCAL2, cal & CC1101_REG_RW_FSCAL2_MASK); - cal = cal >> 8; - cc1101_spi_write_register(CC1101_REG_RW_FSCAL3, cal & CC1101_REG_RW_FSCAL3_MASK); -} - -uint16_t cc1101_get_rcctrl(void) -{ - uint16_t ctrl = cc1101_spi_read_register(CC1101_REG_RW_RCCTRL1) & CC1101_REG_RW_RCCTRL1_MASK; - ctrl = ctrl << 8; - ctrl |= cc1101_spi_read_register(CC1101_REG_RW_RCCTRL0) & CC1101_REG_RW_RCCTRL0_MASK; - return ctrl; -} - -void cc1101_set_rcctrl(uint16_t ctrl) -{ - cc1101_spi_write_register(CC1101_REG_RW_RCCTRL0, ctrl & CC1101_REG_RW_RCCTRL0_MASK); - ctrl = ctrl >> 8; - cc1101_spi_write_register(CC1101_REG_RW_RCCTRL1, ctrl & CC1101_REG_RW_RCCTRL1_MASK); -} - - -uint8_t cc1101_get_fstest(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_FSTEST) & CC1101_REG_RW_FSTEST_MASK; -} - -void cc1101_set_fstest(uint8_t test) -{ - cc1101_spi_write_register(CC1101_REG_RW_FSTEST, test & CC1101_REG_RW_FSTEST_MASK); -} - -uint8_t cc1101_get_ptest(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_PTEST) & CC1101_REG_RW_PTEST_MASK; -} - -void cc1101_set_ptest(uint8_t test) -{ - cc1101_spi_write_register(CC1101_REG_RW_PTEST, test & CC1101_REG_RW_PTEST_MASK); -} - -uint8_t cc1101_get_agctest(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_AGCTEST) & CC1101_REG_RW_AGCTEST_MASK; -} - -void cc1101_set_agctest(uint8_t test) -{ - cc1101_spi_write_register(CC1101_REG_RW_AGCTEST, test & CC1101_REG_RW_AGCTEST_MASK); -} - -uint8_t cc1101_get_test0(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_TEST0) & CC1101_REG_RW_TEST0_MASK; -} - -void cc1101_set_test0(uint8_t test) -{ - cc1101_spi_write_register(CC1101_REG_RW_TEST0, test & CC1101_REG_RW_TEST0_MASK); -} - -uint8_t cc1101_get_test1(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_TEST1) & CC1101_REG_RW_TEST1_MASK; -} - -void cc1101_set_test1(uint8_t test) -{ - cc1101_spi_write_register(CC1101_REG_RW_TEST1, test & CC1101_REG_RW_TEST1_MASK); -} - -uint8_t cc1101_get_test2(void) -{ - return cc1101_spi_read_register(CC1101_REG_RW_TEST2) & CC1101_REG_RW_TEST2_MASK; -} - -void cc1101_set_test2(uint8_t test) -{ - cc1101_spi_write_register(CC1101_REG_RW_TEST2, test & CC1101_REG_RW_TEST2_MASK); -} - - -uint8_t cc1101_get_partnum(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_PARTNUM) & CC1101_REG_RO_PARTNUM_MASK; -} - -uint8_t cc1101_get_chip_version(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_VERSION) & CC1101_REG_RO_VERSION_MASK; -} - -uint8_t cc1101_get_freq_offset_est(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_FREQUEST) & CC1101_REG_RO_FREQUEST_MASK; -} - -uint8_t cc1101_get_lqi(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_LQI) & CC1101_REG_RO_LQI_MASK; -} - -int8_t cc1101_get_rssi(void) -{ - return (int8_t)cc1101_spi_read_register(CC1101_REG_RO_RSSI) & CC1101_REG_RO_RSSI_MASK; -} - -uint8_t cc1101_get_marcstate(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_MARCSTATE) & CC1101_REG_RO_MARCSTATE_MASK; -} - -uint16_t cc1101_get_wortime(void) -{ - uint16_t w = cc1101_spi_read_register(CC1101_REG_RO_WORTIME1) & CC1101_REG_RO_WORTIME1_MASK; - w = w << 8; - w |= cc1101_spi_read_register(CC1101_REG_RO_WORTIME0) & CC1101_REG_RO_WORTIME0_MASK; - return w; -} - -uint8_t cc1101_get_pkt_status(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_PKTSTATUS) & CC1101_REG_RO_PKTSTATUS_MASK; -} - -uint8_t cc1101_get_tx_bytes(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_TXBYTES) & CC1101_REG_RO_TXBYTES_MASK; -} - -uint8_t cc1101_get_rx_bytes(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_RXBYTES) & CC1101_REG_RO_RXBYTES_MASK; -} - -uint8_t cc1101_get_rcctrl0_status(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_RCCTRL0_STATUS) & CC1101_REG_RO_RCCTRL0_STATUS_MASK; -} - -uint8_t cc1101_get_rcctrl1_status(void) -{ - return cc1101_spi_read_register(CC1101_REG_RO_RCCTRL1_STATUS) & CC1101_REG_RO_RCCTRL1_STATUS_MASK; -} - - - -static char* cc1101_config_reg_to_string(uint8_t addr) -{ - switch(addr) { - case CC1101_REG_RW_IOCFG2: return "IOCFG2"; - case CC1101_REG_RW_IOCFG1: return "IOCFG1"; - case CC1101_REG_RW_IOCFG0: return "IOCFG0"; - case CC1101_REG_RW_FIFOTHR: return "FIFOTHR"; - case CC1101_REG_RW_SYNC1: return "SYNC1"; - case CC1101_REG_RW_SYNC0: return "SYNC0"; - case CC1101_REG_RW_PKTLEN: return "PKTLEN"; - case CC1101_REG_RW_PKTCTRL1: return "PKTCTRL1"; - case CC1101_REG_RW_PKTCTRL0: return "PKTCTRL0"; - case CC1101_REG_RW_ADDR: return "ADDR"; - case CC1101_REG_RW_CHANNR: return "CHANNR"; - case CC1101_REG_RW_FSCTRL1: return "FSCTRL1"; - case CC1101_REG_RW_FSCTRL0: return "FSCTRL0"; - case CC1101_REG_RW_FREQ2: return "FREQ2"; - case CC1101_REG_RW_FREQ1: return "FREQ1"; - case CC1101_REG_RW_FREQ0: return "FREQ0"; - case CC1101_REG_RW_MDMCFG4: return "MDMCFG4"; - case CC1101_REG_RW_MDMCFG3: return "MDMCFG3"; - case CC1101_REG_RW_MDMCFG2: return "MDMCFG2"; - case CC1101_REG_RW_MDMCFG1: return "MDMCFG1"; - case CC1101_REG_RW_MDMCFG0: return "MDMCFG0"; - case CC1101_REG_RW_DEVIATN: return "DEVIATN"; - case CC1101_REG_RW_MCSM2: return "MCSM2"; - case CC1101_REG_RW_MCSM1: return "MCSM1"; - case CC1101_REG_RW_MCSM0: return "MCSM0"; - case CC1101_REG_RW_FOCCFG: return "FOCCFG"; - case CC1101_REG_RW_BSCFG: return "BSCFG"; - case CC1101_REG_RW_AGCCTRL2: return "AGCCTRL2"; - case CC1101_REG_RW_AGCCTRL1: return "AGCCTRL1"; - case CC1101_REG_RW_AGCCTRL0: return "AGCCTRL0"; - case CC1101_REG_RW_WOREVT1: return "WOREVT1"; - case CC1101_REG_RW_WOREVT0: return "WOREVT0"; - case CC1101_REG_RW_WORCTRL: return "WORCTRL"; - case CC1101_REG_RW_FREND1: return "FREND1"; - case CC1101_REG_RW_FREND0: return "FREND0"; - case CC1101_REG_RW_FSCAL3: return "FSCAL3"; - case CC1101_REG_RW_FSCAL2: return "FSCAL2"; - case CC1101_REG_RW_FSCAL1: return "FSCAL1"; - case CC1101_REG_RW_FSCAL0: return "FSCAL0"; - case CC1101_REG_RW_RCCTRL1: return "RCCTRL1"; - case CC1101_REG_RW_RCCTRL0: return "RCCTRL0"; - case CC1101_REG_RW_FSTEST: return "FSTEST"; - case CC1101_REG_RW_PTEST: return "PTEST"; - case CC1101_REG_RW_AGCTEST: return "AGCTEST"; - case CC1101_REG_RW_TEST2: return "TEST2"; - case CC1101_REG_RW_TEST1: return "TEST1"; - case CC1101_REG_RW_TEST0: return "TEST0"; - default: return "unknown"; - } -} - -static char* cc1101_status_reg_to_string(uint8_t addr) -{ - switch(addr) { - case CC1101_REG_RO_PARTNUM: return "PARTNUM"; - case CC1101_REG_RO_VERSION: return "VERSION"; - case CC1101_REG_RO_FREQUEST: return "FREQUEST"; - case CC1101_REG_RO_LQI: return "LQI"; - case CC1101_REG_RO_RSSI: return "RSSI"; - case CC1101_REG_RO_MARCSTATE: return "MARCSTATE"; - case CC1101_REG_RO_WORTIME1: return "WORTIME1"; - case CC1101_REG_RO_WORTIME0: return "WORTIME0"; - case CC1101_REG_RO_PKTSTATUS: return "PKTSTATUS"; - case CC1101_REG_RO_VCO_VC_DAC: return "VCO_VC_DAC"; - case CC1101_REG_RO_TXBYTES: return "TXBYTES"; - case CC1101_REG_RO_RXBYTES: return "RXBYTES"; - case CC1101_REG_RO_RCCTRL1_STATUS: return "RCCTRL1_STATUS"; - case CC1101_REG_RO_RCCTRL0_STATUS: return "RCCTRL0_STATUS"; - default: return "unknown"; - } -} - -void cc1101_dump_register(void) -{ - printf("CC1101: register dump\r\n\r\n"); - - int i; - - printf(" config (read/write) register:\r\n"); - for(i=0; i<=CC1101_REG_RW_MAX; ++i) { - uint8_t data = cc1101_spi_read_register(i); // TODO: use burst mode... - printf(" 0x%02X (%s): 0x%02X\r\n", i, cc1101_config_reg_to_string(i), data); - } - printf("\r\n"); - - printf(" status (read-only) register:\r\n"); - for(i=CC1101_REG_RO_MIN; i<=CC1101_REG_RO_MAX; ++i) { - uint8_t data = cc1101_spi_read_register(i); - printf(" 0x%02X (%s): 0x%02X\r\n", i, cc1101_status_reg_to_string(i), data); - } - printf("\r\n"); -} diff --git a/software/avr.lib/cc1101.h b/software/avr.lib/cc1101.h deleted file mode 100644 index 48454b6..0000000 --- a/software/avr.lib/cc1101.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2015 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_cc1101_h_INCLUDED -#define SPREADAVR_cc1101_h_INCLUDED - -typedef enum { unknown, sleep, idle, xoff, mancal, fs_wakeup, calibrate, settling, rx, txrx_settling, - rxfifo_overflow, fstxon, tx, rxtx_settling, txfifo_underflow } cc1101_state_t; -char* cc1101_state_to_string(cc1101_state_t); - -#define CC1101_FREQ_CORR(xtal) ((float)(xtal/65536.0)) - -typedef struct { - void (*spi_cs_enable)(void); - void (*spi_cs_disable)(void); - uint8_t (*spi_read_miso)(void); - void (*spi_write_byte)(const uint8_t); - uint8_t (*spi_read_byte)(void); - uint8_t (*spi_transfer_byte)(const uint8_t); - float freq_corr; -} cc1101_driver_conf_t; - -// high level interface - -void cc1101_init(cc1101_driver_conf_t conf); -void cc1101_reg_init(void); -void cc1101_soft_reset(void); - -void cc1101_powerdown(void); -void cc1101_idle(void); -void cc1101_osc_off(void); -void cc1101_calibrate(void); -void cc1101_fasttxon(void); -void cc1101_rx(void); -void cc1101_tx(void); -cc1101_state_t cc1101_get_state(void); - -uint32_t cc1101_get_freq_hz(void); -void cc1101_set_freq_hz(uint32_t hz); - - -// normalized register access - -uint8_t cc1101_get_iocfg0(void); -void cc1101_set_iocfg0(uint8_t iocfg); -uint8_t cc1101_get_iocfg1(void); -void cc1101_set_iocfg1(uint8_t iocfg); -uint8_t cc1101_get_iocfg2(void); -void cc1101_set_iocfg2(uint8_t iocfg); - -uint8_t cc1101_get_fifothr(void); -void cc1101_set_fifothr(uint8_t fifothr); - -uint16_t cc1101_get_sync(void); -void cc1101_set_sync(uint16_t sync); -uint8_t cc1101_get_pktlen(void); -void cc1101_set_pktlen(uint8_t len); -uint16_t cc1101_get_pktctrl(void); -void cc1101_set_pktctrl(uint16_t ctrl); -uint8_t cc1101_get_addr(void); -void cc1101_set_addr(uint8_t addr); - -uint8_t cc1101_get_channr(void); -void cc1101_set_channr(uint8_t nr); -uint8_t cc1101_get_iffreq(void); -void cc1101_set_iffreq(uint8_t iffreq); -uint8_t cc1101_get_freq_offset(void); -void cc1101_set_freq_offset(uint8_t freqoff); -uint32_t cc1101_get_freq(void); -void cc1101_set_freq(uint32_t freq); -uint64_t cc1101_get_modemcfg(void); -void cc1101_set_modemcfg(uint64_t cfg); -uint8_t cc1101_get_deviatn(void); -void cc1101_set_deviatn(uint8_t dev); - -uint32_t cc1101_get_mcsm(void); -void cc1101_set_mcsm(uint32_t cfg); - -uint8_t cc1101_get_foccfg(void); -void cc1101_set_foccfg(uint8_t cfg); -uint8_t cc1101_get_bscfg(void); -void cc1101_set_bscfg(uint8_t cfg); -uint32_t cc1101_get_agcctrl(void); -void cc1101_set_agcctrl(uint32_t ctrl); -uint16_t cc1101_get_worevt(void); -void cc1101_set_worevt(uint16_t timeout); -uint8_t cc1101_get_worctrl(void); -void cc1101_set_worctrl(uint8_t ctrl); - -uint16_t cc1101_get_frend(void); -void cc1101_set_frend(uint16_t cfg); -uint32_t cc1101_get_fscal(void); -void cc1101_set_fscal(uint32_t cal); -uint16_t cc1101_get_rcctrl(void); -void cc1101_set_rcctrl(uint16_t ctrl); - -uint8_t cc1101_get_fstest(void); -void cc1101_set_fstest(uint8_t test); -uint8_t cc1101_get_ptest(void); -void cc1101_set_ptest(uint8_t test); -uint8_t cc1101_get_agctest(void); -void cc1101_set_agctest(uint8_t test); -uint8_t cc1101_get_test0(void); -void cc1101_set_test0(uint8_t test); -uint8_t cc1101_get_test1(void); -void cc1101_set_test1(uint8_t test); -uint8_t cc1101_get_test2(void); -void cc1101_set_test2(uint8_t test); - -uint8_t cc1101_get_partnum(void); -uint8_t cc1101_get_chip_version(void); -uint8_t cc1101_get_freq_offset_est(void); -uint8_t cc1101_get_lqi(void); -int8_t cc1101_get_rssi(void); -uint8_t cc1101_get_marcstate(void); -uint16_t cc1101_get_wortime(void); -uint8_t cc1101_get_pkt_status(void); -uint8_t cc1101_get_tx_bytes(void); -uint8_t cc1101_get_rx_bytes(void); -uint8_t cc1101_get_rcctrl0_status(void); -uint8_t cc1101_get_rcctrl1_status(void); - -void cc1101_dump_register(void); - -#endif diff --git a/software/avr.lib/cc1101_defines.h b/software/avr.lib/cc1101_defines.h deleted file mode 100644 index 6018e60..0000000 --- a/software/avr.lib/cc1101_defines.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2015 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_CC1101_defines_h_INCLUDED -#define SPREADAVR_CC1101_defines_h_INCLUDED - -//// header byte -#define CC1101_HEADER_READ 0x80 -#define CC1101_HEADER_WRITE 0x00 -#define CC1101_HEADER_BURST 0x40 -#define CC1101_HEADER_READONLY 0xC0 -#define CC1101_HEADER_COMMAND 0x00 - -//read/write config registers: -#define CC1101_REG_RW_IOCFG2 0x00 -#define CC1101_REG_RW_IOCFG1 0x01 -#define CC1101_REG_RW_IOCFG0 0x02 -#define CC1101_REG_RW_FIFOTHR 0x03 -#define CC1101_REG_RW_SYNC1 0x04 -#define CC1101_REG_RW_SYNC0 0x05 -#define CC1101_REG_RW_PKTLEN 0x06 -#define CC1101_REG_RW_PKTCTRL1 0x07 -#define CC1101_REG_RW_PKTCTRL0 0x08 -#define CC1101_REG_RW_ADDR 0x09 -#define CC1101_REG_RW_CHANNR 0x0A -#define CC1101_REG_RW_FSCTRL1 0x0B -#define CC1101_REG_RW_FSCTRL0 0x0C -#define CC1101_REG_RW_FREQ2 0x0D -#define CC1101_REG_RW_FREQ1 0x0E -#define CC1101_REG_RW_FREQ0 0x0F -#define CC1101_REG_RW_MDMCFG4 0x10 -#define CC1101_REG_RW_MDMCFG3 0x11 -#define CC1101_REG_RW_MDMCFG2 0x12 -#define CC1101_REG_RW_MDMCFG1 0x13 -#define CC1101_REG_RW_MDMCFG0 0x14 -#define CC1101_REG_RW_DEVIATN 0x15 -#define CC1101_REG_RW_MCSM2 0x16 -#define CC1101_REG_RW_MCSM1 0x17 -#define CC1101_REG_RW_MCSM0 0x18 -#define CC1101_REG_RW_FOCCFG 0x19 -#define CC1101_REG_RW_BSCFG 0x1A -#define CC1101_REG_RW_AGCCTRL2 0x1B -#define CC1101_REG_RW_AGCCTRL1 0x1C -#define CC1101_REG_RW_AGCCTRL0 0x1D -#define CC1101_REG_RW_WOREVT1 0x1E -#define CC1101_REG_RW_WOREVT0 0x1F -#define CC1101_REG_RW_WORCTRL 0x20 -#define CC1101_REG_RW_FREND1 0x21 -#define CC1101_REG_RW_FREND0 0x22 -#define CC1101_REG_RW_FSCAL3 0x23 -#define CC1101_REG_RW_FSCAL2 0x24 -#define CC1101_REG_RW_FSCAL1 0x25 -#define CC1101_REG_RW_FSCAL0 0x26 -#define CC1101_REG_RW_RCCTRL1 0x27 -#define CC1101_REG_RW_RCCTRL0 0x28 -#define CC1101_REG_RW_FSTEST 0x29 -#define CC1101_REG_RW_PTEST 0x2A -#define CC1101_REG_RW_AGCTEST 0x2B -#define CC1101_REG_RW_TEST2 0x2C -#define CC1101_REG_RW_TEST1 0x2D -#define CC1101_REG_RW_TEST0 0x2E - -#define CC1101_REG_RW_MAX 0x2E - -//read-only status registers: -#define CC1101_REG_RO_PARTNUM 0x30 -#define CC1101_REG_RO_VERSION 0x31 -#define CC1101_REG_RO_FREQUEST 0x32 -#define CC1101_REG_RO_LQI 0x33 -#define CC1101_REG_RO_RSSI 0x34 -#define CC1101_REG_RO_MARCSTATE 0x35 -#define CC1101_REG_RO_WORTIME1 0x36 -#define CC1101_REG_RO_WORTIME0 0x37 -#define CC1101_REG_RO_PKTSTATUS 0x38 -#define CC1101_REG_RO_VCO_VC_DAC 0x39 -#define CC1101_REG_RO_TXBYTES 0x3A -#define CC1101_REG_RO_RXBYTES 0x3B -#define CC1101_REG_RO_RCCTRL1_STATUS 0x3C -#define CC1101_REG_RO_RCCTRL0_STATUS 0x3D - -#define CC1101_REG_RO_MIN 0x30 -#define CC1101_REG_RO_MAX 0x3D - -//commands: -#define CC1101_CMD_SRES 0x30 -#define CC1101_CMD_SFSTXON 0x31 -#define CC1101_CMD_SXOFF 0x32 -#define CC1101_CMD_SCAL 0x33 -#define CC1101_CMD_SRX 0x34 -#define CC1101_CMD_STX 0x35 -#define CC1101_CMD_SIDLE 0x36 -#define CC1101_CMD_SWOR 0x38 -#define CC1101_CMD_SPWD 0x39 -#define CC1101_CMD_SFRX 0x3A -#define CC1101_CMD_SFTX 0x3B -#define CC1101_CMD_SWORRST 0x3C -#define CC1101_CMD_SNOP 0x3D - -#define CC1101_CMD_MIN 0x30 -#define CC1101_CMD_MAX 0x3D - -//power amplifier table -#define CC1101_REG_PATABLE 0x3E -#define CC1101_PATABLE_SIZE 8 -//data FIFOs -#define CC1101_REG_FIFO 0x3F -#define CC1101_FIFO_MAX_LEN 64 - - -#define CC1101_ADDR_MAX 0x3F - - -////status byte: -#define CC1101_STATUS_CHIP_NOT_RDY(x) (x & 0b10000000) -#define CC1101_STATUS_IDLE(x) ((x & 0b01110000) == 0b00000000) -#define CC1101_STATUS_RXMODE(x) ((x & 0b01110000) == 0b00010000) -#define CC1101_STATUS_TXMODE(x) ((x & 0b01110000) == 0b00100000) -#define CC1101_STATUS_FSTXON(x) ((x & 0b01110000) == 0b00110000) -#define CC1101_STATUS_CALIBRATE(x) ((x & 0b01110000) == 0b01000000) -#define CC1101_STATUS_SETTLING(x) ((x & 0b01110000) == 0b01010000) -#define CC1101_STATUS_RXFIFO_OVERFLOW(x) ((x & 0b01110000) == 0b01100000) -#define CC1101_STATUS_TXFIFO_OVERFLOW(x) ((x & 0b01110000) == 0b01110000) -#define CC1101_STATUS_FIFO_BYTES_AVAILABLE(x) (x & 0b00001111) - - -#define CC1101_MARCSTATE_SLEEP 0x00 -#define CC1101_MARCSTATE_IDLE 0x01 -#define CC1101_MARCSTATE_XOFF 0x02 -#define CC1101_MARCSTATE_VCOON_MC 0x03 -#define CC1101_MARCSTATE_REGON_MC 0x04 -#define CC1101_MARCSTATE_MANCAL 0x05 -#define CC1101_MARCSTATE_VCOON 0x06 -#define CC1101_MARCSTATE_REGON 0x07 -#define CC1101_MARCSTATE_STARTCAL 0x08 -#define CC1101_MARCSTATE_BWBOOST 0x09 -#define CC1101_MARCSTATE_FS_LOCK 0x0A -#define CC1101_MARCSTATE_IFADCON 0x0B -#define CC1101_MARCSTATE_ENDCAL 0x0C -#define CC1101_MARCSTATE_RX 0x0D -#define CC1101_MARCSTATE_RX_END 0x0E -#define CC1101_MARCSTATE_RX_RST 0x0F -#define CC1101_MARCSTATE_TXRX_SWITCH 0x10 -#define CC1101_MARCSTATE_RXFIFO_OVERFLOW 0x11 -#define CC1101_MARCSTATE_FSTXON 0x12 -#define CC1101_MARCSTATE_TX 0x13 -#define CC1101_MARCSTATE_TX_END 0x14 -#define CC1101_MARCSTATE_RXTX_SWITCH 0x15 -#define CC1101_MARCSTATE_TXFIFO_UNDERFLOW 0x16 - -#define CC1101_GDO_CFG_3STATE 0x2E - - -//register masks -#define CC1101_REG_RW_IOCFG2_MASK 0x7F -#define CC1101_REG_RW_IOCFG1_MASK 0xFF -#define CC1101_REG_RW_IOCFG0_MASK 0xFF -#define CC1101_REG_RW_FIFOTHR_MASK 0x7F -#define CC1101_REG_RW_SYNC1_MASK 0xFF -#define CC1101_REG_RW_SYNC0_MASK 0xFF -#define CC1101_REG_RW_PKTLEN_MASK 0xFF -#define CC1101_REG_RW_PKTCTRL1_MASK 0xEF -#define CC1101_REG_RW_PKTCTRL0_MASK 0x77 -#define CC1101_REG_RW_ADDR_MASK 0xFF -#define CC1101_REG_RW_CHANNR_MASK 0xFF -#define CC1101_REG_RW_FSCTRL1_MASK 0x1F -#define CC1101_REG_RW_FSCTRL0_MASK 0xFF -#define CC1101_REG_RW_FREQ2_MASK 0x3F -#define CC1101_REG_RW_FREQ1_MASK 0xFF -#define CC1101_REG_RW_FREQ0_MASK 0xFF -#define CC1101_REG_RW_MDMCFG4_MASK 0xFF -#define CC1101_REG_RW_MDMCFG3_MASK 0xFF -#define CC1101_REG_RW_MDMCFG2_MASK 0xFF -#define CC1101_REG_RW_MDMCFG1_MASK 0xF3 -#define CC1101_REG_RW_MDMCFG0_MASK 0xFF -#define CC1101_REG_RW_DEVIATN_MASK 0x77 -#define CC1101_REG_RW_MCSM2_MASK 0x1F -#define CC1101_REG_RW_MCSM1_MASK 0x3F -#define CC1101_REG_RW_MCSM0_MASK 0x3F -#define CC1101_REG_RW_FOCCFG_MASK 0x3F -#define CC1101_REG_RW_BSCFG_MASK 0xFF -#define CC1101_REG_RW_AGCCTRL2_MASK 0xFF -#define CC1101_REG_RW_AGCCTRL1_MASK 0x7F -#define CC1101_REG_RW_AGCCTRL0_MASK 0xFF -#define CC1101_REG_RW_WOREVT1_MASK 0xFF -#define CC1101_REG_RW_WOREVT0_MASK 0xFF -#define CC1101_REG_RW_WORCTRL_MASK 0xFB -#define CC1101_REG_RW_FREND1_MASK 0xFF -#define CC1101_REG_RW_FREND0_MASK 0x37 -#define CC1101_REG_RW_FSCAL3_MASK 0xFF -#define CC1101_REG_RW_FSCAL2_MASK 0x3F -#define CC1101_REG_RW_FSCAL1_MASK 0x3F -#define CC1101_REG_RW_FSCAL0_MASK 0x7F -#define CC1101_REG_RW_RCCTRL1_MASK 0x7F -#define CC1101_REG_RW_RCCTRL0_MASK 0x7F -#define CC1101_REG_RW_FSTEST_MASK 0xFF -#define CC1101_REG_RW_PTEST_MASK 0xFF -#define CC1101_REG_RW_AGCTEST_MASK 0xFF -#define CC1101_REG_RW_TEST2_MASK 0xFF -#define CC1101_REG_RW_TEST1_MASK 0xFF -#define CC1101_REG_RW_TEST0_MASK 0xFF -#define CC1101_REG_RO_PARTNUM_MASK 0xFF -#define CC1101_REG_RO_VERSION_MASK 0xFF -#define CC1101_REG_RO_FREQUEST_MASK 0xFF -#define CC1101_REG_RO_LQI_MASK 0xFF -#define CC1101_REG_RO_RSSI_MASK 0xFF -#define CC1101_REG_RO_MARCSTATE_MASK 0x1F -#define CC1101_REG_RO_WORTIME1_MASK 0xFF -#define CC1101_REG_RO_WORTIME0_MASK 0xFF -#define CC1101_REG_RO_PKTSTATUS_MASK 0xFF -#define CC1101_REG_RO_VCO_VC_DAC_MASK 0xFF -#define CC1101_REG_RO_TXBYTES_MASK 0xFF -#define CC1101_REG_RO_RXBYTES_MASK 0xFF -#define CC1101_REG_RO_RCCTRL1_STATUS_MASK 0x7F -#define CC1101_REG_RO_RCCTRL0_STATUS_MASK 0x7F - -#endif diff --git a/software/avr.lib/ds1820.c b/software/avr.lib/ds1820.c deleted file mode 100644 index 4619498..0000000 --- a/software/avr.lib/ds1820.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * spreadspace avr utils - usb-1wire example - * - * - * Copyright (C) 2013-2014 Bernhard Tittelbach <xro@realraum.at> - * based on code from: - * http://www.pjrc.com/teensy/td_libs_OneWire.html - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "ds1820.h" -#include "onewire.h" -#include "util/delay.h" - -uint8_t owi_ds1820_addr_[MAX_OWI_DEVICES][8]; -uint8_t num_ds1820_found_; - -uint8_t ds1820_discover(void) -{ - uint8_t d=0; - num_ds1820_found_ = 0; - if (! owi_reset()) //if no devices on bus, return now - return 0; - owi_reset_search(); - _delay_ms(250); - - //Search only for DS1820 temp sensors - owi_target_search(DS1820_FAMILY_ID); - - while ( owi_search(owi_ds1820_addr_[ d ])) - { - d++; - if ( d >= MAX_OWI_DEVICES) - break; - } - num_ds1820_found_ = d; - return num_ds1820_found_; -} - -void ds1820_set_resolution(uint8_t d, uint8_t bits) -{ - uint8_t resolution; - if (d >= num_ds1820_found_ || bits < 9 || bits > 12) - return; - - owi_reset(); - owi_select(owi_ds1820_addr_[d]); - - owi_write(DS1820_WRITE_SCRATCHPAD, 0); - owi_write(0xFF, 0); - owi_write(0x7F, 0); - - resolution = (bits - 9) << 5; - owi_write(resolution | 0x1F, 0); -} - -void ds1820_start_measuring(uint8_t d) -{ - owi_reset(); - owi_select(owi_ds1820_addr_[d]); - owi_write(DS1820_START_CONVERSION, 1); -} - -uint16_t ds1820_get_conversion_time_ms(uint8_t bits) -{ - switch (bits) - { - case 9: return DS1820_TCONV_MS_9BITS; - case 10: return DS1820_TCONV_MS_10BITS; - case 11: return DS1820_TCONV_MS_11BITS; - default: return DS1820_TCONV_MS_12BITS; - } -} - -void ds1820_wait_conversion_time(uint8_t bits) -{ - switch (bits) - { - case 9: _delay_ms(DS1820_TCONV_MS_9BITS); break; - case 10: _delay_ms(DS1820_TCONV_MS_10BITS); break; - case 11: _delay_ms(DS1820_TCONV_MS_11BITS); break; - default: _delay_ms(DS1820_TCONV_MS_12BITS); break; - } -} - -int16_t ds1820_read_temperature(uint8_t d) -{ - uint8_t data[9]; - int16_t raw = 0; - uint8_t type_s=0; - uint8_t cfg, i; - - owi_reset(); - owi_select(owi_ds1820_addr_[d]); - owi_write(DS1820_READ_SCRATCHPAD, 0); // Read Scratchpad - for (i = 0; i < 9; i++) { // we need 9 bytes - data[i] = owi_read(); - } - #if (ONEWIRE_CRC == 1) - uint8_t crc_result = owi_crc8(data,8); - if (crc_result != data[8]) - return DS1820_ERROR; - #endif - - // the first ROM byte indicates which chip - switch (owi_ds1820_addr_[d][0]) - { - case 0x10: - type_s = 1; - break; - case 0x28: - case 0x22: - type_s = 0; - break; - default: - break; - } - - // Convert the data to actual temperature - // because the result is a 16 bit signed integer, it should - // be stored to an "int16_t" type, which is always 16 bits - // even when compiled on a 32 bit processor. - raw = (data[1] << 8) | data[0]; - if (type_s) - { - raw = raw << 3; // 9 bit resolution default - if (data[7] == 0x10) { - // "count remain" gives full 12 bit resolution - raw = (raw & 0xFFF0) + 12 - data[6]; - } - } else { - cfg = (data[4] & 0x60); - // at lower res, the low bits are undefined, so let's zero them - if (cfg == DS1820_RESOLUTION_9BITS) - raw = raw & ~7; // 9 bit resolution, 93.75 ms - else if (cfg == DS1820_RESOLUTION_10BITS) - raw = raw & ~3; // 10 bit res, 187.5 ms - else if (cfg == DS1820_RESOLUTION_11BITS) - raw = raw & ~1; // 11 bit res, 375 ms - //// default is 12 bit resolution, 750 ms conversion time - } - - return raw; -} - -float ds1820_raw_temp_to_celsius(int16_t t) -{ - if ( t == DS1820_ERROR ) - return DS1820_ERROR; - else - return ((float) t) / 16.0; -} diff --git a/software/avr.lib/ds1820.h b/software/avr.lib/ds1820.h deleted file mode 100644 index 64a0089..0000000 --- a/software/avr.lib/ds1820.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * spreadspace avr utils - usb-1wire example - * - * - * Copyright (C) 2013-2014 Bernhard Tittelbach <xro@realraum.at> - * based on code from: - * http://www.pjrc.com/teensy/td_libs_OneWire.html - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef __DS1820__ -#define __DS1820__ - -#include <stdint.h> - -#define DS1820_FAMILY_ID 0x10 -#define DS1820_START_CONVERSION 0x44 -#define DS1820_READ_SCRATCHPAD 0xbe -#define DS1820_WRITE_SCRATCHPAD 0x4e -#define DS1820_ERROR -1000 // Return code. Outside temperature range. -#define DS1820_RESOLUTION_9BITS 0x00 -#define DS1820_RESOLUTION_10BITS 0x20 -#define DS1820_RESOLUTION_11BITS 0x40 -#define DS1820_RESOLUTION_12BITS 0x60 -#define DS1820_TCONV_MS_9BITS 96 -#define DS1820_TCONV_MS_10BITS 195 -#define DS1820_TCONV_MS_11BITS 390 -#define DS1820_TCONV_MS_12BITS 800 - -#define DS2890_FAMILY_ID 0x2c -#define DS2890_WRITE_CONTROL_REGISTER 0X55 -#define DS2890_RELEASE_CODE 0x96 -#define DS2890_WRITE_POSITION 0x0f - -#ifndef MAX_OWI_DEVICES -#define MAX_OWI_DEVICES 8 -#endif - -uint8_t ds1820_discover(void); -void ds1820_set_resolution(uint8_t d, uint8_t bits); -void ds1820_start_measuring(uint8_t d); -uint16_t ds1820_get_conversion_time_ms(uint8_t bits); -void ds1820_wait_conversion_time(uint8_t bits); -int16_t ds1820_read_temperature(uint8_t d); -float ds1820_raw_temp_to_celsius(int16_t t); - -#endif
\ No newline at end of file diff --git a/software/avr.lib/led.c b/software/avr.lib/led.c deleted file mode 100644 index 4f3aec2..0000000 --- a/software/avr.lib/led.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <avr/io.h> - -#include "led.h" - -#if defined(__BOARD_minimus__) || defined(__BOARD_minimus32__) -#define NUM_LEDS 2 -#elif defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_teensy2__) || defined(__BOARD_teensy2pp__) || \ - defined(__BOARD_arduinoNG__) || defined(__BOARD_arduino2009v2__) || defined(__BOARD_arduino2009__) || defined(__BOARD_arduino10000__) || \ - defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) || \ - defined(__BOARD_slowpandongle1__) || defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__) || \ - defined(__BOARD_rhmixxx__) -#define NUM_LEDS 1 -#else -#define NUM_LEDS 0 -#endif - -#if defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_minimus__) || defined(__BOARD_minimus32__) || \ - defined(__BOARD_rhmixxx__) -#define LED_DIR 0 -#else -#define LED_DIR 1 -#endif - -#if defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_teensy2__) || defined(__BOARD_teensy2pp__) || \ - defined(__BOARD_teenstep__) -#define LED_PORT PORTD -#define LED_DDR DDRD -#define LED_PINNUM 6 -#endif - -#if defined(__BOARD_minimus__) || defined(__BOARD_minimus32__) -#define LED_PORT PORTD -#define LED_DDR DDRD -#define LED_PINNUM 5 - -#define LED2_PORT PORTD -#define LED2_DDR DDRD -#define LED2_PINNUM 6 -#endif - -#if defined(__BOARD_slowpandongle2__) || defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) -#define LED_PORT PORTE -#define LED_DDR DDRE -#define LED_PINNUM 6 -#endif - -#if defined(__BOARD_slowpandongle1__) -#define LED_PORT PORTC -#define LED_DDR DDRC -#define LED_PINNUM 2 -#endif - -#if defined(__BOARD_arduino2009v2__) || defined(__BOARD_arduino2009__) || defined(__BOARD_arduino10000__) || defined(__BOARD_arduinoNG__) -#define LED_PORT PORTB -#define LED_DDR DDRB -#define LED_PINNUM 5 -#endif - -#if defined(__BOARD_rhmixxx__) -#define LED_PORT PORTE -#define LED_DDR DDRE -#define LED_PINNUM 0 -#endif - -void led_init(void) -{ -#if NUM_LEDS >= 1 - led_off(); - LED_DDR = 1<<LED_PINNUM; -#if NUM_LEDS >= 2 - LED2_DDR |= 1<<LED2_PINNUM; -#endif -#endif -} - -void led_on(void) -{ -#if NUM_LEDS >= 1 -#if LED_DIR == 1 - LED_PORT |= 1<<LED_PINNUM; -#else - LED_PORT &= ~(1<<LED_PINNUM); -#endif -#endif -} - -void led_off(void) -{ -#if NUM_LEDS >= 1 -#if LED_DIR == 1 - LED_PORT &= ~(1<<LED_PINNUM); -#else - LED_PORT |= 1<<LED_PINNUM; -#endif -#endif -} - -void led_toggle(void) -{ -#if NUM_LEDS >= 1 - LED_PORT ^= 1<<LED_PINNUM; -#endif -} - - -void led2_on(void) -{ -#if NUM_LEDS >= 2 -#if LED_DIR == 1 - LED2_PORT |= 1<<LED2_PINNUM; -#else - LED2_PORT &= ~(1<<LED2_PINNUM); -#endif -#endif -} - -void led2_off(void) -{ -#if NUM_LEDS >= 2 -#if LED_DIR == 1 - LED2_PORT &= ~(1<<LED2_PINNUM); -#else - LED2_PORT |= 1<<LED2_PINNUM; -#endif -#endif -} - -void led2_toggle(void) -{ -#if NUM_LEDS >= 2 - LED2_PORT ^= 1<<LED2_PINNUM; -#endif -} diff --git a/software/avr.lib/led.h b/software/avr.lib/led.h deleted file mode 100644 index 0c78193..0000000 --- a/software/avr.lib/led.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_led_h_INCLUDED -#define SPREADAVR_led_h_INCLUDED - -void led_init(void); - -void led_on(void); -void led_off(void); -void led_toggle(void); - -void led2_on(void); -void led2_off(void); -void led2_toggle(void); - -#endif diff --git a/software/avr.lib/lufa-descriptor-keyboardmouse.c b/software/avr.lib/lufa-descriptor-keyboardmouse.c deleted file mode 100644 index acc319b..0000000 --- a/software/avr.lib/lufa-descriptor-keyboardmouse.c +++ /dev/null @@ -1,310 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- * computer-readable structures which the host requests upon device enumeration, to determine
- * the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-keyboardmouse.h"
-
-/** HID class report descriptor. This is a special descriptor constructed with values from the
- * USBIF HID class specification to describe the reports and capabilities of the HID device. This
- * descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
- * the device will send, and what it may be sent back from the host. Refer to the HID specification for
- * more details on HID report descriptors.
- *
- * This descriptor describes the mouse HID interface's report structure.
- */
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
-{
- /* Use the HID class driver's standard Mouse report.
- * Min X/Y Axis values: -1
- * Max X/Y Axis values: 1
- * Min physical X/Y Axis values (used to determine resolution): -1
- * Max physical X/Y Axis values (used to determine resolution): 1
- * Buttons: 3
- * Absolute screen coordinates: false
- */
- HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false)
-};
-
-/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */
-const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
-{
- /* Use the HID class driver's standard Keyboard report.
- * Max simultaneous keys: 6
- */
- HID_DESCRIPTOR_KEYBOARD(6)
-};
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- * device characteristics, including the supported USB version, control endpoint size and the
- * number of device configurations. The descriptor is read out by the USB host when the enumeration
- * process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(01.10),
- .Class = USB_CSCP_NoDeviceClass,
- .SubClass = USB_CSCP_NoDeviceSubclass,
- .Protocol = USB_CSCP_NoDeviceProtocol,
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- .VendorID = 0x03EB,
- .ProductID = 0x204D,
- .ReleaseNumber = VERSION_BCD(00.01),
-
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = NO_DESCRIPTOR,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- * of the device in one of its supported configurations, including information about any device interfaces
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- * a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = 2,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
- },
-
- .HID1_KeyboardInterface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0x00,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 1,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_BootSubclass,
- .Protocol = HID_CSCP_KeyboardBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .HID1_KeyboardHID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(01.11),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(KeyboardReport)
- },
-
- .HID1_ReportINEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = HID_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .HID2_MouseInterface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0x01,
- .AlternateSetting = 0x00,
-
- .TotalEndpoints = 1,
-
- .Class = HID_CSCP_HIDClass,
- .SubClass = HID_CSCP_BootSubclass,
- .Protocol = HID_CSCP_MouseBootProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .HID2_MouseHID =
- {
- .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
- .HIDSpec = VERSION_BCD(01.11),
- .CountryCode = 0x00,
- .TotalReportDescriptors = 1,
- .HIDReportType = HID_DTYPE_Report,
- .HIDReportLength = sizeof(MouseReport)
- },
-
- .HID2_ReportINEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = HID_EPSIZE,
- .PollingIntervalMS = 0x01
- }
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
- .UnicodeString = L"Dean Camera"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
- .Header = {.Size = USB_STRING_LEN(28), .Type = DTYPE_String},
- .UnicodeString = L"LUFA Mouse and Keyboard Demo"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorNumber = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- switch (DescriptorNumber)
- {
- case 0x00:
- Address = &LanguageString;
- Size = pgm_read_byte(&LanguageString.Header.Size);
- break;
- case 0x01:
- Address = &ManufacturerString;
- Size = pgm_read_byte(&ManufacturerString.Header.Size);
- break;
- case 0x02:
- Address = &ProductString;
- Size = pgm_read_byte(&ProductString.Header.Size);
- break;
- }
-
- break;
- case HID_DTYPE_HID:
- if (!(wIndex))
- {
- Address = &ConfigurationDescriptor.HID1_KeyboardHID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- }
- else
- {
- Address = &ConfigurationDescriptor.HID2_MouseHID;
- Size = sizeof(USB_HID_Descriptor_HID_t);
- }
-
- break;
- case HID_DTYPE_Report:
- if (!(wIndex))
- {
- Address = &KeyboardReport;
- Size = sizeof(KeyboardReport);
- }
- else
- {
- Address = &MouseReport;
- Size = sizeof(MouseReport);
- }
-
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
-
diff --git a/software/avr.lib/lufa-descriptor-keyboardmouse.h b/software/avr.lib/lufa-descriptor-keyboardmouse.h deleted file mode 100644 index 9381602..0000000 --- a/software/avr.lib/lufa-descriptor-keyboardmouse.h +++ /dev/null @@ -1,81 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
- /* Includes: */
- #include <avr/pgmspace.h>
-
- #include <LUFA/Drivers/USB/USB.h>
-
- /* Type Defines: */
- /** Type define for the device configuration descriptor structure. This must be defined in the
- * application code, as the configuration descriptor contains several sub-descriptors which
- * vary between devices, and which describe the device's usage to the host.
- */
- typedef struct
- {
- USB_Descriptor_Configuration_Header_t Config;
-
- // Keyboard HID Interface
- USB_Descriptor_Interface_t HID1_KeyboardInterface;
- USB_HID_Descriptor_HID_t HID1_KeyboardHID;
- USB_Descriptor_Endpoint_t HID1_ReportINEndpoint;
-
- // Mouse HID Interface
- USB_Descriptor_Interface_t HID2_MouseInterface;
- USB_HID_Descriptor_HID_t HID2_MouseHID;
- USB_Descriptor_Endpoint_t HID2_ReportINEndpoint;
- } USB_Descriptor_Configuration_t;
-
- /* Macros: */
- /** Endpoint number of the Keyboard HID reporting IN endpoint. */
- #define KEYBOARD_IN_EPNUM 1
-
- /** Endpoint number of the Mouse HID reporting IN endpoint. */
- #define MOUSE_IN_EPNUM 3
-
- /** Size in bytes of each of the HID reporting IN endpoints. */
- #define HID_EPSIZE 8
-
- /* Function Prototypes: */
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/avr.lib/lufa-descriptor-midi.c b/software/avr.lib/lufa-descriptor-midi.c deleted file mode 100644 index 99fab41..0000000 --- a/software/avr.lib/lufa-descriptor-midi.c +++ /dev/null @@ -1,337 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- * computer-readable structures which the host requests upon device enumeration, to determine
- * the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-midi.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- * device characteristics, including the supported USB version, control endpoint size and the
- * number of device configurations. The descriptor is read out by the USB host when the enumeration
- * process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(01.10),
- .Class = USB_CSCP_NoDeviceClass,
- .SubClass = USB_CSCP_NoDeviceSubclass,
- .Protocol = USB_CSCP_NoDeviceProtocol,
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- .VendorID = 0x03EB,
- .ProductID = 0x2048,
- .ReleaseNumber = VERSION_BCD(00.01),
-
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = NO_DESCRIPTOR,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- * of the device in one of its supported configurations, including information about any device interfaces
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- * a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = 2,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
- },
-
- .Audio_ControlInterface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 0,
-
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_ControlSubclass,
- .Protocol = AUDIO_CSCP_ControlProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Audio_ControlInterface_SPC =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_Header,
-
- .ACSpecification = VERSION_BCD(01.00),
- .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t),
-
- .InCollection = 1,
- .InterfaceNumber = 1,
- },
-
- .Audio_StreamInterface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 1,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = AUDIO_CSCP_AudioClass,
- .SubClass = AUDIO_CSCP_MIDIStreamingSubclass,
- .Protocol = AUDIO_CSCP_StreamingProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .Audio_StreamInterface_SPC =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_General,
-
- .AudioSpecification = VERSION_BCD(01.00),
-
- .TotalLength = (sizeof(USB_Descriptor_Configuration_t) -
- offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC))
- },
-
- .MIDI_In_Jack_Emb =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
- .JackType = MIDI_JACKTYPE_Embedded,
- .JackID = 0x01,
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_In_Jack_Ext =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal,
-
- .JackType = MIDI_JACKTYPE_External,
- .JackID = 0x02,
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_Out_Jack_Emb =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
- .JackType = MIDI_JACKTYPE_Embedded,
- .JackID = 0x03,
-
- .NumberOfPins = 1,
- .SourceJackID = {0x02},
- .SourcePinID = {0x01},
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_Out_Jack_Ext =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = DTYPE_CSInterface},
- .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal,
-
- .JackType = MIDI_JACKTYPE_External,
- .JackID = 0x04,
-
- .NumberOfPins = 1,
- .SourceJackID = {0x01},
- .SourcePinID = {0x01},
-
- .JackStrIndex = NO_DESCRIPTOR
- },
-
- .MIDI_In_Jack_Endpoint =
- {
- .Endpoint =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = MIDI_STREAM_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .Refresh = 0,
- .SyncEndpointNumber = 0
- },
-
- .MIDI_In_Jack_Endpoint_SPC =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
- .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
-
- .TotalEmbeddedJacks = 0x01,
- .AssociatedJackID = {0x01}
- },
-
- .MIDI_Out_Jack_Endpoint =
- {
- .Endpoint =
- {
- .Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = MIDI_STREAM_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .Refresh = 0,
- .SyncEndpointNumber = 0
- },
-
- .MIDI_Out_Jack_Endpoint_SPC =
- {
- .Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = DTYPE_CSEndpoint},
- .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General,
-
- .TotalEmbeddedJacks = 0x01,
- .AssociatedJackID = {0x03}
- }
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
- .UnicodeString = L"Dean Camera"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
- .Header = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},
- .UnicodeString = L"LUFA MIDI Demo"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorNumber = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- switch (DescriptorNumber)
- {
- case 0x00:
- Address = &LanguageString;
- Size = pgm_read_byte(&LanguageString.Header.Size);
- break;
- case 0x01:
- Address = &ManufacturerString;
- Size = pgm_read_byte(&ManufacturerString.Header.Size);
- break;
- case 0x02:
- Address = &ProductString;
- Size = pgm_read_byte(&ProductString.Header.Size);
- break;
- }
-
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
-
diff --git a/software/avr.lib/lufa-descriptor-midi.h b/software/avr.lib/lufa-descriptor-midi.h deleted file mode 100644 index 592ac9f..0000000 --- a/software/avr.lib/lufa-descriptor-midi.h +++ /dev/null @@ -1,87 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
- /* Includes: */
- #include <LUFA/Drivers/USB/USB.h>
-
- #include <avr/pgmspace.h>
-
- /* Macros: */
- /** Endpoint number of the MIDI streaming data IN endpoint, for device-to-host data transfers. */
- #define MIDI_STREAM_IN_EPNUM 2
-
- /** Endpoint number of the MIDI streaming data OUT endpoint, for host-to-device data transfers. */
- #define MIDI_STREAM_OUT_EPNUM 1
-
- /** Endpoint size in bytes of the Audio isochronous streaming data IN and OUT endpoints. */
- #define MIDI_STREAM_EPSIZE 64
-
- /* Type Defines: */
- /** Type define for the device configuration descriptor structure. This must be defined in the
- * application code, as the configuration descriptor contains several sub-descriptors which
- * vary between devices, and which describe the device's usage to the host.
- */
- typedef struct
- {
- USB_Descriptor_Configuration_Header_t Config;
-
- // MIDI Audio Control Interface
- USB_Descriptor_Interface_t Audio_ControlInterface;
- USB_Audio_Descriptor_Interface_AC_t Audio_ControlInterface_SPC;
-
- // MIDI Audio Streaming Interface
- USB_Descriptor_Interface_t Audio_StreamInterface;
- USB_MIDI_Descriptor_AudioInterface_AS_t Audio_StreamInterface_SPC;
- USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Emb;
- USB_MIDI_Descriptor_InputJack_t MIDI_In_Jack_Ext;
- USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Emb;
- USB_MIDI_Descriptor_OutputJack_t MIDI_Out_Jack_Ext;
- USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_In_Jack_Endpoint;
- USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_In_Jack_Endpoint_SPC;
- USB_Audio_Descriptor_StreamEndpoint_Std_t MIDI_Out_Jack_Endpoint;
- USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;
- } USB_Descriptor_Configuration_t;
-
- /* Function Prototypes: */
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/avr.lib/lufa-descriptor-rndis.c b/software/avr.lib/lufa-descriptor-rndis.c deleted file mode 100644 index ba29037..0000000 --- a/software/avr.lib/lufa-descriptor-rndis.c +++ /dev/null @@ -1,267 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- * computer-readable structures which the host requests upon device enumeration, to determine
- * the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-rndis.h"
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- * device characteristics, including the supported USB version, control endpoint size and the
- * number of device configurations. The descriptor is read out by the USB host when the enumeration
- * process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(01.10),
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_NoSpecificSubclass,
- .Protocol = CDC_CSCP_NoSpecificProtocol,
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- .VendorID = 0x03EB,
- .ProductID = 0x204C,
- .ReleaseNumber = VERSION_BCD(00.01),
-
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = NO_DESCRIPTOR,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- * of the device in one of its supported configurations, including information about any device interfaces
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- * a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = 2,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
- },
-
- .CDC_CCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 1,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_VendorSpecificProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Header,
-
- .CDCSpecification = VERSION_BCD(01.10),
- },
-
- .CDC_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_ACM,
-
- .Capabilities = 0x00,
- },
-
- .CDC_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Union,
-
- .MasterInterfaceNumber = 0,
- .SlaveInterfaceNumber = 1,
- },
-
- .CDC_NotificationEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,
- .PollingIntervalMS = 0xFF
- },
-
- .CDC_DCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 1,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = CDC_CSCP_CDCDataClass,
- .SubClass = CDC_CSCP_NoDataSubclass,
- .Protocol = CDC_CSCP_NoDataProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .RNDIS_DataOutEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .RNDIS_DataInEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC_TX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- }
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
- .UnicodeString = L"Dean Camera"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
- .Header = {.Size = USB_STRING_LEN(23), .Type = DTYPE_String},
- .UnicodeString = L"LUFA USB-RS232 Adapter"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorNumber = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- switch (DescriptorNumber)
- {
- case 0x00:
- Address = &LanguageString;
- Size = pgm_read_byte(&LanguageString.Header.Size);
- break;
- case 0x01:
- Address = &ManufacturerString;
- Size = pgm_read_byte(&ManufacturerString.Header.Size);
- break;
- case 0x02:
- Address = &ProductString;
- Size = pgm_read_byte(&ProductString.Header.Size);
- break;
- }
-
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
-
diff --git a/software/avr.lib/lufa-descriptor-rndis.h b/software/avr.lib/lufa-descriptor-rndis.h deleted file mode 100644 index 508ac2f..0000000 --- a/software/avr.lib/lufa-descriptor-rndis.h +++ /dev/null @@ -1,89 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
- /* Includes: */
- #include <LUFA/Drivers/USB/USB.h>
-
- #include <avr/pgmspace.h>
-
- /* Macros: */
- /** Endpoint number of the CDC device-to-host notification IN endpoint. */
- #define CDC_NOTIFICATION_EPNUM 3
-
- /** Endpoint number of the CDC device-to-host data IN endpoint. */
- #define CDC_TX_EPNUM 1
-
- /** Endpoint number of the CDC host-to-device data OUT endpoint. */
- #define CDC_RX_EPNUM 2
-
- /** Size in bytes of the CDC device-to-host notification IN endpoint. */
- #define CDC_NOTIFICATION_EPSIZE 8
-
- /** Size in bytes of the CDC data IN and OUT endpoints. */
- #define CDC_TXRX_EPSIZE 64
-
- /* Type Defines: */
- /** Type define for the device configuration descriptor structure. This must be defined in the
- * application code, as the configuration descriptor contains several sub-descriptors which
- * vary between devices, and which describe the device's usage to the host.
- */
- typedef struct
- {
- USB_Descriptor_Configuration_Header_t Config;
-
- // RNDIS CDC Control Interface
- USB_Descriptor_Interface_t CDC_CCI_Interface;
- USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header;
- USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM;
- USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union;
- USB_Descriptor_Endpoint_t CDC_NotificationEndpoint;
-
- // RNDIS CDC Data Interface
- USB_Descriptor_Interface_t CDC_DCI_Interface;
- USB_Descriptor_Endpoint_t RNDIS_DataOutEndpoint;
- USB_Descriptor_Endpoint_t RNDIS_DataInEndpoint;
- } USB_Descriptor_Configuration_t;
-
- /* Function Prototypes: */
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/avr.lib/lufa-descriptor-usbdualserial.c b/software/avr.lib/lufa-descriptor-usbdualserial.c deleted file mode 100644 index 639391c..0000000 --- a/software/avr.lib/lufa-descriptor-usbdualserial.c +++ /dev/null @@ -1,394 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- * computer-readable structures which the host requests upon device enumeration, to determine
- * the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-usbdualserial.h"
-
-/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as
- * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL.
- * This allows the host to track a device across insertions on different ports, allowing them to retain allocated
- * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices
- * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value
- * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and
- * port location).
- */
-#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
- #warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
-#endif
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- * device characteristics, including the supported USB version, control endpoint size and the
- * number of device configurations. The descriptor is read out by the USB host when the enumeration
- * process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(01.10),
- .Class = USB_CSCP_IADDeviceClass,
- .SubClass = USB_CSCP_IADDeviceSubclass,
- .Protocol = USB_CSCP_IADDeviceProtocol,
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- .VendorID = 0x03EB,
- .ProductID = 0x204E,
- .ReleaseNumber = VERSION_BCD(00.01),
-
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = USE_INTERNAL_SERIAL,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- * of the device in one of its supported configurations, including information about any device interfaces
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- * a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = 4,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
- },
-
- .CDC1_IAD =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
-
- .FirstInterfaceIndex = 0,
- .TotalInterfaces = 2,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .IADStrIndex = NO_DESCRIPTOR
- },
-
- .CDC1_CCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 1,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC1_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Header,
-
- .CDCSpecification = VERSION_BCD(01.10),
- },
-
- .CDC1_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_ACM,
-
- .Capabilities = 0x06,
- },
-
- .CDC1_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Union,
-
- .MasterInterfaceNumber = 0,
- .SlaveInterfaceNumber = 1,
- },
-
- .CDC1_ManagementEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC1_NOTIFICATION_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,
- .PollingIntervalMS = 0xFF
- },
-
- .CDC1_DCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 1,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = CDC_CSCP_CDCDataClass,
- .SubClass = CDC_CSCP_NoDataSubclass,
- .Protocol = CDC_CSCP_NoDataProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC1_DataOutEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | CDC1_RX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .CDC1_DataInEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC1_TX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .CDC2_IAD =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
-
- .FirstInterfaceIndex = 2,
- .TotalInterfaces = 2,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .IADStrIndex = NO_DESCRIPTOR
- },
-
- .CDC2_CCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 2,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 1,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC2_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Header,
-
- .CDCSpecification = VERSION_BCD(01.10),
- },
-
- .CDC2_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_ACM,
-
- .Capabilities = 0x06,
- },
-
- .CDC2_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Union,
-
- .MasterInterfaceNumber = 2,
- .SlaveInterfaceNumber = 3,
- },
-
- .CDC2_ManagementEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC2_NOTIFICATION_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,
- .PollingIntervalMS = 0xFF
- },
-
- .CDC2_DCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 3,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = CDC_CSCP_CDCDataClass,
- .SubClass = CDC_CSCP_NoDataSubclass,
- .Protocol = CDC_CSCP_NoDataProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC2_DataOutEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | CDC2_RX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .CDC2_DataInEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC2_TX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- }
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
- .UnicodeString = L"Dean Camera"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
- .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
- .UnicodeString = L"LUFA Dual CDC Demo"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorNumber = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- switch (DescriptorNumber)
- {
- case 0x00:
- Address = &LanguageString;
- Size = pgm_read_byte(&LanguageString.Header.Size);
- break;
- case 0x01:
- Address = &ManufacturerString;
- Size = pgm_read_byte(&ManufacturerString.Header.Size);
- break;
- case 0x02:
- Address = &ProductString;
- Size = pgm_read_byte(&ProductString.Header.Size);
- break;
- }
-
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
-
diff --git a/software/avr.lib/lufa-descriptor-usbdualserial.h b/software/avr.lib/lufa-descriptor-usbdualserial.h deleted file mode 100644 index d1e6ca6..0000000 --- a/software/avr.lib/lufa-descriptor-usbdualserial.h +++ /dev/null @@ -1,112 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
- /* Includes: */
- #include <avr/pgmspace.h>
-
- #include <LUFA/Drivers/USB/USB.h>
-
- /* Macros: */
- /** Endpoint number of the first CDC interface's device-to-host data IN endpoint. */
- #define CDC1_TX_EPNUM 1
-
- /** Endpoint number of the first CDC interface's host-to-device data OUT endpoint. */
- #define CDC1_RX_EPNUM 2
-
- /** Endpoint number of the first CDC interface's device-to-host notification IN endpoint. */
- #define CDC1_NOTIFICATION_EPNUM 3
-
- /** Endpoint number of the second CDC interface's device-to-host data IN endpoint. */
- #define CDC2_TX_EPNUM 4
-
- /** Endpoint number of the second CDC interface's host-to-device data OUT endpoint. */
- #define CDC2_RX_EPNUM 5
-
- /** Endpoint number of the second CDC interface's device-to-host notification IN endpoint. */
- #define CDC2_NOTIFICATION_EPNUM 6
-
- /** Size in bytes of the CDC device-to-host notification IN endpoints. */
- #define CDC_NOTIFICATION_EPSIZE 8
-
- /** Size in bytes of the CDC data IN and OUT endpoints. */
- #define CDC_TXRX_EPSIZE 16
-
- /* Type Defines: */
- /** Type define for the device configuration descriptor structure. This must be defined in the
- * application code, as the configuration descriptor contains several sub-descriptors which
- * vary between devices, and which describe the device's usage to the host.
- */
- typedef struct
- {
- USB_Descriptor_Configuration_Header_t Config;
-
- // First CDC Control Interface
- USB_Descriptor_Interface_Association_t CDC1_IAD;
- USB_Descriptor_Interface_t CDC1_CCI_Interface;
- USB_CDC_Descriptor_FunctionalHeader_t CDC1_Functional_Header;
- USB_CDC_Descriptor_FunctionalACM_t CDC1_Functional_ACM;
- USB_CDC_Descriptor_FunctionalUnion_t CDC1_Functional_Union;
- USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint;
-
- // First CDC Data Interface
- USB_Descriptor_Interface_t CDC1_DCI_Interface;
- USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint;
- USB_Descriptor_Endpoint_t CDC1_DataInEndpoint;
-
- // Second CDC Control Interface
- USB_Descriptor_Interface_Association_t CDC2_IAD;
- USB_Descriptor_Interface_t CDC2_CCI_Interface;
- USB_CDC_Descriptor_FunctionalHeader_t CDC2_Functional_Header;
- USB_CDC_Descriptor_FunctionalACM_t CDC2_Functional_ACM;
- USB_CDC_Descriptor_FunctionalUnion_t CDC2_Functional_Union;
- USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint;
-
- // Second CDC Data Interface
- USB_Descriptor_Interface_t CDC2_DCI_Interface;
- USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint;
- USB_Descriptor_Endpoint_t CDC2_DataInEndpoint;
- } USB_Descriptor_Configuration_t;
-
- /* Function Prototypes: */
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/avr.lib/lufa-descriptor-usbserial.c b/software/avr.lib/lufa-descriptor-usbserial.c deleted file mode 100644 index fa2ef25..0000000 --- a/software/avr.lib/lufa-descriptor-usbserial.c +++ /dev/null @@ -1,280 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- * computer-readable structures which the host requests upon device enumeration, to determine
- * the device's capabilities and functions.
- */
-
-#include "lufa-descriptor-usbserial.h"
-
-/* On some devices, there is a factory set internal serial number which can be automatically sent to the host as
- * the device's serial number when the Device Descriptor's .SerialNumStrIndex entry is set to USE_INTERNAL_SERIAL.
- * This allows the host to track a device across insertions on different ports, allowing them to retain allocated
- * resources like COM port numbers and drivers. On demos using this feature, give a warning on unsupported devices
- * so that the user can supply their own serial number descriptor instead or remove the USE_INTERNAL_SERIAL value
- * from the Device Descriptor (forcing the host to generate a serial number for each device from the VID, PID and
- * port location).
- */
-#if (USE_INTERNAL_SERIAL == NO_DESCRIPTOR)
- #warning USE_INTERNAL_SERIAL is not available on this AVR - please manually construct a device serial descriptor.
-#endif
-
-/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
- * device characteristics, including the supported USB version, control endpoint size and the
- * number of device configurations. The descriptor is read out by the USB host when the enumeration
- * process begins.
- */
-const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(01.10),
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_NoSpecificSubclass,
- .Protocol = CDC_CSCP_NoSpecificProtocol,
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- .VendorID = 0x03EB,
- .ProductID = 0x204B,
- .ReleaseNumber = VERSION_BCD(00.01),
-
- .ManufacturerStrIndex = 0x01,
- .ProductStrIndex = 0x02,
- .SerialNumStrIndex = USE_INTERNAL_SERIAL,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
- * of the device in one of its supported configurations, including information about any device interfaces
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- * a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = 2,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
- },
-
- .CDC_CCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 1,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Header,
-
- .CDCSpecification = VERSION_BCD(01.10),
- },
-
- .CDC_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_ACM,
-
- .Capabilities = 0x06,
- },
-
- .CDC_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
- .Subtype = CDC_DSUBTYPE_CSInterface_Union,
-
- .MasterInterfaceNumber = 0,
- .SlaveInterfaceNumber = 1,
- },
-
- .CDC_NotificationEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,
- .PollingIntervalMS = 0xFF
- },
-
- .CDC_DCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 1,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = CDC_CSCP_CDCDataClass,
- .SubClass = CDC_CSCP_NoDataSubclass,
- .Protocol = CDC_CSCP_NoDataProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_DataOutEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .CDC_DataInEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC_TX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- }
-};
-
-/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t PROGMEM LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-
-/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
- * form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ManufacturerString =
-{
-#ifndef USB_MANUFACTURER
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
- .UnicodeString = L"Dean Camera"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_MANUFACTURER_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_MANUFACTURER
-#endif
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t PROGMEM ProductString =
-{
-#ifndef USB_PRODUCT
- .Header = {.Size = USB_STRING_LEN(23), .Type = DTYPE_String},
- .UnicodeString = L"LUFA USB-RS232 Adapter"
-#else
- .Header = {.Size = USB_STRING_LEN(USB_PRODUCT_LEN), .Type = DTYPE_String},
- .UnicodeString = USB_PRODUCT
-#endif
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorNumber = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- switch (DescriptorNumber)
- {
- case 0x00:
- Address = &LanguageString;
- Size = pgm_read_byte(&LanguageString.Header.Size);
- break;
- case 0x01:
- Address = &ManufacturerString;
- Size = pgm_read_byte(&ManufacturerString.Header.Size);
- break;
- case 0x02:
- Address = &ProductString;
- Size = pgm_read_byte(&ProductString.Header.Size);
- break;
- }
-
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
-
diff --git a/software/avr.lib/lufa-descriptor-usbserial.h b/software/avr.lib/lufa-descriptor-usbserial.h deleted file mode 100644 index 97afd41..0000000 --- a/software/avr.lib/lufa-descriptor-usbserial.h +++ /dev/null @@ -1,89 +0,0 @@ -/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
- /* Includes: */
- #include <avr/pgmspace.h>
-
- #include <LUFA/Drivers/USB/USB.h>
-
- /* Macros: */
- /** Endpoint number of the CDC device-to-host notification IN endpoint. */
- #define CDC_NOTIFICATION_EPNUM 2
-
- /** Endpoint number of the CDC device-to-host data IN endpoint. */
- #define CDC_TX_EPNUM 3
-
- /** Endpoint number of the CDC host-to-device data OUT endpoint. */
- #define CDC_RX_EPNUM 4
-
- /** Size in bytes of the CDC device-to-host notification IN endpoint. */
- #define CDC_NOTIFICATION_EPSIZE 8
-
- /** Size in bytes of the CDC data IN and OUT endpoints. */
- #define CDC_TXRX_EPSIZE 16
-
- /* Type Defines: */
- /** Type define for the device configuration descriptor structure. This must be defined in the
- * application code, as the configuration descriptor contains several sub-descriptors which
- * vary between devices, and which describe the device's usage to the host.
- */
- typedef struct
- {
- USB_Descriptor_Configuration_Header_t Config;
-
- // CDC Command Interface
- USB_Descriptor_Interface_t CDC_CCI_Interface;
- USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header;
- USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM;
- USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union;
- USB_Descriptor_Endpoint_t CDC_NotificationEndpoint;
-
- // CDC Data Interface
- USB_Descriptor_Interface_t CDC_DCI_Interface;
- USB_Descriptor_Endpoint_t CDC_DataOutEndpoint;
- USB_Descriptor_Endpoint_t CDC_DataInEndpoint;
- } USB_Descriptor_Configuration_t;
-
- /* Function Prototypes: */
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/software/avr.lib/onewire.c b/software/avr.lib/onewire.c deleted file mode 100644 index f28ef41..0000000 --- a/software/avr.lib/onewire.c +++ /dev/null @@ -1,571 +0,0 @@ -/* -Copyright (c) 2007, Jim Studt (original old version - many contributors since) -refactored from C++ to C by Bernhard Tittelbach - -The latest version of this library may be found at: - http://www.pjrc.com/teensy/td_libs_OneWire.html - -OneWire has been maintained by Paul Stoffregen (paul@pjrc.com) since -January 2010. At the time, it was in need of many bug fixes, but had -been abandoned the original author (Jim Studt). None of the known -contributors were interested in maintaining OneWire. Paul typically -works on OneWire every 6 to 12 months. Patches usually wait that -long. If anyone is interested in more actively maintaining OneWire, -please contact Paul. - -Version 2.2: - Teensy 3.0 compatibility, Paul Stoffregen, paul@pjrc.com - Arduino Due compatibility, http://arduino.cc/forum/index.php?topic=141030 - Fix DS18B20 example negative temperature - Fix DS18B20 example's low res modes, Ken Butcher - Improve reset timing, Mark Tillotson - Add const qualifiers, Bertrik Sikken - Add initial value input to crc16, Bertrik Sikken - Add target_search() function, Scott Roberts - -Version 2.1: - Arduino 1.0 compatibility, Paul Stoffregen - Improve temperature example, Paul Stoffregen - DS250x_PROM example, Guillermo Lovato - PIC32 (chipKit) compatibility, Jason Dangel, dangel.jason AT gmail.com - Improvements from Glenn Trewitt: - - crc16() now works - - check_crc16() does all of calculation/checking work. - - Added read_bytes() and write_bytes(), to reduce tedious loops. - - Added ds2408 example. - Delete very old, out-of-date readme file (info is here) - -Version 2.0: Modifications by Paul Stoffregen, January 2010: -http://www.pjrc.com/teensy/td_libs_OneWire.html - Search fix from Robin James - http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 - Use direct optimized I/O in all cases - Disable interrupts during timing critical sections - (this solves many random communication errors) - Disable interrupts during read-modify-write I/O - Reduce RAM consumption by eliminating unnecessary - variables and trimming many to 8 bits - Optimize both crc8 - table version moved to flash - -Modified to work with larger numbers of devices - avoids loop. -Tested in Arduino 11 alpha with 12 sensors. -26 Sept 2008 -- Robin James -http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 - -Updated to work with arduino-0008 and to include skip() as of -2007/07/06. --RJL20 - -Modified to calculate the 8-bit CRC directly, avoiding the need for -the 256-byte lookup table to be loaded in RAM. Tested in arduino-0010 --- Tom Pollard, Jan 23, 2008 - -Jim Studt's original library was modified by Josh Larios. - -Tom Pollard, pollard@alum.mit.edu, contributed around May 20, 2008 - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Much of the code was inspired by Derek Yerger's code, though I don't -think much of that remains. In any event that was.. - (copyleft) 2006 by Derek Yerger - Free to distribute freely. - -The CRC code was excerpted and inspired by the Dallas Semiconductor -sample code bearing this copyright. -//--------------------------------------------------------------------------- -// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//-------------------------------------------------------------------------- -*/ - -#include "onewire.h" -#include <util/delay.h> -#include <avr/interrupt.h> - - -IO_REG_TYPE owi_bitmask; -volatile IO_REG_TYPE *owi_baseReg; -#if ONEWIRE_SEARCH -// global search state -unsigned char ROM_NO[8]; -uint8_t owi_LastDiscrepancy; -uint8_t owi_LastFamilyDiscrepancy; -uint8_t owi_LastDeviceFlag; -#endif - - -void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port) -{ - owi_bitmask = _BV(pin); - owi_baseReg = pin_read_port; - DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); -#if ONEWIRE_SEARCH - owi_reset_search(); -#endif -} - - -// Perform the onewire reset function. We will wait up to 250uS for -// the bus to come high, if it doesn't then it is broken or shorted -// and we return a 0; -// -// Returns 1 if a device asserted a presence pulse, 0 otherwise. -// -uint8_t owi_reset(void) -{ - IO_REG_TYPE mask = owi_bitmask; - register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; - uint8_t r; - uint8_t retries = 125; - - cli(); - DIRECT_MODE_INPUT(reg, mask); - sei(); - // wait until the wire is high... just in case - do { - if (--retries == 0) return 0; - _delay_us(2); - } while ( !DIRECT_READ(reg, mask)); - - cli(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - sei(); - _delay_us(480); - cli(); - DIRECT_MODE_INPUT(reg, mask); // allow it to float - _delay_us(70); - r = !DIRECT_READ(reg, mask); - sei(); - _delay_us(410); - return r; -} - -// -// Write a bit. Port and bit is used to cut lookup time and provide -// more certain timing. -// -void owi_write_bit(uint8_t v) -{ - IO_REG_TYPE mask=owi_bitmask; - register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; - - if (v & 1) { - cli(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - _delay_us(10); - DIRECT_WRITE_HIGH(reg, mask); // drive output high - sei(); - _delay_us(55); - } else { - cli(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - _delay_us(65); - DIRECT_WRITE_HIGH(reg, mask); // drive output high - sei(); - _delay_us(5); - } -} - -// -// Read a bit. Port and bit is used to cut lookup time and provide -// more certain timing. -// -uint8_t owi_read_bit(void) -{ - IO_REG_TYPE mask=owi_bitmask; - register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; - uint8_t r; - - cli(); - DIRECT_MODE_OUTPUT(reg, mask); - DIRECT_WRITE_LOW(reg, mask); - _delay_us(3); - DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise - _delay_us(10); - r = DIRECT_READ(reg, mask); - sei(); - _delay_us(53); - return r; -} - -// -// Write a byte. The writing code uses the active drivers to raise the -// pin high, if you need power after the write (e.g. DS18S20 in -// parasite power mode) then set 'power' to 1, otherwise the pin will -// go tri-state at the end of the write to avoid heating in a short or -// other mishap. -// -void owi_write(uint8_t v, uint8_t power /* = 0 */) { - uint8_t bitMask; - - for (bitMask = 0x01; bitMask; bitMask <<= 1) { - owi_write_bit( (bitMask & v)?1:0); - } - if ( !power) { - cli(); - DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); - DIRECT_WRITE_LOW(owi_baseReg, owi_bitmask); - sei(); - } -} - -void owi_write_bytes(const uint8_t *buf, uint16_t count, bool power /* = 0 */) { - for (uint16_t i = 0 ; i < count ; i++) - owi_write(buf[i],0); - if (!power) { - cli(); - DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); - DIRECT_WRITE_LOW(owi_baseReg, owi_bitmask); - sei(); - } -} - -// -// Read a byte -// -uint8_t owi_read() { - uint8_t bitMask; - uint8_t r = 0; - - for (bitMask = 0x01; bitMask; bitMask <<= 1) { - if ( owi_read_bit()) r |= bitMask; - } - return r; -} - -void owi_read_bytes(uint8_t *buf, uint16_t count) { - for (uint16_t i = 0 ; i < count ; i++) - buf[i] = owi_read(); -} - -// -// Do a ROM select -// -void owi_select(const uint8_t rom[8]) -{ - uint8_t i; - - owi_write(0x55,0); // Choose ROM - - for (i = 0; i < 8; i++) owi_write(rom[i],0); -} - -// -// Do a ROM skip -// -void owi_skip() -{ - owi_write(0xCC,0); // Skip ROM -} - -void owi_depower() -{ - cli(); - DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); - sei(); -} - -#if ONEWIRE_SEARCH - -// -// You need to use this function to start a search again from the beginning. -// You do not need to do it for the first search, though you could. -// -void owi_reset_search() -{ - // reset the search state - owi_LastDiscrepancy = 0; - owi_LastDeviceFlag = FALSE; - owi_LastFamilyDiscrepancy = 0; - for(int i = 7; ; i--) { - ROM_NO[i] = 0; - if ( i == 0) break; - } -} - -// Setup the search to find the device type 'family_code' on the next call -// to search(*newAddr) if it is present. -// -void owi_target_search(uint8_t family_code) -{ - // set the search state to find SearchFamily type devices - ROM_NO[0] = family_code; - for (uint8_t i = 1; i < 8; i++) - ROM_NO[i] = 0; - owi_LastDiscrepancy = 64; - owi_LastFamilyDiscrepancy = 0; - owi_LastDeviceFlag = FALSE; -} - -// -// Perform a search. If this function returns a '1' then it has -// enumerated the next device and you may retrieve the ROM from the -// owi_address variable. If there are no devices, no further -// devices, or something horrible happens in the middle of the -// enumeration then a 0 is returned. If a new device is found then -// its address is copied to newAddr. Use owi_reset_search() to -// start over. -// -// --- Replaced by the one from the Dallas Semiconductor web site --- -//-------------------------------------------------------------------------- -// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing -// search state. -// Return TRUE : device found, ROM number in ROM_NO buffer -// FALSE : device not found, end of search -// -uint8_t owi_search(uint8_t *newAddr) -{ - uint8_t id_bit_number; - uint8_t last_zero, rom_byte_number, search_result; - uint8_t id_bit, cmp_id_bit; - - unsigned char rom_byte_mask, search_direction; - - // initialize for search - id_bit_number = 1; - last_zero = 0; - rom_byte_number = 0; - rom_byte_mask = 1; - search_result = 0; - - // if the last call was not the last one - if (!owi_LastDeviceFlag) - { - // 1-Wire reset - if (!owi_reset()) - { - // reset the search - owi_LastDiscrepancy = 0; - owi_LastDeviceFlag = FALSE; - owi_LastFamilyDiscrepancy = 0; - return FALSE; - } - - // issue the search command - owi_write(0xF0,0); - - // loop to do the search - do - { - // read a bit and its complement - id_bit = owi_read_bit(); - cmp_id_bit = owi_read_bit(); - - // check for no devices on 1-wire - if ((id_bit == 1) && (cmp_id_bit == 1)) - break; - else - { - // all devices coupled have 0 or 1 - if (id_bit != cmp_id_bit) - search_direction = id_bit; // bit write value for search - else - { - // if this discrepancy if before the Last Discrepancy - // on a previous next then pick the same as last time - if (id_bit_number < owi_LastDiscrepancy) - search_direction = ((ROM_NO[rom_byte_number] & rom_byte_mask) > 0); - else - // if equal to last pick 1, if not then pick 0 - search_direction = (id_bit_number == owi_LastDiscrepancy); - - // if 0 was picked then record its position in LastZero - if (search_direction == 0) - { - last_zero = id_bit_number; - - // check for Last discrepancy in family - if (last_zero < 9) - owi_LastFamilyDiscrepancy = last_zero; - } - } - - // set or clear the bit in the ROM byte rom_byte_number - // with mask rom_byte_mask - if (search_direction == 1) - ROM_NO[rom_byte_number] |= rom_byte_mask; - else - ROM_NO[rom_byte_number] &= ~rom_byte_mask; - - // serial number search direction write bit - owi_write_bit(search_direction); - - // increment the byte counter id_bit_number - // and shift the mask rom_byte_mask - id_bit_number++; - rom_byte_mask <<= 1; - - // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask - if (rom_byte_mask == 0) - { - rom_byte_number++; - rom_byte_mask = 1; - } - } - } - while(rom_byte_number < 8); // loop until through all ROM bytes 0-7 - - // if the search was successful then - if (!(id_bit_number < 65)) - { - // search successful so set owi_LastDiscrepancy,owi_LastDeviceFlag,search_result - owi_LastDiscrepancy = last_zero; - - // check for last device - if (owi_LastDiscrepancy == 0) - owi_LastDeviceFlag = TRUE; - - search_result = TRUE; - } - } - - // if no device found then reset counters so next 'search' will be like a first - if (!search_result || !ROM_NO[0]) - { - owi_LastDiscrepancy = 0; - owi_LastDeviceFlag = FALSE; - owi_LastFamilyDiscrepancy = 0; - search_result = FALSE; - } - for (int i = 0; i < 8; i++) newAddr[i] = ROM_NO[i]; - return search_result; - } - -#endif - -#if ONEWIRE_CRC -// The 1-Wire CRC scheme is described in Maxim Application Note 27: -// "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products" -// - -#if ONEWIRE_CRC8_TABLE -// This table comes from Dallas sample code where it is freely reusable, -// though Copyright (C) 2000 Dallas Semiconductor Corporation -const uint8_t PROGMEM dscrc_table[] = { - 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65, - 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220, - 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98, - 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255, - 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7, - 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154, - 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36, - 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185, - 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205, - 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80, - 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238, - 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115, - 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139, - 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22, - 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168, - 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53}; - -// -// Compute a Dallas Semiconductor 8 bit CRC. These show up in the ROM -// and the registers. (note: this might better be done without to -// table, it would probably be smaller and certainly fast enough -// compared to all those delayMicrosecond() calls. But I got -// confused, so I use this table from the examples.) -// -uint8_t owi_crc8(const uint8_t *addr, uint8_t len) -{ - uint8_t crc = 0; - - while (len--) { - crc = pgm_read_byte(dscrc_table + (crc ^ *addr++)); - } - return crc; -} -#else -// -// Compute a Dallas Semiconductor 8 bit CRC directly. -// this is much slower, but much smaller, than the lookup table. -// -uint8_t owi_crc8(const uint8_t *addr, uint8_t len) -{ - uint8_t crc = 0; - - while (len--) { - uint8_t inbyte = *addr++; - for (uint8_t i = 8; i; i--) { - uint8_t mix = (crc ^ inbyte) & 0x01; - crc >>= 1; - if (mix) crc ^= 0x8C; - inbyte >>= 1; - } - } - return crc; -} -#endif - -#if ONEWIRE_CRC16 -bool owi_check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc) -{ - crc = ~owi_crc16(input, len, crc); - return (crc & 0xFF) == inverted_crc[0] && (crc >> 8) == inverted_crc[1]; -} - -uint16_t owi_crc16(const uint8_t* input, uint16_t len, uint16_t crc) -{ - static const uint8_t oddparity[16] = - { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }; - - for (uint16_t i = 0 ; i < len ; i++) { - // Even though we're just copying a byte from the input, - // we'll be doing 16-bit computation with it. - uint16_t cdata = input[i]; - cdata = (cdata ^ crc) & 0xff; - crc >>= 8; - - if (oddparity[cdata & 0x0F] ^ oddparity[cdata >> 4]) - crc ^= 0xC001; - - cdata <<= 6; - crc ^= cdata; - cdata <<= 1; - crc ^= cdata; - } - return crc; -} -#endif - -#endif diff --git a/software/avr.lib/onewire.h b/software/avr.lib/onewire.h deleted file mode 100644 index 1410fde..0000000 --- a/software/avr.lib/onewire.h +++ /dev/null @@ -1,206 +0,0 @@ -#ifndef OneWire_h -#define OneWire_h - -#include <inttypes.h> -#include <stdbool.h> -#include <avr/pgmspace.h> - -// You can exclude certain features from OneWire. In theory, this -// might save some space. In practice, the compiler automatically -// removes unused code (technically, the linker, using -fdata-sections -// and -ffunction-sections when compiling, and Wl,--gc-sections -// when linking), so most of these will not result in any code size -// reduction. Well, unless you try to use the missing features -// and redesign your program to not need them! ONEWIRE_CRC8_TABLE -// is the exception, because it selects a fast but large algorithm -// or a small but slow algorithm. - -// you can exclude onewire_search by defining that to 0 -#ifndef ONEWIRE_SEARCH -#define ONEWIRE_SEARCH 1 -#endif - -// You can exclude CRC checks altogether by defining this to 0 -#ifndef ONEWIRE_CRC -#define ONEWIRE_CRC 1 -#endif - -// Select the table-lookup method of computing the 8-bit CRC -// by setting this to 1. The lookup table enlarges code size by -// about 250 bytes. It does NOT consume RAM (but did in very -// old versions of OneWire). If you disable this, a slower -// but very compact algorithm is used. -#ifndef ONEWIRE_CRC8_TABLE -#define ONEWIRE_CRC8_TABLE 1 -#endif - -// You can allow 16-bit CRC checks by defining this to 1 -// (Note that ONEWIRE_CRC must also be 1.) -#ifndef ONEWIRE_CRC16 -#define ONEWIRE_CRC16 1 -#endif - -#define FALSE 0 -#define TRUE 1 - -// Platform specific I/O definitions - -#if defined(__AVR__) -#define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define IO_REG_TYPE uint8_t -#define IO_REG_ASM __asm__("r30") -#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) -#define DIRECT_MODE_INPUT(base, mask) ((*((base)+1)) &= ~(mask)) -#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+1)) |= (mask)) -#define DIRECT_WRITE_LOW(base, mask) ((*((base)+2)) &= ~(mask)) -#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+2)) |= (mask)) - -#elif defined(__MK20DX128__) -#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) -#define PIN_TO_BITMASK(pin) (1) -#define IO_REG_TYPE uint8_t -#define IO_REG_ASM -#define DIRECT_READ(base, mask) (*((base)+512)) -#define DIRECT_MODE_INPUT(base, mask) (*((base)+640) = 0) -#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+640) = 1) -#define DIRECT_WRITE_LOW(base, mask) (*((base)+256) = 1) -#define DIRECT_WRITE_HIGH(base, mask) (*((base)+128) = 1) - -#elif defined(__SAM3X8E__) -// Arduino 1.5.1 may have a bug in delayMicroseconds() on Arduino Due. -// http://arduino.cc/forum/index.php/topic,141030.msg1076268.html#msg1076268 -// If you have trouble with OneWire on Arduino Due, please check the -// status of delayMicroseconds() before reporting a bug in OneWire! -#define PIN_TO_BASEREG(pin) (&(digitalPinToPort(pin)->PIO_PER)) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define IO_REG_TYPE uint32_t -#define IO_REG_ASM -#define DIRECT_READ(base, mask) (((*((base)+15)) & (mask)) ? 1 : 0) -#define DIRECT_MODE_INPUT(base, mask) ((*((base)+5)) = (mask)) -#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+4)) = (mask)) -#define DIRECT_WRITE_LOW(base, mask) ((*((base)+13)) = (mask)) -#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+12)) = (mask)) -#ifndef PROGMEM -#define PROGMEM -#endif -#ifndef pgm_read_byte -#define pgm_read_byte(addr) (*(const uint8_t *)(addr)) -#endif - -#elif defined(__PIC32MX__) -#define PIN_TO_BASEREG(pin) (portModeRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define IO_REG_TYPE uint32_t -#define IO_REG_ASM -#define DIRECT_READ(base, mask) (((*(base+4)) & (mask)) ? 1 : 0) //PORTX + 0x10 -#define DIRECT_MODE_INPUT(base, mask) ((*(base+2)) = (mask)) //TRISXSET + 0x08 -#define DIRECT_MODE_OUTPUT(base, mask) ((*(base+1)) = (mask)) //TRISXCLR + 0x04 -#define DIRECT_WRITE_LOW(base, mask) ((*(base+8+1)) = (mask)) //LATXCLR + 0x24 -#define DIRECT_WRITE_HIGH(base, mask) ((*(base+8+2)) = (mask)) //LATXSET + 0x28 - -#else -#error "Please define I/O register types here" -#endif - -#ifndef _BV -#define _BV(bit) (1 << (bit)) -#endif - -void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port); - -uint8_t owi_reset(void); -void owi_select(const uint8_t rom[8]); - -// Issue a 1-Wire rom skip command, to address all on bus. -void owi_skip(void); - -// Write a byte. If 'power' is one then the wire is held high at -// the end for parasitically powered devices. You are responsible -// for eventually depowering it by calling depower() or doing -// another read or write. -void owi_write(uint8_t v, uint8_t power); - -void owi_write_bytes(const uint8_t *buf, uint16_t count, bool power); - -// Read a byte. -uint8_t owi_read(void); - -void owi_read_bytes(uint8_t *buf, uint16_t count); - -// Write a bit. The bus is always left powered at the end, see -// note in write() about that. -void owi_write_bit(uint8_t v); - -// Read a bit. -uint8_t owi_read_bit(void); - -// Stop forcing power onto the bus. You only need to do this if -// you used the 'power' flag to write() or used a write_bit() call -// and aren't about to do another read or write. You would rather -// not leave this powered if you don't have to, just in case -// someone shorts your bus. -void owi_depower(void); - -#if ONEWIRE_SEARCH -// Clear the search state so that if will start from the beginning again. -void owi_reset_search(void); - -// Setup the search to find the device type 'family_code' on the next call -// to search(*newAddr) if it is present. -void owi_target_search(uint8_t family_code); - -// Look for the next device. Returns 1 if a new address has been -// returned. A zero might mean that the bus is shorted, there are -// no devices, or you have already retrieved all of them. It -// might be a good idea to check the CRC to make sure you didn't -// get garbage. The order is deterministic. You will always get -// the same devices in the same order. -uint8_t owi_search(uint8_t *newAddr); -#endif - -#if ONEWIRE_CRC -// Compute a Dallas Semiconductor 8 bit CRC, these are used in the -// ROM and scratchpad registers. -uint8_t owi_crc8(const uint8_t *addr, uint8_t len); - -#if ONEWIRE_CRC16 -// Compute the 1-Wire CRC16 and compare it against the received CRC. -// Example usage (reading a DS2408): -// // Put everything in a buffer so we can compute the CRC easily. -// uint8_t buf[13]; -// buf[0] = 0xF0; // Read PIO Registers -// buf[1] = 0x88; // LSB address -// buf[2] = 0x00; // MSB address -// WriteBytes(net, buf, 3); // Write 3 cmd bytes -// ReadBytes(net, buf+3, 10); // Read 6 data bytes, 2 0xFF, 2 CRC16 -// if (!CheckCRC16(buf, 11, &buf[11])) { -// // Handle error. -// } -// -// @param input - Array of bytes to checksum. -// @param len - How many bytes to use. -// @param inverted_crc - The two CRC16 bytes in the received data. -// This should just point into the received data, -// *not* at a 16-bit integer. -// @param crc - The crc starting value (optional) -// @return True, iff the CRC matches. -bool owi_check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc); - -// Compute a Dallas Semiconductor 16 bit CRC. This is required to check -// the integrity of data received from many 1-Wire devices. Note that the -// CRC computed here is *not* what you'll get from the 1-Wire network, -// for two reasons: -// 1) The CRC is transmitted bitwise inverted. -// 2) Depending on the endian-ness of your processor, the binary -// representation of the two-byte return value may have a different -// byte order than the two bytes you get from 1-Wire. -// @param input - Array of bytes to checksum. -// @param len - How many bytes to use. -// @param crc - The crc starting value (optional) -// @return The CRC16, as defined by Dallas Semiconductor. -uint16_t owi_crc16(const uint8_t* input, uint16_t len, uint16_t crc); -#endif -#endif - -#endif diff --git a/software/avr.lib/rda1846.c b/software/avr.lib/rda1846.c deleted file mode 100644 index 83cc270..0000000 --- a/software/avr.lib/rda1846.c +++ /dev/null @@ -1,485 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2015 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "LUFA/Drivers/Peripheral/TWI.h" -#include <stdio.h> - -#include "rda1846.h" -#include "rda1846_defines.h" - -static uint8_t rda1846_write_register_raw(const uint8_t addr, const uint16_t data) -{ - if(TWI_StartTransmission(RDA1846_CHIP_ADDR | TWI_ADDRESS_WRITE,10) != TWI_ERROR_NoError) - return 1; - - if(!TWI_SendByte(addr | RDA1846_ADDR_W)) - goto i2c_error; - if(!TWI_SendByte((uint8_t)(data>>8))) - goto i2c_error; - if(!TWI_SendByte((uint8_t)data)) - goto i2c_error; - - TWI_StopTransmission(); - return 0; - -i2c_error: - TWI_StopTransmission(); - printf("I2C error (write_register_raw)\r\n"); - return 1; -} - -static uint8_t rda1846_read_register_raw(const uint8_t addr, uint16_t* data) -{ - if(TWI_StartTransmission(RDA1846_CHIP_ADDR | TWI_ADDRESS_WRITE,10) != TWI_ERROR_NoError) - return 1; - if(!TWI_SendByte(addr | RDA1846_ADDR_R)) - goto i2c_error; - - if(TWI_StartTransmission(RDA1846_CHIP_ADDR | TWI_ADDRESS_READ,10) != TWI_ERROR_NoError) - goto i2c_error; - uint8_t tmp; - if(!TWI_ReceiveByte(&tmp, 0)) - goto i2c_error; - *data = tmp << 8; - if(!TWI_ReceiveByte(&tmp, 1)) - goto i2c_error; - *data |= tmp; - - TWI_StopTransmission(); - return 0; - -i2c_error: - TWI_StopTransmission(); - printf("I2C error (read_register_raw)\r\n"); - return 1; -} - -static uint8_t rda1846_write_register(const uint8_t addr, const uint16_t data) -{ - if(addr < RDA1846_ADDR_LIMIT) - return rda1846_write_register_raw(addr, data); - - if(addr > RDA1846_ADDR_LIMIT) { - uint8_t ret = rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 1); - if(ret) return ret; - - ret = rda1846_write_register_raw(addr, data); - if(ret) return ret; - - return rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 0); - } - return 1; -} - -static uint8_t rda1846_read_register(const uint8_t addr, uint16_t* data) -{ - if(addr < RDA1846_ADDR_LIMIT) - return rda1846_read_register_raw(addr, data); - - if(addr > RDA1846_ADDR_LIMIT) { - uint8_t ret = rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 1); - if(ret) return ret; - - ret = rda1846_read_register_raw(addr - RDA1846_ADDR_LIMIT + 1, data); - if(ret) return ret; - - return rda1846_write_register_raw(RDA1846_ADDR_LIMIT, 0); - } - return 1; -} - -static rf_band_t rf_band_; -static channel_bw_t channel_bw_; -static rda1846_state_t state_; - -/* - * EXTERNAL INTERFACE - */ - -char* rda1846_rf_band_to_string(rf_band_t b) -{ - switch(b) - { - case b_2m: return "2m (134-174 MHz)"; - case b_1m5: return "1.5m (200-260 MHz)"; - case b_70cm: return "70cm (400-520 MHz)"; - } - return ""; -} - -char* rda1846_channel_bw_to_string(channel_bw_t bw) -{ - switch(bw) - { - case bw_12k5: return "12,5 kHz"; - case bw_25k: return "25 kHz"; - } - return ""; -} - -char* rda1846_state_to_string(rda1846_state_t s) -{ - switch(s) - { - case powerdown: return "powerdown"; - case idle: return "idle"; - case receive: return "receiving"; - case transmit: return "transmitting"; - } - return ""; -} - -void rda1846_init(void) -{ - TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000)); -} - -void rda1846_reg_init(void) -{ - rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST); - rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_PDN); - - rda1846_write_register(RDA1846_REG_XTAL, RDA1846_XTAL_FREQ); - rda1846_write_register(RDA1846_REG_ADCLK, RDA1846_ADCLK_FREQ); - rda1846_write_register(RDA1846_REG_CLK_MODE, RDA1846_CLK_MODE); - - rda1846_write_register(RDA1846_REG_RF_BAND, RDA1846_RF_BAND_2M); - rf_band_ = b_2m; - - rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_CH_12K5 | RDA1846_CTL_RX_M_TX_M | RDA1846_CTL_PDN); - channel_bw_ = bw_12k5; - state_ = idle; - - rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_NONE); -// rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_MIC); -// rda1846_write_register(RDA1846_REG_TX_VOICE, RDA1846_TX_VOICE_TONE2); -// rda1846_write_register(RDA1846_REG_DTMF_T2, 6689); - - rda1846_write_register(RDA1846_REG_DTMF_C01, (RDA1846_DTMF_C0 << 8) | RDA1846_DTMF_C1); - rda1846_write_register(RDA1846_REG_DTMF_C23, (RDA1846_DTMF_C1 << 8) | RDA1846_DTMF_C3); - rda1846_write_register(RDA1846_REG_DTMF_C45, (RDA1846_DTMF_C3 << 8) | RDA1846_DTMF_C5); - rda1846_write_register(RDA1846_REG_DTMF_C67, (RDA1846_DTMF_C6 << 8) | RDA1846_DTMF_C7); - rda1846_write_register(RDA1846_REG_DTMF_CTL, RDA1846_DTMF_DUAL | RDA1846_DTMF_EN); - rda1846_write_register(RDA1846_REG_INT, RDA1846_INT_DTMF_IDLE); - - rda1846_gpio_default(); -} - -void rda1846_soft_reset(void) -{ - rda1846_write_register(RDA1846_REG_CTL, RDA1846_CTL_SOFT_RST); -} - - - -void rda1846_set_band(rf_band_t b) -{ - uint16_t data = RDA1846_RF_BAND_2M; - if(b == b_1m5) data = RDA1846_RF_BAND_1M5; - if(b == b_70cm) data = RDA1846_RF_BAND_70CM; - if(!rda1846_write_register(RDA1846_REG_RF_BAND, data)) - rf_band_ = b; -} - -rf_band_t rda1846_get_band(void) -{ - return rf_band_; -} - -void rda1846_set_bw(channel_bw_t bw) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_CTL, &data)) - return; - - data &= RDA1846_CTL_CH_RESET; - data |= bw == bw_12k5 ? RDA1846_CTL_CH_12K5 : RDA1846_CTL_CH_25K; - if(!rda1846_write_register(RDA1846_REG_CTL, data)) - channel_bw_ = bw; -} - -channel_bw_t rda1846_get_bw(void) -{ - return channel_bw_; -} - -uint8_t rda1846_set_freq_kHz(int32_t freq) -{ - if((rf_band_ == b_2m && (freq < RDA1846_BAND_2M_LOW || freq > RDA1846_BAND_2M_HIGH)) || - (rf_band_ == b_1m5 && (freq < RDA1846_BAND_1M5_LOW || freq > RDA1846_BAND_1M5_HIGH)) || - (rf_band_ == b_70cm && (freq < RDA1846_BAND_70CM_LOW || freq > RDA1846_BAND_70CM_HIGH)) ) - return 1; - - freq = freq<<3; - uint8_t ret = rda1846_write_register(RDA1846_REG_FREQH, ((freq>>16) & 0x00003FFF)); - if(ret) - return 1; - - return rda1846_write_register(RDA1846_REG_FREQL, (freq & 0x0000FFFF)); -} - -static int32_t corr_freq(int32_t f) -{ - float corr = RDA1846_FREQ_CORR_2M; - if(rf_band_ == b_1m5) corr = RDA1846_FREQ_CORR_1M5; - if(rf_band_ == b_70cm) corr = RDA1846_FREQ_CORR_70CM; - return (int32_t)(((float)f)/corr); -} - -int32_t rda1846_get_freq_kHz(void) -{ - if(state_ == powerdown || state_ == idle) - return -1; - - uint16_t data; - uint8_t ret = rda1846_read_register(RDA1846_REG_FREQH, &data); - if(ret) - return -1; - - int32_t freq = (((uint32_t)(data & 0x3FFF))<<16); - ret = rda1846_read_register(RDA1846_REG_FREQL, &data); - if(ret) - return -1; - - freq = corr_freq((freq+data)>>3); - return (freq / 8) + ((freq % 8) < 4 ? 0 : 1); -} - - - -void rda1846_powerdown(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_CTL, &data)) - return; - - data &= ~(RDA1846_CTL_TX | RDA1846_CTL_RX | RDA1846_CTL_CHIP_CAL | RDA1846_CTL_PDN); - if(!rda1846_write_register(RDA1846_REG_CTL, data)) - state_ = powerdown; -} - -void rda1846_idle(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_CTL, &data)) - return; - - data &= ~(RDA1846_CTL_TX | RDA1846_CTL_RX | RDA1846_CTL_CHIP_CAL); - data |= RDA1846_CTL_PDN; - if(!rda1846_write_register(RDA1846_REG_CTL, data)) - state_ = idle; -} - -void rda1846_receive(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_CTL, &data)) - return; - - data &= ~(RDA1846_CTL_TX); - data |= RDA1846_CTL_RX | RDA1846_CTL_CHIP_CAL | RDA1846_CTL_PDN; - if(!rda1846_write_register(RDA1846_REG_CTL, data)) - state_ = receive; -} - -void rda1846_transmit(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_CTL, &data)) - return; - - data &= ~(RDA1846_CTL_RX); - data |= RDA1846_CTL_TX | RDA1846_CTL_CHIP_CAL | RDA1846_CTL_PDN; - if(!rda1846_write_register(RDA1846_REG_CTL, data)) - state_ = transmit; -} - -rda1846_state_t rda1846_get_state(void) -{ - return state_; -} - - - -uint16_t rda1846_get_dtmf(uint8_t* idx1, uint8_t* idx2, uint8_t* code, uint8_t* valid) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_DTMF_OUT, &data)) - return 0xFFFF; - - if(idx1) *idx1 = (uint8_t)((data & 0x0700)>>8); - if(idx2) *idx2 = (uint8_t)((data & 0x00E0)>>5); - if(code) *code = (uint8_t)(data & 0x000F); - if(valid) *valid = data & 0x0010 ? 0 : 1; - - return data; -} - -void rda1846_clear_int(void) -{ - rda1846_write_register(0x00, 0x1846); -} - - - -void rda1846_set_volume(int8_t vol) -{ - uint16_t data; - if(vol < -30 || vol > 0) - return; - - if(vol >= -15) - data = 0x000F | (((vol + 15)<<4) & 0xF0); - else - data = (vol + 30) & 0x0F; - - rda1846_write_register(RDA1846_REG_RX_VOICE, data); -} - -int8_t rda1846_get_volume(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_RX_VOICE, &data)) - return 1; - - return (int8_t)(((data & 0x00F0)>>4) + (data & 0x000F)) - 30; -} - - - -void rda1846_gpio_default(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_VOX | RDA1846_GPIO_6_SQ | - RDA1846_GPIO_5_TXON_RF | RDA1846_GPIO_4_RXON_RF | - RDA1846_GPIO_2_INT); -} - -void rda1846_gpio_AA(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HIGH | RDA1846_GPIO_6_LOW | - RDA1846_GPIO_5_HIGH | RDA1846_GPIO_4_LOW | - RDA1846_GPIO_3_HIGH | RDA1846_GPIO_2_LOW | - RDA1846_GPIO_1_HIGH | RDA1846_GPIO_0_LOW); -} - -void rda1846_gpio_55(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_LOW | RDA1846_GPIO_6_HIGH | - RDA1846_GPIO_5_LOW | RDA1846_GPIO_4_HIGH | - RDA1846_GPIO_3_LOW | RDA1846_GPIO_2_HIGH | - RDA1846_GPIO_1_LOW | RDA1846_GPIO_0_HIGH); -} - -void rda1846_gpio_off(void) -{ - rda1846_write_register(RDA1846_REG_GPIO, RDA1846_GPIO_7_HI_Z | RDA1846_GPIO_6_HI_Z | - RDA1846_GPIO_5_HI_Z | RDA1846_GPIO_4_HI_Z | - RDA1846_GPIO_3_HI_Z | RDA1846_GPIO_2_HI_Z | - RDA1846_GPIO_1_HI_Z | RDA1846_GPIO_0_HI_Z); -} - - - -int16_t rda1846_get_rssi(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_RSSI, &data)) - return -1; - - return ((int16_t)(data & 0x03FF) - 135*8); -} - -int16_t rda1846_get_vssi(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_VSSI, &data)) - return -1; - - return (int16_t)data; -} - -uint16_t rda1846_get_flags(void) -{ - uint16_t data; - if(rda1846_read_register(RDA1846_REG_FLAG, &data)) - return 0xFFFF; - - return data & RDA1846_FLAGS_MASK; -} - - - -static char* rda1846_regaddr_to_string(uint8_t addr) -{ - switch(addr) { - case RDA1846_REG_CTL: return "CTL"; - case RDA1846_REG_GPIO: return "GPIO"; - case RDA1846_REG_INT: return "INT"; - case RDA1846_REG_FLAG: return "FLAG"; - case RDA1846_REG_RSSI: return "RSSI"; - case RDA1846_REG_VSSI: return "VSSI"; - case RDA1846_REG_CLK_MODE: return "CLK_MODE"; - case RDA1846_REG_XTAL: return "XTAL"; - case RDA1846_REG_ADCLK: return "ADCLK"; - case RDA1846_REG_RF_BAND: return "RF_BAND"; - case RDA1846_REG_FREQH: return "FREQH"; - case RDA1846_REG_FREQL: return "FREQL"; - case RDA1846_REG_PA_BIAS: return "PA_BIAS"; - case RDA1846_REG_TX_VOICE: return "TX_VOICE"; - case RDA1846_REG_VOX_OPEN: return "VOX_OPEN"; - case RDA1846_REG_VOX_SHUT: return "VOX_SHUT"; - case RDA1846_REG_SUBAUDIO: return "SUBAUDIO"; - case RDA1846_REG_RX_VOICE: return "RX_VOICE"; - case RDA1846_REG_SQ_OPEN: return "SQ_OPEN"; - case RDA1846_REG_SQ_SHUT: return "SQ_SHUT"; - case RDA1846_REG_DTMF_CTL: return "DTMF_CTL"; - case RDA1846_REG_DTMF_T1: return "DTMF_T1"; - case RDA1846_REG_DTMF_T2: return "DTMF_T2"; - case RDA1846_REG_DTMF_C01: return "DTMF_C01"; - case RDA1846_REG_DTMF_C23: return "DTMF_C23"; - case RDA1846_REG_DTMF_C45: return "DTMF_C45"; - case RDA1846_REG_DTMF_C67: return "DTMF_C67"; - case RDA1846_REG_DTMF_OUT: return "DTMF_OUT"; - default: return "unknown"; - } -} - -void rda1846_dump_register(void) -{ - printf("RDA1846: register dump\r\n"); - - const uint8_t regs[] = { RDA1846_REG_CLK_MODE, RDA1846_REG_XTAL, RDA1846_REG_ADCLK, - RDA1846_REG_RF_BAND, RDA1846_REG_FREQH, RDA1846_REG_FREQL, - RDA1846_REG_CTL, RDA1846_REG_INT, RDA1846_REG_GPIO, - RDA1846_REG_PA_BIAS, RDA1846_REG_TX_VOICE, RDA1846_REG_VOX_OPEN, RDA1846_REG_VOX_SHUT, - RDA1846_REG_SUBAUDIO, RDA1846_REG_RX_VOICE, RDA1846_REG_SQ_OPEN, RDA1846_REG_SQ_SHUT, - RDA1846_REG_DTMF_CTL, RDA1846_REG_DTMF_OUT, RDA1846_REG_DTMF_T1, RDA1846_REG_DTMF_T2, - RDA1846_REG_RSSI, RDA1846_REG_VSSI, RDA1846_REG_FLAG }; - - int i; - for(i=0; i<sizeof(regs); ++i) { - uint16_t data; - if(rda1846_read_register(regs[i], &data)) - data = 0xFFFF; - printf(" 0x%02X (%s): 0x%04X\r\n", regs[i], rda1846_regaddr_to_string(regs[i]), data); - } -} diff --git a/software/avr.lib/rda1846.h b/software/avr.lib/rda1846.h deleted file mode 100644 index d043f00..0000000 --- a/software/avr.lib/rda1846.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2015 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_rda1846_h_INCLUDED -#define SPREADAVR_rda1846_h_INCLUDED - -typedef enum { b_2m, b_1m5, b_70cm } rf_band_t; -char* rda1846_rf_band_to_string(rf_band_t); -typedef enum { bw_12k5, bw_25k } channel_bw_t; -char* rda1846_channel_bw_to_string(channel_bw_t); -typedef enum { powerdown, idle, receive, transmit } rda1846_state_t; -char* rda1846_state_to_string(rda1846_state_t); - -void rda1846_init(void); -void rda1846_reg_init(void); -void rda1846_soft_reset(void); - -void rda1846_powerdown(void); -void rda1846_idle(void); -void rda1846_receive(void); -void rda1846_transmit(void); -rda1846_state_t rda1846_get_state(void); - -void rda1846_set_band(rf_band_t); -rf_band_t rda1846_get_band(void); -void rda1846_set_bw(channel_bw_t); -channel_bw_t rda1846_get_bw(void); -uint8_t rda1846_set_freq_kHz(int32_t freq); -int32_t rda1846_get_freq_kHz(void); - -uint16_t rda1846_get_dtmf(uint8_t*, uint8_t*, uint8_t*, uint8_t*); -void rda1846_clear_int(void); - -void rda1846_set_volume(int8_t); -int8_t rda1846_get_volume(void); - -void rda1846_gpio_default(void); -void rda1846_gpio_55(void); -void rda1846_gpio_AA(void); -void rda1846_gpio_off(void); - -int16_t rda1846_get_rssi(void); -int16_t rda1846_get_vssi(void); -uint16_t rda1846_get_flags(void); - -void rda1846_dump_register(void); - -#endif diff --git a/software/avr.lib/rda1846_defines.h b/software/avr.lib/rda1846_defines.h deleted file mode 100644 index 37f1fba..0000000 --- a/software/avr.lib/rda1846_defines.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2015 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_rda1846_defines_h_INCLUDED -#define SPREADAVR_rda1846_defines_h_INCLUDED - -// TWI -#define RDA1846_CHIP_ADDR 0xE2 -#define RDA1846_ADDR_W (0<<7) -#define RDA1846_ADDR_R (1<<7) -#define RDA1846_ADDR_LIMIT 0x7F - - -// registers -#define RDA1846_REG_CTL 0x30 -#define RDA1846_REG_GPIO 0x1F -#define RDA1846_REG_INT 0x2D -#define RDA1846_REG_FLAG 0x5C -#define RDA1846_REG_RSSI 0x5F -#define RDA1846_REG_VSSI 0x60 - -#define RDA1846_REG_CLK_MODE 0x04 -#define RDA1846_REG_XTAL 0x2B -#define RDA1846_REG_ADCLK 0x2C - -#define RDA1846_REG_RF_BAND 0x0F -#define RDA1846_REG_FREQH 0x29 -#define RDA1846_REG_FREQL 0x2A - -#define RDA1846_REG_PA_BIAS 0x0A -#define RDA1846_REG_TX_VOICE 0x3C -#define RDA1846_REG_VOX_OPEN 0x41 -#define RDA1846_REG_VOX_SHUT 0x42 - -#define RDA1846_REG_RX_VOICE 0x44 -#define RDA1846_REG_SUBAUDIO 0x45 -#define RDA1846_REG_SQ_OPEN 0x48 -#define RDA1846_REG_SQ_SHUT 0x49 - -#define RDA1846_REG_DTMF_CTL 0x63 -#define RDA1846_REG_DTMF_T1 0x35 -#define RDA1846_REG_DTMF_T2 0x36 -#define RDA1846_REG_DTMF_C01 0x66 -#define RDA1846_REG_DTMF_C23 0x67 -#define RDA1846_REG_DTMF_C45 0x68 -#define RDA1846_REG_DTMF_C67 0x69 -#define RDA1846_REG_DTMF_OUT 0x6C - -//freq -#ifdef RDA_QUARTZ_12M288 -#define RDA1846_FREQ_CORR_2M 73.1428567759 -#endif // RDA_QUARTZ_12M288 -#ifdef RDA_QUARTZ_13M -#define RDA1846_FREQ_CORR_2M 69.136878448 -#endif // RDA_QUARTZ_13M - -#define RDA1846_FREQ_CORR_1M5 RDA1846_FREQ_CORR_2M/1.5 -#define RDA1846_FREQ_CORR_70CM RDA1846_FREQ_CORR_2M/3.0 - - -// init values -#define RDA1846_RF_BAND_2M 0x00E4 // select 2m Band -#define RDA1846_BAND_2M_LOW 134000 // kHz -#define RDA1846_BAND_2M_HIGH 174000 // kHZ - -#define RDA1846_RF_BAND_1M5 0x00A4 // select 1.5m Band -#define RDA1846_BAND_1M5_LOW 200000 // kHz -#define RDA1846_BAND_1M5_HIGH 260000 // kHZ - -#define RDA1846_RF_BAND_70CM 0x0024 // select 70cm Band -#define RDA1846_BAND_70CM_LOW 400000 // kHz -#define RDA1846_BAND_70CM_HIGH 520000 // kHZ - -#ifdef RDA_QUARTZ_12M288 -#define RDA1846_XTAL_FREQ 12288 // 12.288 MHz -#define RDA1846_ADCLK_FREQ 6144 // 12.288/2 MHz -#define RDA1846_CLK_MODE 0x0F11 // 12-14 MHz -#endif // RDA_QUARTZ_12M288 - -#ifdef RDA_QUARTZ_13M -#define RDA1846_XTAL_FREQ 13000 // 13.000 MHz -#define RDA1846_ADCLK_FREQ 6500 // 13.000/2 MHz -#define RDA1846_CLK_MODE 0x0F11 // 12-14 MHz -#endif // RDA_QUARTZ_13M - - - - -// ctl -#define RDA1846_CTL_CH_25K 0x3000 -#define RDA1846_CTL_CH_12K5 0x0000 -#define RDA1846_CTL_CH_RESET 0xCFFF - -#define RDA1846_CTL_TAIL_ELIM 0x0800 - -#define RDA1846_CTL_RX_A_TX_A 0x0200 -#define RDA1846_CTL_RX_A_TX_M 0x0100 -#define RDA1846_CTL_RX_M_TX_M 0x0000 - -#define RDA1846_CTL_MUTE 0x0080 -#define RDA1846_CTL_TX 0x0040 -#define RDA1846_CTL_RX 0x0020 -#define RDA1846_CTL_VOX 0x0010 -#define RDA1846_CTL_SQ 0x0008 -#define RDA1846_CTL_PDN 0x0004 -#define RDA1846_CTL_CHIP_CAL 0x0002 -#define RDA1846_CTL_SOFT_RST 0x0001 - - -// flag -#define RDA1846_FLAG_DTMF_IDLE 0x1000 -#define RDA1846_FLAG_RXON_RF 0x0400 -#define RDA1846_FLAG_TXON_RF 0x0200 -#define RDA1846_FLAG_INVERT_DET 0x0080 -#define RDA1846_FLAG_CSS_CMP 0x0004 -#define RDA1846_FLAG_SQ 0x0002 -#define RDA1846_FLAG_VOX 0x0001 - -#define RDA1846_FLAGS_MASK 0x1687 - - -// gpio -#define RDA1846_GPIO_7_HI_Z 0x0000 -#define RDA1846_GPIO_7_VOX 0x4000 -#define RDA1846_GPIO_7_LOW 0x8000 -#define RDA1846_GPIO_7_HIGH 0xC000 - -#define RDA1846_GPIO_6_HI_Z 0x0000 -#define RDA1846_GPIO_6_SQ 0x1000 -#define RDA1846_GPIO_6_LOW 0x2000 -#define RDA1846_GPIO_6_HIGH 0x3000 - -#define RDA1846_GPIO_5_HI_Z 0x0000 -#define RDA1846_GPIO_5_TXON_RF 0x0400 -#define RDA1846_GPIO_5_LOW 0x0800 -#define RDA1846_GPIO_5_HIGH 0x0C00 - -#define RDA1846_GPIO_4_HI_Z 0x0000 -#define RDA1846_GPIO_4_RXON_RF 0x0100 -#define RDA1846_GPIO_4_LOW 0x0200 -#define RDA1846_GPIO_4_HIGH 0x0300 - -#define RDA1846_GPIO_3_HI_Z 0x0000 -#define RDA1846_GPIO_3_SDO 0x0040 -#define RDA1846_GPIO_3_LOW 0x0080 -#define RDA1846_GPIO_3_HIGH 0x00C0 - -#define RDA1846_GPIO_2_HI_Z 0x0000 -#define RDA1846_GPIO_2_INT 0x0010 -#define RDA1846_GPIO_2_LOW 0x0020 -#define RDA1846_GPIO_2_HIGH 0x0030 - -#define RDA1846_GPIO_1_HI_Z 0x0000 -#define RDA1846_GPIO_1_CODE 0x0004 -#define RDA1846_GPIO_1_LOW 0x0008 -#define RDA1846_GPIO_1_HIGH 0x000C - -#define RDA1846_GPIO_0_HI_Z 0x0000 -#define RDA1846_GPIO_0_CSS 0x0001 -#define RDA1846_GPIO_0_LOW 0x0002 -#define RDA1846_GPIO_0_HIGH 0x0003 - - -// int -#define RDA1846_INT_CSS_CMP 0x0200 -#define RDA1846_INT_RXON_RF 0x0100 -#define RDA1846_INT_TXON_RF 0x0080 -#define RDA1846_INT_DTMF_IDLE 0x0040 -#define RDA1846_INT_INVERT_DET 0x0020 -#define RDA1846_INT_IDLE_TO 0x0010 -#define RDA1846_INT_RXON_RF_TO 0x0008 -#define RDA1846_INT_SQ 0x0004 -#define RDA1846_INT_TXON_RF_TO 0x0002 -#define RDA1846_INT_VOX 0x0001 - - -// tx voice channel -#define RDA1846_TX_VOICE_MIC 0x0958 -#define RDA1846_TX_VOICE_TONE2 0x4958 -#define RDA1846_TX_VOICE_GPIO1 0x8958 -#define RDA1846_TX_VOICE_NONE 0xC958 - - -// DTMF ctl -#define RDA1846_DTMF_SINGLE 0x0200 -#define RDA1846_DTMF_DUAL 0x0000 -#define RDA1846_DTMF_EN 0x0100 - -// DTMF tone freq -#include <math.h> - -#define dtmf_tone_freq_hz(value) (uint16_t)round(value/4.096) -#define dtmf_tone_freq_value(hz) (uint16_t)round(hz*4.096) - -#ifdef RDA_QUARTZ_12M288 -// DTMF frequencies @ 12.288 MHz - these are the defaults... are they? -#define RDA1846_DTMF_C0 0x61 // 697 Hz -#define RDA1846_DTMF_C1 0x5B // 770 Hz -#define RDA1846_DTMF_C2 0x53 // 852 Hz -#define RDA1846_DTMF_C3 0x4B // 941 Hz -#define RDA1846_DTMF_C4 0x2C // 1209 Hz -#define RDA1846_DTMF_C5 0x1E // 1336 Hz -#define RDA1846_DTMF_C6 0x0A // 1477 Hz -#define RDA1846_DTMF_C7 0xF6 // 1633 Hz -#endif // RDA_QUARTZ_12M8 - -#ifdef RDA_QUARTZ_13M -// DTMF frequencies @ 13 MHz - these are the defaults... -#define RDA1846_DTMF_C0 0x61 // 697 Hz -#define RDA1846_DTMF_C1 0x5E // 770 Hz -#define RDA1846_DTMF_C2 0x57 // 852 Hz -#define RDA1846_DTMF_C3 0x4B // 941 Hz -#define RDA1846_DTMF_C4 0x31 // 1209 Hz -#define RDA1846_DTMF_C5 0x1E // 1336 Hz -#define RDA1846_DTMF_C6 0x0F // 1477 Hz -#define RDA1846_DTMF_C7 0xFB // 1633 Hz -#endif // RDA_QUARTZ_13M - -#endif diff --git a/software/avr.lib/serialio.c b/software/avr.lib/serialio.c deleted file mode 100644 index fde2935..0000000 --- a/software/avr.lib/serialio.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2014 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdio.h> - -#include "serialio.h" -#include "LUFA/Drivers/Peripheral/Serial.h" - -static FILE serial_stream; - -void serialio_init(const uint32_t baudrate, const uint8_t doublespeed) -{ - Serial_Init(baudrate, doublespeed); - Serial_CreateStream(&serial_stream); - stdin = stdout = stderr = &serial_stream; -} - -void serialio_task(void) -{ -} - -int16_t serialio_bytes_received(void) -{ - return (int16_t)Serial_IsCharReceived(); -} diff --git a/software/avr.lib/serialio.h b/software/avr.lib/serialio.h deleted file mode 100644 index 3b0781e..0000000 --- a/software/avr.lib/serialio.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2014 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_serialio_h_INCLUDED -#define SPREADAVR_serialio_h_INCLUDED - -#include <stdint.h> - -void serialio_init(const uint32_t baudrate, const uint8_t doublespeed); -void serialio_task(void); -int16_t serialio_bytes_received(void); - -#endif diff --git a/software/avr.lib/usbio.c b/software/avr.lib/usbio.c deleted file mode 100644 index fbdd5a3..0000000 --- a/software/avr.lib/usbio.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * Othmar Gsenger <otti@wirdorange.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdio.h> - -#include "usbio.h" - -#include <LUFA/Drivers/USB/USB.h> -#include "lufa-descriptor-usbserial.h" -#include "LUFA/Drivers/Peripheral/Serial.h" - -/* - LUFA Library - Copyright (C) Dean Camera, 2012. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = - { - .Config = - { - .ControlInterfaceNumber = 0, - - .DataINEndpointNumber = CDC_TX_EPNUM, - .DataINEndpointSize = CDC_TXRX_EPSIZE, - .DataINEndpointDoubleBank = false, - - .DataOUTEndpointNumber = CDC_RX_EPNUM, - .DataOUTEndpointSize = CDC_TXRX_EPSIZE, - .DataOUTEndpointDoubleBank = false, - - .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM, - .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE, - .NotificationEndpointDoubleBank = false, - }, - }; - -void EVENT_USB_Device_ConfigurationChanged(void) -{ - CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); -} - -void EVENT_USB_Device_ControlRequest(void) -{ - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); -} -/* end LUFA CDC-ACM specific definitions*/ - -static int dummy_putchar(char DataByte, FILE *Stream) { return 0; } -static int dummy_getchar(FILE *Stream) { return 0; } -static FILE dummy_stream = FDEV_SETUP_STREAM(dummy_putchar, dummy_getchar, _FDEV_SETUP_RW); -static FILE usb_stream; - -void usbio_init(void) -{ - stdin = stdout = stderr = &dummy_stream; - - USB_Init(); - CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,&usb_stream); -} - -void usbio_task(void) -{ -#if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) - if(USB_DeviceState == DEVICE_STATE_Unattached && USB_VBUS_GetStatus()) { - USB_Disable(); - USB_Init(); - } -#endif - - CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - USB_USBTask(); -} - -int16_t usbio_bytes_received(void) -{ - if(stdin == &usb_stream) - return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); - else - return 0; -} - -void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - if(CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) - stdin = stdout = stderr = &usb_stream; - else - stdin = stdout = stderr = &dummy_stream; -} - -void EVENT_USB_Device_Disconnect(void) -{ - stdin = stdout = stderr = &dummy_stream; -} diff --git a/software/avr.lib/usbio.h b/software/avr.lib/usbio.h deleted file mode 100644 index 1237f37..0000000 --- a/software/avr.lib/usbio.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * Othmar Gsenger <otti@wirdorange.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_usbio_h_INCLUDED -#define SPREADAVR_usbio_h_INCLUDED - -#include <stdint.h> - -void usbio_init(void); -void usbio_task(void); -int16_t usbio_bytes_received(void); - -#endif diff --git a/software/avr.lib/util.c b/software/avr.lib/util.c deleted file mode 100644 index 7f15bfe..0000000 --- a/software/avr.lib/util.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <avr/interrupt.h> -#include <avr/io.h> -#include <util/delay.h> - -#include "util.h" - -#if defined(CLKPR) -#define CPU_PRESCALE(n) do { CLKPR = 0x80; CLKPR = (n); } while(0) -#else -#define CPU_PRESCALE(n) -#endif - -void cpu_init(void) -{ - CPU_PRESCALE(0); -} - -#if defined JTD -void jtag_disable(void) -{ - uint8_t tempreg; - __asm __volatile("in %[tempreg], %[mcucr]" "\n\t" - "ori %[tempreg], %[jtd]" "\n\t" - "out %[mcucr], %[tempreg]" "\n\t" - "out %[mcucr], %[tempreg]" - : [tempreg] "=d" (tempreg) - : [mcucr] "I" (_SFR_IO_ADDR(MCUCR)), [jtd] "M" (_BV(JTD))); -} -#endif - -#if defined(__BOARD_teensy1__) - #define BOOTLOADER_VEC 0x3E00 -#elif defined(__BOARD_teensy2__) - #define BOOTLOADER_VEC 0x7E00 -#elif defined(__BOARD_teensy1pp__) - #define BOOTLOADER_VEC 0xFC00 -#elif defined(__BOARD_teensy2pp__) - #define BOOTLOADER_VEC 0x1FC00 -#elif defined(__BOARD_minimus__) - #define BOOTLOADER_VEC 0x3000 -#elif defined(__BOARD_minimus32__) - #define BOOTLOADER_VEC 0x3800 -#elif defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) - #define BOOTLOADER_VEC 0x3800 -#elif defined(__BOARD_slowpandongle1__) || defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__) - #define BOOTLOADER_VEC 0x3800 -#elif defined(__BOARD_rhmixxx__) - #define BOOTLOADER_VEC 0xF000 -#else - #define BOOTLOADER_VEC 0x0000 -#endif - -typedef void (*f_ptr_type)(void); -f_ptr_type start_bootloader = (f_ptr_type)BOOTLOADER_VEC; - -void reset2bootloader(void) -{ -#if defined(__BOARD_teensy1__) || defined(__BOARD_teensy1pp__) || defined(__BOARD_teensy2__) || defined(__BOARD_teensy2pp__) || \ - defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) || \ - defined(__BOARD_slowpandongle1__) || defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__) || \ - defined(__BOARD_rhmixxx__) || defined(__BOARD_minimus__) || defined(__BOARD_minimus32__) - cli(); - // disable watchdog, if enabled - // disable all peripherals - UDCON = 1; - USBCON = (1<<FRZCLK); // disable USB - UCSR1B = 0; - _delay_ms(5); - #if defined(__BOARD_teensy1__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; - TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; - DDRB = 0; DDRC = 0; DDRD = 0; - PORTB = 0; PORTC = 0; PORTD = 0; - #elif defined(__BOARD_teensy2__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; - TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0; - DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0; - PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; - #elif defined(__BOARD_teensy1pp__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; - TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; - DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; - PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; - #elif defined(__BOARD_teensy2pp__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; - TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; - DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; - PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; - #elif defined(__BOARD_minimus__) || defined(__BOARD_slowpandongle1__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; - TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; - DDRB = 0; DDRC = 0; DDRD = 0; - PORTB = 0; PORTC = 0; PORTD = 0; - #elif defined(__BOARD_minimus32__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; - TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; - DDRB = 0; DDRC = 0; DDRD = 0; - PORTB = 0; PORTC = 0; PORTD = 0; - #elif defined(__BOARD_hhd70dongle2__) || defined(__BOARD_hhd70dongle__) || defined(__BOARD_rda1846dongle__) || defined(__BOARD_culV3__) || \ - defined(__BOARD_slowpandongle2__) || defined(__BOARD_teenstep__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; - TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0; - DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0; - PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; - #elif defined(__BOARD_rhmixxx__) - EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; - TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; - DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; - PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; - #endif - start_bootloader(); -#endif -} diff --git a/software/avr.lib/util.h b/software/avr.lib/util.h deleted file mode 100644 index 51c946d..0000000 --- a/software/avr.lib/util.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * spreadspace avr utils - * - * - * Copyright (C) 2013-2014 Christian Pointner <equinox@spreadspace.org> - * - * This file is part of spreadspace avr utils. - * - * spreadspace avr utils 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, either version 3 of the License, or - * any later version. - * - * spreadspace avr utils 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 spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef SPREADAVR_util_h_INCLUDED -#define SPREADAVR_util_h_INCLUDED - -void cpu_init(void); -#if defined JTD -void jtag_disable(void); -#endif -void reset2bootloader(void); - -#endif |