+unsigned char cmddata[CMDDATALEN];
+unsigned char silent=0;
+
+//! Transmit a string.
+void txstring(unsigned char app,
+ unsigned char verb,
+ const char *str){
+ unsigned long len=strlen(str);
+ txhead(app,verb,len);
+ while(len--)
+ serial_tx(*(str++));
+}
+
+/*! \brief Transmit a debug string.
+
+ Transmits a debugging string that is to be printed
+ out of line by the client. This is just for record-keeping;
+ it is not considered a proper reply to a query.
+ */
+void debugstr(const char *str){
+ txstring(0xFF,0xFF,str);
+}
+
+//! brief Debug a hex word string.
+void debughex(u16 v) {
+ unsigned char a[7];
+ a[0]='0'; a[1]='x';
+
+ a[2]=0xf&(v>>12);
+ a[2]+=(a[2]>9)?('a'-10):'0';
+
+ a[3]=0xf&(v>>8);
+ a[3]+=(a[3]>9)?('a'-10):'0';
+
+ a[4]=0xf&(v>>4);
+ a[4]+=(a[4]>9)?('a'-10):'0';
+
+ a[5]=0xf&(v>>0);
+ a[5]+=(a[5]>9)?('a'-10):'0';
+
+ a[6]=0;
+
+ txstring(0xFF,0xFF,a);
+}
+
+/*! \brief Transmit debug bytes.
+
+ Transmits bytes for debugging.
+*/
+void debugbytes(const char *bytes, unsigned int len){
+ u16 i;
+ txhead(0xFF,0xFE,len);
+ for(i=0;i<len;i++)
+ serial_tx(bytes[i]);
+}
+
+
+//! Transmit a header.
+void txhead(unsigned char app,