added borg time stuff to source, but config doesnt enable it yet

This commit is contained in:
Hans-Gert Dahmen 2011-10-28 18:53:38 +00:00
parent 31e21e170f
commit 2182e45c88
4 changed files with 160 additions and 30 deletions

78
animations/borg_time.c Normal file
View File

@ -0,0 +1,78 @@
/*
* Description: Request time strings from a can-master
* and show them in an animation
* Author: hansi
*/
#include <stdio.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include "../config.h"
#include "../can.h"
#include "../lap.h"
#include "../util.h"
#include "../scrolltext.h"
//address of the time master
#define TIME_MASTER_ADDR 0x00
//update timeout in ms
#define TIME_UPDATE_TIMEOUT 100
//hackhack
extern can_addr myaddr;
//send a time request packet via can
void time_request(void)
{
pdo_message msg;
//source address
msg.addr_src = myaddr;
msg.port_src = PORT_MGT;
//destination address
msg.addr_dst = TIME_MASTER_ADDR;
msg.port_dst = PORT_MGT;
//time request command
msg.cmd = FKT_MGT_TIMEREQUEST;
//set length and transmit
msg.dlc = 1;
can_transmit((can_message *)&msg);
}
//update time via can, possibly blocking
uint8_t time_update(void)
{
uint8_t timeout = TIME_UPDATE_TIMEOUT;
//set "time-has-been-updated" to false
lap_time_update = 0;
//send request
time_request();
//wait some time for a reply in 1ms steps
while((lap_time_update == 0) && (timeout-- > 0))
wait(1);
return lap_time_update;
}
//display the time
void time_anim(void)
{
char timestring[48];
//update time and return if we had no success
if(time_update() == 0)
return;
//convert the time to a string
sprintf_P(timestring, PSTR(">+:p42d50/#%02hi#<;+p42d50/# %02hi#x49y8b255p42d50#:"), lap_time_h, lap_time_m);
//show the time
scrolltext(timestring);
}

19
animations/borg_time.h Normal file
View File

@ -0,0 +1,19 @@
/*
* Description: Request time strings from a can-master
* and show them in an animation
* Author: hansi
*/
#ifndef BORG_TIME_H_
#define BORG_TIME_H_
//send a time request packet via can
void time_request(void);
//update time via can, possibly blocking
uint8_t time_update(void);
//display the time
void time_anim(void);
#endif /* BORG_TIME_H_ */

View File

@ -13,7 +13,13 @@
can_addr myaddr;
extern jmp_buf newmode_jmpbuf;
void bcan_init()
#ifdef LAP_TIME_EXTENSION
//variables to save the last received hours and minutes
//(accessible via lap.h)
uint8_t lap_time_h, lap_time_m, lap_time_update = 0;
#endif
void bcan_init()
{
spi_init();
can_init();
@ -53,6 +59,15 @@ void process_mgt_msg(pdo_message *msg)
rmsg->dlc = 1;
can_transmit((can_message *)rmsg);
break;
#ifdef LAP_TIME_EXTENSION
//if we get a time reply, save it
case FKT_MGT_TIMEREPLY:
lap_time_h = msg->data[0];
lap_time_m = msg->data[1];
lap_time_update = 1;
break;
#endif
}
}
@ -85,27 +100,27 @@ void process_borg_msg(pdo_message *msg)
#ifdef Hansi_hat_gelernt_Werte_vorher_zu_definieren
//========== blinkenstuff
//clear the blinkenbackbuffer to color
case FKT_BLINK_CLEARBUF:
blink_clearbuf(msg->data[0]);
break;
//set auto position increment flag
case FKT_BLINK_SETAUTOPOS:
blink_setautopos(msg->data[0]);
break;
//set the current blinkenbuffer offset position
case FKT_BLINK_SETPOS:
blink_setpos(msg->data[0]);
break;
//puts the current blinkenbuffer to the frontbuffer
case FKT_BLINK_SHOW:
blink_show();
break;
//puts data into the blinkenbuffer
case FKT_BLINK_DATA:
blink_data(msg->data, msg->dlc - 1);
@ -122,10 +137,10 @@ void bcan_process_messages()
if (!msg)
return;
if(msg->addr_dst == myaddr && msg->port_dst == PORT_MGT)
if(msg->addr_dst == myaddr && msg->port_dst == PORT_MGT)
process_mgt_msg(msg);
if(msg->addr_dst == myaddr && msg->port_dst == PORT_BORG)
if(msg->addr_dst == myaddr && msg->port_dst == PORT_BORG)
process_borg_msg(msg);
msg = (pdo_message*) can_get_nb();

View File

@ -8,7 +8,7 @@
#include "animations/programm.h"
#include "animations/matrix.h"
#include "animations/gameoflife.h"
#include "animations/stonefly.h"
#include "animations/stonefly.h"
#include "animations/flyingdots.h"
#include "animations/breakout_demo.h"
#include "animations/ltn_ant.h"
@ -17,6 +17,7 @@
#include "animations/outofspec.h"
#include "animations/fpmath_patterns.h"
#include "animations/mherweg.h"
#include "animations/borg_time.h"
#include "borg_hw/borg_hw.h"
#include "can/borg_can.h"
#include "random/prng.h"
@ -72,13 +73,18 @@ void display_loop(){
case 1:
scrolltext(scrolltext_text);
# ifdef RANDOM_SUPPORT
#ifdef RANDOM_SUPPORT
{
char a[28];
sprintf(a,"</# counter == %lu ", (unsigned long) percnt_get());
scrolltext(a);
}
# endif
#endif
#endif
#ifdef ANIMATION_TIME
time_anim();
#endif
#ifdef ANIMATION_TIME || ANIMATION_SCROLLTEXT
break;
#endif
@ -112,80 +118,92 @@ void display_loop(){
break;
#endif
#ifdef ANIMATION_MATRIX
#ifdef ANIMATION_TIME
case 7:
time_anim();
break;
#endif
#ifdef ANIMATION_MATRIX
case 8:
matrix();
break;
#endif
#ifdef ANIMATION_RANDOM_BRIGHT
case 8:
case 9:
random_bright(30);
break;
#endif
#ifdef ANIMATION_STONEFLY
case 9:
stonefly();
break;
#endif
#ifdef ANIMATION_GAMEOFLIFE
#ifdef ANIMATION_STONEFLY
case 10:
stonefly();
break;
#endif
#ifdef ANIMATION_GAMEOFLIFE
case 11:
gameoflife();
break;
#endif
#ifdef ANIMATION_FLYINGDOTS
case 11:
case 12:
flyingdots();
break;
#endif
#ifdef ANIMATION_BREAKOUT
case 12:
case 13:
breakout_demo();
break;
#endif
#ifdef ANIMATION_MHERWEG
case 13:
case 14:
mherweg();
break;
#endif
#ifdef ANIMATION_TIME
case 15:
time_anim();
break;
#endif
#ifdef ANIMATION_LTN_ANT
case 14:
case 16:
ltn_ant();
break;
#endif
#ifdef ANIMATION_LABORLOGO
case 15:
case 17:
laborlogo();
break;
#endif
#ifdef ANIMATION_AMPHIBIAN
case 16:
case 18:
amphibian();
break;
#endif
#ifdef ANIMATION_LOGO_OOS
case 17:
case 19:
logo_OutOfSpec();
break;
#endif
#ifdef ANIMATION_PLASMA
case 18:
case 20:
plasma();
break;
#endif
#ifdef ANIMATION_PSYCHEDELIC
case 19:
case 21:
psychedelic();
break;
#endif
@ -233,7 +251,7 @@ void display_loop(){
#endif
#ifdef MENU_SUPPORT
case 42:
case 42:
mode = 1;
break;