Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE EthernetInterface Game_Synchronizer MMA8452 SDFileSystem mbed-rtos mbed wave_player
Fork of 2035_Tanks_Shell by
Diff: two_player.h
- Revision:
- 5:cfec780c935b
- Parent:
- 4:d8bd8b41468d
--- a/two_player.h Thu Oct 15 19:57:51 2015 +0000
+++ b/two_player.h Thu Oct 15 22:07:40 2015 +0000
@@ -26,7 +26,7 @@
enum Color
{
- CLS_CMD=1,
+ CLS_CMD,
BG_COLOR_CMD,
LINE_CMD,
CIRCLE_CMD,
@@ -34,13 +34,12 @@
TRI_CMD,
RECT_CMD,
FILLED_RECT_CMD,
- PIX_CMD,
- PEN_SZ_CMD
+ PIX_CMD
};
uLCD_2P(PinName tx, PinName rx, PinName rst, bool player) {
p1_p2 = player;
- //LCD = new uLCD_4DGL (tx, rx, rst);
+ LCD = new uLCD_4DGL (tx, rx, rst);
}
void init() {
@@ -115,17 +114,16 @@
}
- void background_color(int color) { draw(BG_COLOR_CMD, color); }
- void line(int sx, int sy, int ex, int ey, int color) { draw(LINE_CMD, sx, sy, ex, ey, color); }
- void circle(int x , int y , int radius, int color) { draw(CIRCLE_CMD, x, y, radius, color); }
- void filled_circle(int x , int y , int radius, int color) { draw(FILLED_CIRCLE_CMD, x, y, radius, color); }
+ void background_color(int color) { draw(BG_COLOR_CMD, color); }
+ void line(int sx, int sy, int ex, int ey, int color) { draw(LINE_CMD, sx, sy, ex, ey, color); }
+ void circle(int x , int y , int radius, int color) { draw(CIRCLE_CMD, x, y, radius, color); }
+ void filled_circle(int x , int y , int radius, int color) { draw(FILLED_CIRCLE_CMD, x, y, radius, color); }
void triangle(int a, int b, int c, int d , int e, int f, int col) { draw(TRI_CMD, a, b, c, d, e, f, col); }
- void rectangle(int a, int b, int c, int d, int col) { draw(RECT_CMD, a, b, c, d, col); }
- void filled_rectangle(int a, int b, int c, int d, int col) { draw(FILLED_RECT_CMD, a, b, c, d, col); }
- void pixel(int a, int b, int col) { draw(PIX_CMD, a, b, col); }
- void cls(void) { draw(CLS_CMD); }
+ void rectangle(int a, int b, int c, int d, int col) { draw(RECT_CMD, a, b, c, d, col); }
+ void filled_rectangle(int a, int b, int c, int d, int col) { draw(FILLED_RECT_CMD, a, b, c, d, col); }
+ void pixel(int a, int b, int col) { draw(PIX_CMD, a, b, col); }
+ void cls(void) { draw(CLS_CMD); }
- void pen_size(char sz) { draw(PEN_SZ_CMD, sz); }
/*void BLIT(int x1, int y1, int x2, int y2, int *colors) {
int size = abs((x1-x2)*(y1-y2));
// pad to a multiple of 4 and memset buffer...
@@ -145,11 +143,13 @@
}
void update() {
+ int buffer_size;
sock->set_blocking(true, 100);
if(p1_p2 == PLAYER1) {
- sock->send_all((char*)buffer, (buffer_idx+1)*sizeof(buffer[0]));
+ buffer_size = buffer_idx;
+ sock->send_all((char*)buffer, (buffer_size+1)*sizeof(buffer[0]));
buffer_idx = 0;
-
+
int n = sock->receive((char*)buttons, sizeof(buttons));
if(n < 0) {pc.printf("RECEIVE ERROR.\n");}
@@ -157,40 +157,64 @@
int n = sock->receive((char*)buffer, sizeof(buffer));
if(n < 0) {pc.printf("RECEIVE ERROR.\n");}
buffer[n] = '\0';
+ buffer_size = n/sizeof(buffer[0]) - 1;
+
sock->send_all((char*)buttons, sizeof(buttons));
}
-
- int i = 0;
- pc.printf("Buffer: ");
- while(buffer[i] != '\0') {
+
+ //pc.printf("Buffer: ");
+ /*for(int i=0; i<buffer_size; i++) {
pc.printf("%d ", buffer[i]);
i++;
}
pc.printf("\n");
-
+ */
int idx = 0;
- while(buffer[idx] != '\0') {
+ while(idx < buffer_size) {
char cmd = buffer[idx];
idx++;
switch(cmd) {
+ case CLS_CMD:
+ LCD->cls();
+ //pc.printf("Clear the screen!\n");
+ break;
case BG_COLOR_CMD:
- //LCD->background_color(buffer[idx+1]);
- pc.printf("Change the background to %x\n", buffer[idx]);
+ LCD->background_color(buffer[idx+1]);
+ //pc.printf("Change the background to 0x%X\n", buffer[idx]);
idx += 1;
break;
case LINE_CMD:
- pc.printf("LINE: (%d, %d) - (%d, %d) COLOR: %X\n", buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+ //pc.printf("LINE: (%d, %d) - (%d, %d) COLOR: 0x%X\n", buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+ LCD->line(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
idx += 5;
break;
- case CLS_CMD:
- //LCD->cls();
- pc.printf("Clear the screen!\n");
+ case CIRCLE_CMD:
+ //pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
+ LCD->circle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3]);
+ idx += 4;
+ break;
+ case FILLED_CIRCLE_CMD:
+ //pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
+ LCD->filled_circle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3]);
+ idx += 4;
break;
- case CIRCLE_CMD:
- //LCD->cls();
- pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
- idx += 4;
+ case TRI_CMD:
+ //pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
+ LCD->triangle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4], buffer[idx+5], buffer[idx+6]);
+ idx += 7;
+ break;
+ case RECT_CMD:
+ LCD->rectangle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+ idx += 5;
+ break;
+ case FILLED_RECT_CMD:
+ LCD->filled_rectangle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+ idx += 5;
+ break;
+ case PIX_CMD:
+ LCD->pixel(buffer[idx], buffer[idx+1], buffer[idx+2]);
+ idx += 3;
break;
default:
pc.printf("UNKNOWN CMD %d: This could get ugly!\n", cmd);
@@ -207,10 +231,10 @@
delete eth;
}
- private:
+ //private:
bool master_slave;
- int buffer[256];
+ int buffer[1024];
int buffer_idx;
TCPSocketServer* server;
