/* AP_Radio.cpp - Radio library for Arduino Code by Jason Short. DIYDrones.com This library is free software; you can redistribute it and / or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. */ #include "Waypoints.h" Waypoints::Waypoints() { } void Waypoints::set_waypoint_with_index(Waypoints::WP wp, uint8_t i) { i = constrain(i, 0, _total); uint32_t mem = _start_byte + (i * _wp_size); eeprom_busy_wait(); eeprom_write_byte((uint8_t *) mem, wp.id); mem++; eeprom_busy_wait(); eeprom_write_byte((uint8_t *) mem, wp.p1); mem++; eeprom_busy_wait(); eeprom_write_dword((uint32_t *) mem, wp.alt); mem += 4; eeprom_busy_wait(); eeprom_write_dword((uint32_t *) mem, wp.lat); mem += 4; eeprom_busy_wait(); eeprom_write_dword((uint32_t *) mem, wp.lng); } Waypoints::WP Waypoints::get_waypoint_with_index(uint8_t i) { Waypoints::WP wp; i = constrain(i, 0, _total); uint32_t mem = _start_byte + (i * _wp_size); eeprom_busy_wait(); wp.id = eeprom_read_byte((uint8_t *)mem); mem++; eeprom_busy_wait(); wp.p1 = eeprom_read_byte((uint8_t *)mem); mem++; eeprom_busy_wait(); wp.alt = (long)eeprom_read_dword((uint32_t *)mem); mem += 4; eeprom_busy_wait(); wp.lat = (long)eeprom_read_dword((uint32_t *)mem); mem += 4; eeprom_busy_wait(); wp.lng = (long)eeprom_read_dword((uint32_t *)mem); } Waypoints::WP Waypoints::get_current_waypoint(void) { return get_waypoint_with_index(_index); } uint8_t Waypoints::get_index(void) { return _index; } void Waypoints::next_index(void) { _index++; if (_index >= _total) _index == 0; } void Waypoints::set_index(uint8_t i) { i = constrain(i, 0, _total); } uint8_t Waypoints::get_total(void) { return _total; } void Waypoints::set_total(uint8_t total) { _total = total; } void Waypoints::set_start_byte(uint16_t start_byte) { _start_byte = start_byte; } void Waypoints::set_wp_size(uint8_t wp_size) { _wp_size = wp_size; }