00001
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include "dsp_debug.h"
00046 #include "dsp_debug_shared.h"
00047
00048 static int dsp_debug_parse_int(char *str)
00049 {
00050 int i = -1, sign = 1;
00051 char c;
00052
00053 if (*str == '-')
00054 {
00055 sign = -1;
00056 str++;
00057 }
00058
00059 while(*str)
00060 {
00061 c = *str++;
00062 if (c < '0' || c > '9')
00063 break;
00064 if (i == -1)
00065 i = 0;
00066 i *= 10;
00067 i += c - '0';
00068 }
00069
00070 return i*sign;
00071 }
00072
00074 void dsp_debug_read(char *str, int size, char end_char)
00075 {
00076 int i = 0;
00077 char c;
00078
00079 while(i < size-1)
00080 {
00081 c = dsp_debug_read_fct();
00082 if (c == end_char)
00083 break;
00084 str[i++] = c;
00085 }
00086 str[i] = '\0';
00087 }
00088
00090 int dsp_debug_read_ui()
00091 {
00092 int i = 0;
00093 char c;
00094
00095 while(1)
00096 {
00097 c = dsp_debug_read_fct();
00098 dsp_debug_buffer[i++] = c;
00099 if (c < '0' || c > '9')
00100 break;
00101 }
00102
00103 return dsp_debug_parse_int(dsp_debug_buffer);
00104 }
00105
00107 int dsp_debug_read_q(int a, int b)
00108 {
00109 int i = 0;
00110 int zeros = 1;
00111 int q_num;
00112 char c;
00113 int integer = 0, decimal = 0, sign = 1;
00114 int _10log10;
00115 char data[32], *pdata;
00116 S64 temp;
00117
00118 while(i < sizeof(data))
00119 {
00120 c = dsp_debug_read_fct();
00121 data[i++] = c;
00122 if ((c < '0' || c > '9') && (c != '.' && c != ',' && c != '-'))
00123 break;
00124 }
00125
00126 pdata = data;
00127 if (*pdata == '-')
00128 {
00129 sign = -1;
00130 pdata++;
00131 }
00132
00133 if ((integer = dsp_debug_parse_int(pdata)) == -1)
00134 integer = 0;
00135
00136
00137 if (integer >= (1 << (a-1)))
00138 {
00139 if (sign == 1)
00140 return DSP_Q_MAX(a, b);
00141 else
00142 return DSP_Q_MIN(a, b);
00143 }
00144
00145
00146 for(i=0; (pdata[i] >= '0' && pdata[i] <= '9') || pdata[i] <= '-'; i++);
00147
00148 if (pdata[i] == '.' || pdata[i] == ',')
00149 {
00150
00151 for(; pdata[i+1] == '0'; i++, zeros *= 10);
00152 if ((decimal = dsp_debug_parse_int(&pdata[i+1])) == -1)
00153 decimal = 0;
00154 }
00155
00156
00157
00158 _10log10 = 1;
00159 while(_10log10 <= decimal)
00160 _10log10 *= 10;
00161 _10log10 *= zeros;
00162
00163 temp = decimal;
00164 temp <<= b;
00165 temp /= _10log10;
00166
00167 q_num = temp + (integer << b);
00168 q_num *= sign;
00169
00170 return q_num;
00171 }