Skip to content

Commit

Permalink
Merge pull request #91 from Lipotam/display_support
Browse files Browse the repository at this point in the history
SSD1306 display support adding
  • Loading branch information
AJIOB committed Mar 18, 2018
2 parents e736294 + 9e43215 commit d2f073c
Show file tree
Hide file tree
Showing 97 changed files with 1,481 additions and 107 deletions.
117 changes: 117 additions & 0 deletions code/Arduino/config/Constants.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,49 @@
#include "Constants.h"

/* Buffer initialisation */
namespace
{
const uint8_t kUsbIconBuffer[] PROGMEM = {
0x00, 0x00, 0x0F, 0xF0, 0x08, 0x10, 0x08, 0x10, 0x0A, 0x50, 0x08, 0x10, 0x08, 0x10, 0x3F, 0xFC,
0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x30, 0x0C, 0x10, 0x08, 0x1F, 0xF8, 0x00, 0x00
};
const uint8_t kBluetoothIconBuffer[] PROGMEM = {
0x00, 0x00, 0x01, 0x80, 0x01, 0xC0, 0x09, 0x60, 0x0D, 0x30, 0x07, 0x60, 0x03, 0xC0, 0x01, 0x80,
0x03, 0xC0, 0x07, 0x60, 0x0D, 0x30, 0x09, 0x60, 0x01, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00
};
const uint8_t kWiFiIconBuffer[] PROGMEM = {
0x00, 0x00, 0x60, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x61, 0xC0, 0x78, 0x60, 0x0E, 0x30, 0x03, 0x10,
0x61, 0x98, 0x78, 0xC8, 0x0C, 0x4C, 0x06, 0x64, 0x62, 0x24, 0x73, 0x36, 0x73, 0x36, 0x00, 0x00
};
const uint8_t kStatusGoodIconBuffer[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70,
0x30, 0xE0, 0x39, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t kStatusBadIconBuffer[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x1E, 0x3C, 0x1F, 0x7C, 0x0F, 0xF8, 0x07, 0xF0,
0x03, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x7C, 0x1E, 0x3C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00
};
const uint8_t kStatusResolvingIconBuffer[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x04, 0x30, 0x28, 0x08, 0x30, 0x04, 0x38, 0x04, 0x00, 0x04,
0x20, 0x00, 0x20, 0x1C, 0x20, 0x0C, 0x10, 0x14, 0x0C, 0x20, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00
};
//const uint8_t kLineBuffer[] PROGMEM = {
// 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0xFE, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x0C, 0x06, 0x03, 0x3F, 0x31, 0x1B, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00
//};

const uint8_t* const kStatusIcons[] = {
kStatusGoodIconBuffer,
kStatusBadIconBuffer,
kStatusResolvingIconBuffer
};

const uint8_t kDisplayPinConfig[] = {
46,
47
};
}

/* Bluetooth (Hardware Serial3) */
// const uint8_t Constants::bluetooth_RX = 15;
// const uint8_t Constants::bluetooth_TX = 14;
Expand Down Expand Up @@ -44,6 +88,13 @@ const uint8_t Constants::kLineSensorCPin = A1;
const uint8_t Constants::kServoHorizontalPin = 34;
const uint8_t Constants::kServoVerticalPin = 35;

/* Display SSD1306 controller */
//const uint8_t Constants::kDisplaySpiMosiPin = 51;
//const uint8_t Constants::kDisplaySpiClkPin = 52;
const uint8_t Constants::kDisplayDcPin = 49;
const uint8_t Constants::kDisplayCsPin = 48;
const uint8_t Constants::kDisplayResetPin = -1;

const char Constants::kCommandsDelimetr = ';';
const char Constants::kCommandsStopSymbol = '|';
const uint32_t Constants::kCommandsWaitTime = 50;
Expand All @@ -64,6 +115,72 @@ const uint32_t Constants::kWaitCommandTimeInMs = 5000;
const String Constants::kGoodAnswer = "OK";
const String Constants::kBadAnswer = "ERROR";

/* USB image */
const ImageConfiguration Constants::kUsbImageConfiguration =
{
0,
0,
16,
16,
};
const ImageConfiguration Constants::kBluetoothImageConfiguration =
{
0,
16,
16,
16,
};
const ImageConfiguration Constants::kWifiImageConfiguration =
{
0,
32,
16,
16,
};
const ImageConfiguration Constants::kStatusImageConfiguration =
{
0,
48,
16,
16,
};
const ImageConfiguration Constants::kLineImageConfiguration =
{
17,
0,
1,
64,
};
const ImageConfiguration Constants::kPrintAreaImageConfiguration =
{
19,
0,
109,
64,
};

const uint8_t* Constants::kUsbImage = kUsbIconBuffer;
const uint8_t* Constants::kBluetoothImage = kBluetoothIconBuffer;
const uint8_t* Constants::kWifiImage = kWiFiIconBuffer;
const uint8_t* const* Constants::kStatusImages = kStatusIcons;
const uint8_t Constants::kStatusImagesNum = sizeof(kStatusIcons) / sizeof(kStatusIcons[0]);

const uint8_t* Constants::kDisplayTogglePins = kDisplayPinConfig;
const uint8_t Constants::kDisplayTogglePinAmount = sizeof(kDisplayPinConfig) / sizeof(kDisplayPinConfig[0]);

const String Constants::kBluetoothHeader = "Bluetooth";
const String Constants::kBluetoothAp = "TrackPlatformBT";
const String Constants::kBluetoothPassword = "7777";

const String Constants::kWifiHeader = "Wi-Fi";
const String Constants::kWifiAp = "TrackPlatformWiFi";
const String Constants::kWifiPassword = "1234567890";
const String Constants::kWifiIp = "192.168.4.1";

const String Constants::kDebugHeader = "Debug";

const String Constants::kHardwareInfoHeader = "Firmware";

Constants::Constants()
{
}
Expand Down
34 changes: 34 additions & 0 deletions code/Arduino/config/Constants.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once
#include <Arduino.h>
#include "ImageConfiguration.h"

class Constants
{
Expand Down Expand Up @@ -40,6 +41,10 @@ class Constants
static const uint8_t kServoHorizontalPin;
static const uint8_t kServoVerticalPin;

static const uint8_t kDisplayDcPin;
static const uint8_t kDisplayCsPin;
static const uint8_t kDisplayResetPin;

static const char kCommandsDelimetr;
static const char kCommandsStopSymbol;
static const uint32_t kCommandsWaitTime;
Expand All @@ -59,6 +64,35 @@ class Constants
static const String kGoodAnswer;
static const String kBadAnswer;

static const ImageConfiguration kUsbImageConfiguration;
static const ImageConfiguration kBluetoothImageConfiguration;
static const ImageConfiguration kWifiImageConfiguration;
static const ImageConfiguration kStatusImageConfiguration;
static const ImageConfiguration kLineImageConfiguration;
static const ImageConfiguration kPrintAreaImageConfiguration;

static const uint8_t* kUsbImage;
static const uint8_t* kBluetoothImage;
static const uint8_t* kWifiImage;
static const uint8_t* const* kStatusImages;
static const uint8_t kStatusImagesNum;

static const uint8_t* kDisplayTogglePins;
static const uint8_t kDisplayTogglePinAmount;

static const String kBluetoothHeader;
static const String kBluetoothAp;
static const String kBluetoothPassword;

static const String kWifiHeader;
static const String kWifiAp;
static const String kWifiPassword;
static const String kWifiIp;

static const String kDebugHeader;

static const String kHardwareInfoHeader;

Constants();
~Constants();
};
Expand Down
16 changes: 16 additions & 0 deletions code/Arduino/config/ImageConfiguration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* @(#) ImageConfiguration.h
*/

#ifndef IMAGECONFIGURATION_H_H
#define IMAGECONFIGURATION_H_H

struct ImageConfiguration
{
const int16_t x_pos;
const int16_t y_pos;
const int16_t x_size;
const int16_t y_size;
};

#endif
3 changes: 3 additions & 0 deletions code/Arduino/connection/Bluetooth.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#include "ConnectorEnum.h"
#include "../peripheral/display/DisplayManager.h"
#include "Bluetooth.h"

bool Bluetooth::is_inited_ = false;
Expand All @@ -8,6 +10,7 @@ Bluetooth::Bluetooth(unsigned long speed) : IConnector(&Serial3)
{
is_inited_ = true;
Serial3.begin(speed);
DisplayManager::get_manager()->init_connector(ConnectorEnum::bluetooth_connector);
}
}

Expand Down
115 changes: 17 additions & 98 deletions code/Arduino/connection/ConnectionManager.cpp
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
#include <string.h>

#include "../connection/USB.h"
#include "../connection/USB.h"
#include "../connection/Bluetooth.h"
#include "../connection/WiFi_my.h"
#include "../config/Constants.h"
#include "../connection/DebugSerial.h"
#include "../management/MainManager.h"
#include "ConnectorEnum.h"
#include "../peripheral/display/DisplayManager.h"

#include "ConnectionManager.h"

ConnectionManager* ConnectionManager::manager_ = nullptr;

ConnectionManager::ConnectionManager()
ConnectionManager::ConnectionManager(): current_connector_index(0)
{
connectors = new IConnector*[connectors_num];
connectors[0] = new USB(Constants::kUsbSerialSpeed);
connectors[1] = new Bluetooth(Constants::kBluetoothSerialSpeed);
connectors[2] = new WiFi_my(Constants::kWifiSerialSpeed);
DisplayManager::get_manager()->repaint();
connectors[ConnectorEnum::usb_connector] = new USB(Constants::kUsbSerialSpeed);
DisplayManager::get_manager()->repaint();
connectors[ConnectorEnum::bluetooth_connector] = new Bluetooth(Constants::kBluetoothSerialSpeed);
DisplayManager::get_manager()->repaint();
connectors[ConnectorEnum::wifi_connector] = new WiFi_my(Constants::kWifiSerialSpeed);
DisplayManager::get_manager()->repaint();

timer.start_or_resume();
}

ConnectionManager::ConnectionManager(ConnectionManager&)
{
}

ConnectionManager* ConnectionManager::get_manager()
{
if (!manager_)
Expand Down Expand Up @@ -160,12 +160,14 @@ bool ConnectionManager::is_connected() const

void ConnectionManager::set_current_connection()
{
DisplayManager::get_manager()->set_connector(static_cast<ConnectorEnum>(current_connector_index));
connection_status = connected;
DEBUG_PRINTLN("Connected successful");
}

void ConnectionManager::reset_current_connection()
{
DisplayManager::get_manager()->reset_all_connectors();
connection_status = not_connected;
DEBUG_PRINTLN("Disconnected successful");
}
Expand All @@ -182,28 +184,22 @@ void ConnectionManager::wait_for_connection()

connection_status = try_connect;

int connector_index = connectors_num - 1;
current_connector_index = connectors_num - 1;
while (!is_connected()) {
connector_index = (connector_index + 1) % connectors_num;
current_connector = connectors[connector_index];
current_connector_index = (current_connector_index + 1) % connectors_num;
current_connector = connectors[current_connector_index];

timer.start_or_resume();
timer.reset();

MainManager::get_manager()->run();
}

DEBUG_PRINTF("Arduino found a manager with index %d\n", connector_index);
DEBUG_PRINTF("Arduino found a manager with index %d\n", current_connector_index);
}

String ConnectionManager::get_data_from_wrapper(uint8_t* buffer, int length)
{
//remove length
//buffer.remove(0, length_length);

//remove crc
//buffer.remove(buffer.length() - crc_length, crc_length);

String answer;

for (int i = 1; i < (length - crc_length); ++i)
Expand All @@ -213,80 +209,3 @@ String ConnectionManager::get_data_from_wrapper(uint8_t* buffer, int length)

return answer;
}

//bool ConnectionManager::wait_for_command_on_device(Timer* timer)
//{
// //compatibility with API v1 & v2
// if (connectedAPIversion >= APIWithAutoDiconnect)
// {
// while (!current_connector->is_need_to_read_message() && timer->getState() != timerState_finished)
// {
// delay(1);
// }
//
// if (timer->getState() == timerState_finished)
// {
// return false;
// }
// }
// else
// {
// while (!current_connector->is_need_to_read_message())
// {
// delay(1);
// }
// }
//
// return true;
//}
//
//String ConnectionManager::read_command()
//{
// if (!isConnected)
// {
// return "";
// }
//
// String command;
// Timer timer(Constants::wait_command_time_in_ms);
// timer.startOrResume();
// do
// {
// if (!wait_for_command_on_device(&timer))
// {
// isConnected = false;
// wait_for_connection();
// timer.reset();
// continue;
// }
//
// command = current_connector->read_message();
//
// //API v1 & v2 compatibility
// if (connectedAPIversion >= APIWithAnswer)
// {
// current_connector->write_answer("OK");
// }
//
// //debug
// DEBUG_PRINT("Command: ");
// DEBUG_PRINTLNHEX(command);
//
// if (command == disconnectCommand)
// {
// isConnected = false;
// wait_for_connection();
// timer.reset();
// continue;
// }
//
// if (connectedAPIversion >= APIWithAutoDiconnect && command == refreshCommand)
// {
// timer.reset();
// continue;
// }
//
// break;
// } while (true);
// return command;
//}
Loading

0 comments on commit d2f073c

Please sign in to comment.