-
Notifications
You must be signed in to change notification settings - Fork 0
/
Philips_PCD8544_Server.hpp
80 lines (63 loc) · 1.76 KB
/
Philips_PCD8544_Server.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#pragma once
#include "Philips_PCD8544.hpp"
#include <Upacket/Servers/SimpleServer.hpp>
#ifndef DEBUGprint_MISC
#define DEBUGprint_MISC(...)
#endif
namespace Philips_PCD8544{
template <typename LCD_t>
class StringLCDServer : public SimpleServer, public Process {
LCD_t *lcd;
public:
StringLCDServer(LCD_t *new_lcd)
: lcd(new_lcd)
{ }
Status::Status_t process(){
// Packet to process?
if(! packetPending()) return Status::Status__Good;
DEBUGprint_MISC("SLS: Prc pk\n");
// Data in packet?
MAP::Data_t *data_ptr = offsetPacket.packet->get_data(offsetPacket.headerOffset);
if(data_ptr == NULL) return finishedWithPacket();
// Clear screen
lcd->clear();
// Write packet contents out to screen, beginning at first row and performing a linefeed
// when the right edge of the screen is encountered.
for(uint8_t Y = 1; Y <= MAX_Y_FONT; Y++){
// Start at leftmost edge of screen
lcd->gotoXYFont(1,Y);
while(data_ptr < offsetPacket.packet->back()){
uint8_t response = lcd->chr(FONT_1X, *data_ptr);
if(response != OK){
// If wrapped, the character has actually been written.
if(response == OK_WITH_WRAP) data_ptr++;
// Move to next line
break;
}
// Move to next character
data_ptr++;
}
}
// Update screen
lcd->update();
return finishedWithPacket();
}
};
/*
class GalvLCDServer : public SimpleServer {
process(){
// Packet to process?
if(! packetPending()) return;
// Data in packet?
int32_t raw_value;
if(! packet->sourceC78Signed(raw_value, packet->get_data())) return;
FixedPoint<uint16_t, 14> value(raw_value, true);
// Display galvanometer
LCDClear();
LCDGalvDisplay(value);
LCDUpdate();
}
};
*/
// End namespace: Philips_PCD8544
}