disconnect
Dependencies: Puck lz mbed-src seeedstudio-epaper
Fork of display-puck by
main.cpp
- Committer:
- stiaje
- Date:
- 2014-07-31
- Revision:
- 5:5491fb58107e
- Parent:
- 3:4ff226c4fe2a
- Child:
- 8:30de292d57fd
File content as of revision 5:5491fb58107e:
#include <mbed.h> #include "EPD.h" #include "lz.h" #define LOG_LEVEL_VERBOSE #include "Puck.h" int receiveIndex = 0; Puck* puck = &Puck::getPuck(); EPD_Class EPD(p0, p2, p3, p8, p5, p6, p7); const UUID DISPLAY_SERVICE_UUID = stringToUUID("bftj display "); const UUID COMMAND_UUID = stringToUUID("bftj display com"); const UUID DATA_UUID = stringToUUID("bftj display dat"); /* connections: LPC1768 <--> nRF51822 <--> Shield ---------||------------||-------- p12 <--> p2 <--> D2 (M_EPD_PANEL_ON) p13 <--> p3 <--> D3 (M_EPD_BORDER) p14 <--> p4 <--> D4 (M_/SD_CS) p25 <--> p5 <--> D5 (M_EPD_PWM) p16 <--> p6 <--> D6 (M_EPD_/RESET) p17 <--> p7 <--> D7 (M_EPD_BUSY) p18 <--> p8 <--> D8 (M_EPD_DISCHARGE) p19 <--> p26 <--> D9 (M_/WORD_STOCK_CS) p20 <--> p0 <--> D10 (M_/EPD_CS) p21 <--> p27 <--> A1 (M_OE123) p22 <--> p28 <--> A2 (M_CKV) p23 <--> p29 <--> A3 (M_STV_IN) p5 <--> p20 <--> MOSI p6 <--> p22 <--> MISO p7 <--> p25 <--> SCK VCC <--> VCC GND <--> GND */ #define COMMAND_NOOP 0 #define COMMAND_CLEAR 1 #define COMMAND_IMAGE_UPPER 2 #define COMMAND_IMAGE_LOWER 3 #define COMMAND_BEGIN_UPPER 4 #define COMMAND_BEGIN_LOWER 5 #define IMAGE_SIZE 2904 #define BUFFER_SIZE 2917 #define Y_SIZE 88 #define X_SIZE 264 uint8_t buffer[BUFFER_SIZE]; int currentCommand = COMMAND_NOOP; void reverseBufferSegment(int from, int to) { for(int i = from; i < (to + from + 1) / 2; i++) { int i2 = to + from - i - 1; int temp = buffer[i]; buffer[i] = buffer[i2]; buffer[i2] = temp; } LOG_DEBUG("Reversed buffer from index %i to index %i.\n", from, to); } void onCommandWritten(uint8_t* value) { currentCommand = value[0]; LOG_DEBUG("Received command: %i.\n", currentCommand); switch(currentCommand) { case COMMAND_BEGIN_UPPER: case COMMAND_BEGIN_LOWER: receiveIndex = BUFFER_SIZE; break; case COMMAND_CLEAR: LOG_INFO("Clearing display.\n"); EPD.begin(EPD_2_7); EPD.start(); EPD.clear(); EPD.end(); break; case COMMAND_IMAGE_UPPER: LOG_INFO("Writing image to top half of display.\n"); reverseBufferSegment(receiveIndex, BUFFER_SIZE); LOG_DEBUG("LZ_Uncompress(in: 0x%x, out 0x%x, insize: %i)\n", buffer + receiveIndex, buffer, BUFFER_SIZE - receiveIndex); LZ_Uncompress(buffer + receiveIndex, buffer, BUFFER_SIZE - receiveIndex); LOG_INFO("Uncompressed %i bytes of data.\n", BUFFER_SIZE - receiveIndex); EPD.begin(EPD_2_7); EPD.start(); EPD.image(buffer, 0, EPD.lines_per_display / 2); EPD.end(); break; case COMMAND_IMAGE_LOWER: LOG_INFO("Writing image to bottom half of display.\n"); reverseBufferSegment(receiveIndex, BUFFER_SIZE); LZ_Uncompress(buffer + receiveIndex, buffer, BUFFER_SIZE - receiveIndex); LOG_INFO("Uncompressed %i bytes of data.\n", BUFFER_SIZE - receiveIndex); EPD.begin(EPD_2_7); EPD.start(); EPD.image(buffer, EPD.lines_per_display / 2, EPD.lines_per_display); EPD.end(); break; } currentCommand = COMMAND_NOOP; } void onDataWritten(uint8_t* value) { LOG_VERBOSE("Data written, receiveIndex: %i\n", receiveIndex); for(int i = 0; i < 20 && receiveIndex > 0; i++) { buffer[--receiveIndex] = value[i]; } } int main() { LOG_INFO("Starting puck.\n"); DigitalOut SD_CS(p4); DigitalOut WORD_STOCK_CS(p26); SD_CS = 1; WORD_STOCK_CS = 1; puck->addCharacteristic(DISPLAY_SERVICE_UUID, COMMAND_UUID, 1); puck->addCharacteristic(DISPLAY_SERVICE_UUID, DATA_UUID, 20); puck->onCharacteristicWrite(&COMMAND_UUID, onCommandWritten); puck->onCharacteristicWrite(&DATA_UUID, onDataWritten); puck->init(0x5EED); puck->countFreeMemory(); currentCommand = COMMAND_NOOP; while (puck->drive()); }