FreeCalypso > hg > freecalypso-reveng
annotate fluid-mnf/target.c @ 408:14302e075f37 default tip
hr-bits: further conditionalize SID-1-diff
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Mon, 22 Jul 2024 10:06:38 +0000 | 
| parents | 37b5f94de802 | 
| children | 
| rev | line source | 
|---|---|
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * FLUID (Flash Loader Utility Independent of Device) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 * Copyright Texas Instruments, 2001. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 * Mads Meisner-Jensen, mmj@ti.com. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 * | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 * Target Connection and Control | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 * | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 * $Id: target.c 1.20 Mon, 21 Oct 2002 18:39:13 +0200 mmj $ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 * | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 11 * This serial interface handling architecture has been majorly redesigned | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 12 * by Mychaela N. Falconia for the present fluid-mnf Linux port. | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 13 * | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 #include "serial.h" | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 #include "fluid.h" | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 #include "trace.h" | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 #include <stdio.h> | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 21 #include <stdlib.h> | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 22 #include <string.h> | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 23 #include <unistd.h> | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 int target_trace(unsigned char ch); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 * Globals | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 #define RECVBUF_SIZE (65536) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 static unsigned char recvbuf[RECVBUF_SIZE]; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 static int recvbuf_put; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 static int recvbuf_get; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 #define recvbuf_size() (recvbuf_put - recvbuf_get + \ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 ((recvbuf_put - recvbuf_get) < 0 ? RECVBUF_SIZE : 0)) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 * Error Functions | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 void error_proto(char ch, char chx) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 char chd, chxd; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 chd = (' ' <= ch && ch < 127 ? ch : '.'); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 chxd = (' ' <= chx && chx < 127 ? chx : '.'); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 flowf(NORMAL, "(protocol error: got '%c' 0x%02X, expected '%c' 0x%02X)\n", | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 chd, ch, chxd, chx); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 main_fatal(E_PROTO_ERROR); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 * Target Dependencies | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 // <clk> is the target's clock frequency | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 int target_uart_baudrate_divider_get(int clk, int bps) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 int divider = clk / bps / 16; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 tr(TrTargetDrv, "target_uart_baudrate_divider_get(%d, %d) %d\n", | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 clk, bps, divider); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 return divider; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 * Target Init and Send | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 static int target_trace_timer; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 void target_recv_reset(void) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 tr(TrTargetDrv, "recv_reset()\n"); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 recvbuf_get = recvbuf_put = 0; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 memset(recvbuf, 0x77, RECVBUF_SIZE); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 serial_recv_reset(); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 | 
| 348 
37b5f94de802
fluid-mnf: sensible target tty specification
 Mychaela Falconia <falcon@freecalypso.org> parents: 
345diff
changeset | 93 int target_driver_init(char *ttyport, int baudrate) | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 { | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 95 int rc; | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 96 | 
| 348 
37b5f94de802
fluid-mnf: sensible target tty specification
 Mychaela Falconia <falcon@freecalypso.org> parents: 
345diff
changeset | 97 rc = serial_init(ttyport, baudrate); | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 98 if (rc < 0) | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 99 return rc; | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 target_recv_reset(); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 103 return 0; | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 int target_driver_baudrate(int baudrate) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 return serial_baudrate_set(baudrate); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 int target_putchar(char ch) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 char trch; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 trch = (ch < ' ' || ch == 127 ? '.' : ch); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 tr(TrPutChar, "s '%c'/0x%02X\n", trch, ch & 0xFF); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 return serial_send(&ch, 1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 int target_send(char *buf, int size) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 tr(TrPutChar, "s (%d bytes)\n", size); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 return serial_send(buf, size); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 * Target Wait and Receive | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 void target_recv_push(char *buf, int size) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 if (size == 0) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 tr(TrDriverGet, " G?"); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 return; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 while (size--) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 recvbuf[recvbuf_put++] = *buf++; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 recvbuf_put &= (RECVBUF_SIZE - 1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 tr(TrDriverGet, " G%d", recvbuf_size()); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 // Wait maximum <timeout> milli-seconds for <size> bytes to arrive. If | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 // <size> is zero, we unconditionally wait for <time_ms> milli-seconds | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 // (quite simply a delay). The transfer time is automatically added to the | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 // total waiting time. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 int target_wait(int size, int timeout) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 { | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 153 char rxbuf[512]; | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 154 int cc; | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 tr(TrTargetWait, "target_wait(%d, %d)\n", size, timeout); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 if (size > 0) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 timeout += serial_transfer_time(size); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 target_trace_timer = timeout; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 if (size == 0) { | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 164 usleep(timeout * 1000); | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 165 return 0; | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 168 while (recvbuf_size() < size) { | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 169 cc = serial_recv(rxbuf, sizeof rxbuf, timeout); | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 170 if (cc < 0) | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 171 return cc; | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 172 if (cc == 0) | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 173 return E_RECV_TIMEOUT; | 
| 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 174 target_recv_push(rxbuf, cc); | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 | 
| 345 
b595ff13547b
fluid-mnf/target.c: ported, passed compilation
 Mychaela Falconia <falcon@freecalypso.org> parents: 
311diff
changeset | 177 return recvbuf_size(); | 
| 311 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 int target_recv(void *outbuf, int size) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 int i, bufsize; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 char *buf = (char *) outbuf; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 bufsize = recvbuf_size(); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 if (bufsize < size) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 size = bufsize; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 for (i = 0; i < size; i++) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 *buf++ = recvbuf[recvbuf_get++]; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 recvbuf_get &= (RECVBUF_SIZE - 1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 tr(TrGetChar, "r (%d bytes)\n", size); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 return size; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 int target_getchar(void) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 int trace_in_progress; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 char ch; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 do { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 ch = recvbuf[recvbuf_get++]; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 recvbuf_get &= (RECVBUF_SIZE - 1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 tr(TrGetChar, "r '%c' %02X\n", | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 (ch >= ' ' && ch <= 126 ? ch : '.'), ch & 0xFF); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 if ((trace_in_progress = target_trace((char) ch)) != 0) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 if (target_wait(1, target_trace_timer) < 1) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 main_fatal(E_RECV_TIMEOUT); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 } while (trace_in_progress); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 return (ch & 0xFF); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 int target_expect_char(char ch, int timeout) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 char mych; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 if (target_wait(1, timeout) < 1) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 flowf(NORMAL, "(Waited for '%c' 0x%02X)\n", ch, ch); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 main_fatal(E_RECV_TIMEOUT); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 225 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 226 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 if ((mych = target_getchar()) != ch) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 error_proto(mych, ch); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 return ch; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 * Target Buffer Put | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 int buf_put1(char *buf, unsigned char data) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 tr(TrPutChar, "buf_put1(0x%02X) '%c'\n", data, data); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 *buf = (data ) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 return 1; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 int buf_put2(char *buf, unsigned short data) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 tr(TrPutChar, "buf_put2(0x%04X)\n", data); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 *buf++ = (data ) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 *buf = (data >> 8) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 return 2; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 int buf_put4(char *buf, unsigned int data) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 tr(TrPutChar, "buf_put4(0x%08X)\n", data); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 *buf++ = (data ) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 *buf++ = (data >> 8) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 *buf++ = (data >> 16) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 *buf = (data >> 24) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 return 4; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 // Put 2-byte integer in network order | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 int buf_put2no(char *buf, unsigned short data) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 tr(TrPutChar, "buf_put2no(0x%04X)\n", data); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 *buf++ = (data >> 8) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 *buf = (data ) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 return 2; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 // Put 4-byte integer in network order | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 int buf_put4no(char *buf, unsigned int data) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 tr(TrPutChar, "buf_put4no(0x%08X)\n", data); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 *buf++ = (data >> 24) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 *buf++ = (data >> 16) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 *buf++ = (data >> 8) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 *buf = (data ) & 0xFF; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 return 4; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 * Special Target Control Functions | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 // Control target power. Works *only* with special cable! If <state> is | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 // non-zero, the power is on. Otherwise, it is off. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 void target_power(char state) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 if (arg_uart_level_convert) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 return; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 if (state) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 serial_rts(0); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 else { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 serial_rts(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 serial_dtr(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 serial_break(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 serial_break(0); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 // Control target reset line. Works *only* with special cable! If <state> | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 // is non-zero, the reset line is asserted. Otherwise, it is negated. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 void target_reset(char state) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 if (arg_uart_level_convert) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 return; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 if (state) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 serial_rts(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 serial_dtr(0); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 serial_rts(0); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 serial_break(0); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 else { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 serial_break(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 serial_rts(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 serial_dtr(1); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 serial_rts(0); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 /****************************************************************************** | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 * Target Trace/Debug Functions | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 ******************************************************************************/ | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 static int target_trace_enable_flag = 0; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 int target_trace_enable(int flag) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 int old = target_trace_enable_flag; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 target_trace_enable_flag = flag; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 if (arg_target_trace_enable) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 flowf(DEBUG, "{%s}", (flag ? "enable" : "disable")); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 return old; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 // Interpret and display target trace message. Return zero if <ch> was not | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 // intercepted. Otherwise, if it was intercepted, return non-zero. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 int target_trace(unsigned char ch) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 int i; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 unsigned int number = 0; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 char buf[80], *p; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 // If target is not supposed to transmit any tracing at this point in | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 // the state machine(s), the flag will be zero and thus we return. | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 if (target_trace_enable_flag && ch == '$') { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 if (target_wait(1, 100) < 0) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 main_fatal(E_RECV_TIMEOUT); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 ch = target_getchar(); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 switch (ch) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 case 'S': | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 p = buf; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 368 while (ch != 0) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 if (target_wait(1, 100) < 0) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 main_fatal(E_RECV_TIMEOUT); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 ch = target_getchar(); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 *p++ = ch; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 *p = 0; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 if (arg_target_trace_enable) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 printf("{'%s'} ", buf); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 break; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 case 'N': | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 for (i = 0; i < 4; i++) { | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 if (target_wait(1, 100) < 0) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 main_fatal(E_RECV_TIMEOUT); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 ch = target_getchar(); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 383 number = (number >> 8) + (ch << 24); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 384 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 if (arg_target_trace_enable) | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 printf("{0x%X/%dd} ", number, number); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 break; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 default: | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 fprintf(stderr, "WARNING: Bad TargetTrace char received! (0x%X)\n", | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 ch & 0xFF); | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 break; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 return 1; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 } | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 return 0; | 
| 
9cecc930d78f
fluid-mnf: original source from TI,
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 } | 
