chiark / gitweb /
serial_transmit takes a PicInsn
authorian <ian>
Sat, 4 Jun 2005 10:14:37 +0000 (10:14 +0000)
committerian <ian>
Sat, 4 Jun 2005 10:14:37 +0000 (10:14 +0000)
hostside/commands.c
hostside/common.h
hostside/hostside.h
hostside/main.c
hostside/nmra.c
hostside/output.c

index c80c8458aca82be8960ed0fb7018b60c7fabd3d2..c2e5d240abdde14cecb15ce742f1d433d0f52a23 100644 (file)
@@ -53,7 +53,7 @@ static int cmd_nmra_command(ParseState *ps, RetransmitNode *rn) {
 
   assert(ps->remain);
   switch (ps->remain[0]) {
-  case '_':  ps->remain++; return ps_needhextoend(ps, rn->d, &rn->l);
+  case '_':  ps->remain++; return ps_needhextoend(ps, rn->pi.d, &rn->pi.l);
   case '=':  hex=1;  checksum=1;  break;
   case ':':  hex=1;  checksum=0;  break;
   default:   hex=0;  checksum=1;  break;
@@ -89,7 +89,7 @@ static int cmd_nmra_command(ParseState *ps, RetransmitNode *rn) {
   if (checksum)
     nmra_addchecksum(&nmra);
 
-  nmra_encodeforpic(&nmra, rn->d, &rn->l);
+  nmra_encodeforpic(&nmra, &rn->pi);
   return 1;
 }
   
@@ -134,7 +134,7 @@ static void cmd_nmra(ParseState *ps, const CmdInfo *ci) {
   }
 
   rn= mrn ? &mrn->rn : &rn_buf;
-  rn->l= sizeof(rn->d);
+  rn->pi.l= sizeof(rn->pi.d);
   
   if (!cmd_nmra_command(ps, rn)) {
     if (mrn) { free(mrn->name); free(mrn); }
@@ -144,7 +144,7 @@ static void cmd_nmra(ParseState *ps, const CmdInfo *ci) {
   if (mrn)
     retransmit_queue(&mrn->rn);
   else
-    serial_transmit(rn->d, rn->l);
+    serial_transmit(&rn->pi);
 }
 
 static void cmd_noop(ParseState *ps, const CmdInfo *ci) {
@@ -176,7 +176,7 @@ static void cmd_pic(ParseState *ps, const CmdInfo *ci) {
   if (!ps_neednoargs(ps))
     return;
   enco_pic_anyinsn(&pi, pii, arg);
-  serial_transmit(pi.d, pi.l);
+  serial_transmit(&pi);
 }
 
 const CmdInfo toplevel_cmds[]= {
index 1a008c968d167367a1427e73f97070a5a77df1e4..a1b163dc8e9295e387d197fc2d50f9ee749c9ea9 100644 (file)
@@ -51,8 +51,7 @@ void nmra_parse_encode(Nmra *out, const char *arg, int argl,
   void nmra_problem(NmraParseEncodeCaller *pec, const char *problem);
 
 void nmra_addchecksum(Nmra *packet);
-void nmra_encodeforpic(const Nmra *packet, Byte *picdata, int *lpicdata_r);
-  /* picdata should point to COMMAND_ENCODED_MAX bytes */
+void nmra_encodeforpic(const Nmra *packet, PicInsn *pi_out);
 
 
 #endif /*COMMON_H*/
index 6bb5755642517d754e2df7ab379f56a959bb7001..3216edcba058ba0fbb9d747237c1405fc94ee24c 100644 (file)
@@ -49,7 +49,7 @@ void ooprintf(Selector sel, const char *fmt, ...)
      __attribute__((format(printf,2,3)));
 void oowrite(Selector sel, const char *data, int l);
 
-void serial_transmit(const Byte *command, int length);
+void serial_transmit(const PicInsn *pi);
 
 void output_hex(Selector sel, const char *work,
                const Byte *command, int length);
@@ -115,8 +115,7 @@ extern const CmdInfo toplevel_cmds[]; /* defined in commands.c*/
 
 struct RetransmitNode {
   /* set by caller: */
-  Byte d[COMMAND_ENCODED_MAX];
-  int l;
+  PicInsn pi;
   /* internal: */
 };
 
index ce2b50e9d5110ec6c1bd14d4926a00603ccc316b..7b6a283e40949996138f8b4cfd04073ca66876a8 100644 (file)
@@ -90,12 +90,11 @@ static void xmit_command(void) {
 }
 
 static void xmit_nmra_raw(void) {
-  Byte encoded[COMMAND_ENCODED_MAX];
-  int lencoded;
+  PicInsn pi;
   
   dump("xmit_nmra_raw", buf.d, buf.l);
-  nmra_encodeforpic(&buf, encoded, &lencoded);
-  serial_transmit_now(encoded, lencoded);
+  nmra_encodeforpic(&buf, &pi);
+  serial_transmit_now(pi.d, pi.l);
 }
 
 static void xmit_nmra_bytes(void) {
index 00328709bf4d4c74ee2a45a178ee77c275f18801..be0d38ab9f6b803528bc3a533c5a14a11f73f086 100644 (file)
@@ -7,7 +7,7 @@
 #include "common.h"
 #include "nmra.h"
 
-void nmra_encodeforpic(const Nmra *packet, Byte *encoded, int *lencoded_r) {
+void nmra_encodeforpic(const Nmra *packet, PicInsn *pi) {
   const Byte *bp;
   int length;
   Byte *encp;
@@ -19,7 +19,7 @@ void nmra_encodeforpic(const Nmra *packet, Byte *encoded, int *lencoded_r) {
   
   assert(length > 0);
   assert(length <= NMRA_PACKET_MAX);
-  encp= encoded;
+  encp= pi->d;
   working= 0xfffc;   /* 16-bit temp register.  Top working_qty bits    */
   working_qty= 15;   /*  are some data bits to encode, rest are clear. */
   /* we start with the 14-bit preamble and the packet start bit */
@@ -43,14 +43,14 @@ void nmra_encodeforpic(const Nmra *packet, Byte *encoded, int *lencoded_r) {
        working_qty= 7;
       }
     }
-    assert(encp < encoded + COMMAND_ENCODED_MAX);
+    assert(encp < pi->d + COMMAND_ENCODED_MAX);
     *encp++= (working >> 9) & 0x7f; /* top 7 bits, right-justified */
     working <<= 7;
     working_qty -= 7;
   }
-  assert(encp > encoded);
+  assert(encp > pi->d);
   encp[-1] |= 0x80; /* `end of command' bit */
-  *lencoded_r= encp - encoded;
+  pi->l= encp - pi->d;
 }
 
 void nmra_addchecksum(Nmra *packet) {
index fe0c8b4b7ec0d57d5bf575ee6bb74383be027c8a..3081c0c9c7745d14f9134147f65242002618930a 100644 (file)
@@ -40,7 +40,7 @@ void output_hex(Selector sel, const char *word,
   ooprintf(sel, "\n");
 }
 
-void serial_transmit(const Byte *command, int length) {
-  output_hex('p', "pic-out", command,length);
-  serial_transmit_now(command, length);
+void serial_transmit(const PicInsn *pi) {
+  output_hex('p', "pic-out", pi->d, pi->l);
+  serial_transmit_now(pi->d, pi->l);
 }