term tut was

This commit is contained in:
Rene Hopf
2013-12-12 16:57:47 +01:00
parent 7640ec681b
commit fc1578b587
3 changed files with 104 additions and 47 deletions
+92 -47
View File
@@ -248,7 +248,8 @@ void ADC_IRQHandler(void)
int main(void)
{
dacpos = 31;
init_pid();
init_pid();
param_init();
setup();
mag_pos = 0;
mot_pos = 0;
@@ -267,59 +268,103 @@ int main(void)
int buffer_pos = 0;
int obuf_pos = 0;
int line_pos = 0;
int i = 0;
int scan = 0;
int histpos = 0;
char buf[STLINKY_BSIZE];
char outbuf[STLINKY_BSIZE];
char history[10][STLINKY_BSIZE];
char backspace[] = {0x8,0x20,0x8};
char ansiright[] = {0x1b,'[','C'};
char ansileft[] = {0x1b,'[','D'};
char ansierase[] = {0x1b,'[','2','K'};
//int ansistate = 0;
enum{init,ansi,bracket,letter}ansistate;
//char line[STLINKY_BSIZE];
char c;
float f;
ansistate = init;
register_float('p',&pid_p);
while(1) // Do not exit
{
if(stlinky_todo(&g_stlinky_term) == 0){
//printf_("soll = %f, ist = %f, error = %f, ctr = %f,current_scale=%f\n", RAD(mot_pos), RAD(res_pos), RAD((mot_pos - res_pos)), RAD(mag_pos),current_scale);
//printf_("res_pos_pos = %f, res_neg_pos = %f\n", res_pos_tmp, res_pos);
//printf_("%i\n",UB_ENCODER_TIM3_ReadPos());
printf_("res_pos = %f\tpos_diff = %f\terror = %f\n", res_pos, minus(res_pos_pos, res_neg_pos), minus(mot_pos, res_pos));
Delay(100000);
}
if(stlinky_avail(&g_stlinky_term) != 0){
stlinky_rx(&g_stlinky_term, buf, STLINKY_BSIZE);
i = 0;
scan = 0;
while(buffer_pos < SCANF_BSIZE - 1 && i < STLINKY_BSIZE && buf[i] != '\0'){
scanf_buffer[buffer_pos] = buf[i];
if(buf[i] == '\n'){
scan = 1;
}
i++;
buffer_pos++;
}
scanf_buffer[buffer_pos] = '\0';
if(scan){
c = ' ';
f = 0;
scanf_("%c = %f \n", &c, &f);
buffer_pos = 0;
if(c == 'p'){
mag_pos += 10 * pi / 180.0;
}
if(c == 'm'){
mag_pos -= 10 * pi / 180.0;
}
}
//scanf_("%c = %f\n", &c, &f);
}
//GPIO_ResetBits(GPIOD,GPIO_Pin_11);
/*
if(stlinky_todo(&g_stlinky_term) == 0){
//stlinky_tx(&g_stlinky_term, buf, sizeof(buf));
printf_("step %f : %i\n", step, i++);
}
*/
if(stlinky_todo(&g_stlinky_term) == 0 && obuf_pos > 0){
stlinky_tx(&g_stlinky_term, outbuf, obuf_pos);
obuf_pos = 0;
}
buffer_pos = stlinky_avail(&g_stlinky_term);
if(buffer_pos > 0){
buffer_pos = stlinky_rx(&g_stlinky_term, buf, STLINKY_BSIZE);
for(i = 0;i<buffer_pos;i++){
if(buf[i] == 127){//backspace
stlinky_tx(&g_stlinky_term, backspace, 3);
line_pos = CLAMP(line_pos-1, 0, SCANF_BSIZE);
}else if(buf[i] == 27){//ANSI control
ansistate = bracket;
}else if(buf[i] == '[' && ansistate == bracket){
ansistate = letter;
}else if(buf[i] == 'A' && ansistate == letter){//up
stlinky_tx(&g_stlinky_term, ansierase, 4);
if(histpos == 0)
histpos = 9;
else
histpos = histpos-1;
printf_("\r%s",history[histpos]);
ansistate = init;
}else if(buf[i] == 'B' && ansistate == letter){//down
stlinky_tx(&g_stlinky_term, ansierase, 4);
histpos = (histpos+1)%10;
printf_("\r%s",history[histpos]);
ansistate = init;
}else if(buf[i] == 'C' && ansistate == letter){//right
stlinky_tx(&g_stlinky_term, ansiright, 3);
line_pos = CLAMP(line_pos+1, 0, SCANF_BSIZE);
ansistate = init;
}else if(buf[i] == 'D' && ansistate == letter){//left
stlinky_tx(&g_stlinky_term, ansileft, 3);
line_pos = CLAMP(line_pos-1, 0, SCANF_BSIZE);
ansistate = init;
}else if(ansistate == letter){
ansistate = init;
}else if(buf[i] == '\t'){
}else if(buf[i] == '\n'){
outbuf[obuf_pos] = buf[i];
obuf_pos++;
scanf_buffer[line_pos+1] = '\n';
scanf_buffer[line_pos+2] = 0;
history[histpos][line_pos] = 0;
//printf_("saved %s at %i",history[histpos],histpos);
histpos = (histpos+1)%10;
//printf_("hier, parsen und so: %s",scanf_buffer);
if(scanf_("%c = %f", &c, &f) == 7){
if(set_float(c,f))
printf_("\nOK");
//printf_("\nsetting %c to %f",c,f);
}else if(scanf_("%c", &c) == 2){
printf_("\n%c: %f",c,get_float(c));
}
line_pos = 0;
}else{
outbuf[obuf_pos] = buf[i];
obuf_pos++;
scanf_buffer[line_pos] = buf[i];
history[histpos][line_pos] = scanf_buffer[line_pos];
line_pos = line_pos = CLAMP(line_pos+1, 0, SCANF_BSIZE);
}
}
}
//if(stlinky_todo(&g_stlinky_term) == 0){
//if(stlinky_avail(&g_stlinky_term) != 0)
//buffer_pos = stlinky_tx(&g_stlinky_term, buf, buffer_pos);
//if(stlinky_todo(&g_stlinky_term) == 0)
//buffer_pos = stlinky_rx(&g_stlinky_term, buf, buffer_pos);
//}else{
//}
//buffer_pos = 0;
/*if(followe){
GPIO_ResetBits(GPIOD,GPIO_Pin_15);//disable
+7
View File
@@ -7,6 +7,10 @@
//
#include "param.h"
void param_init(){
PARAMS.param_count = 0;
}
int register_float(char name, float *f){
if(PARAMS.param_count == MAX_PARAMS){
return(0);
@@ -21,12 +25,14 @@ int register_float(char name, float *f){
PARAMS.names[PARAMS.param_count] = name;
PARAMS.data[PARAMS.param_count] = f;
PARAMS.param_count++;
printf_("\nregister OK:%i",PARAMS.param_count);
return(1);
}
float get_float(char name){
for(int i = 0; i < PARAMS.param_count; i++){
if(PARAMS.names[i] == name){
printf_("\ngot %f for param %i",*PARAMS.data[0],i);
return(*(PARAMS.data[i]));
}
}
@@ -37,6 +43,7 @@ int set_float(char name, float f){
for(int i = 0; i < PARAMS.param_count; i++){
if(PARAMS.names[i] == name){
*(PARAMS.data[i]) = f;
printf_("\n%c set to %f",name,f);
return(1);
}
}
+5
View File
@@ -235,6 +235,11 @@ int vfprintf_(char *buffer, const char* str, va_list arp){
buffer[buffer_pos++] = '\t';
state = 0;
break;
case 'r': // "\t"
buffer[buffer_pos++] = '\r';
state = 0;
break;
case '\'': // "\'"
buffer[buffer_pos++] = '\'';