4 * Created on: 2011/02/27
22 void (*write)(char c);
24 char (*read_pol)(void);
28 //
\92Ê
\90M
\82ª
\8aJ
\8en
\82³
\82ê
\82é
\82Æ
\8aÖ
\90\94\82ð
\94²
\82¯
\82Ü
\82·
29 static int xmodem_start_ack()
31 unsigned long cnt = 0;
33 //
\89½
\82©
\92l
\82ª
\93ü
\82é
\82Ü
\82Å
\88ê
\92è
\8aÔ
\8au
\82²
\82Æ
\82ÉNAK
\82ð
\91\97\90M
47 // XMODEM 1
\83u
\83\8d\83b
\83N
\8eó
\90M
48 static int xmodem_read_block(unsigned char block_num_now, char* buff)
50 unsigned char c, block_num_rec, check_sum = 0;
54 //
\83u
\83\8d\83b
\83N
\94Ô
\8d\86\8am
\94F
55 block_num_rec = read();
56 if(block_num_now != block_num_rec)
59 //
\83r
\83b
\83g
\94½
\93]
\82Ì
\83u
\83\8d\83b
\83N
\94Ô
\8d\86\8am
\94F
61 block_num_rec = read();
63 if(block_num_rec != 0xFF)
66 // 128byte
\82Ì
\83f
\81[
\83^
\8eó
\90M
67 for(i = 0; i < XMODEM_BLOCK_SIZE; i++)
74 //
\83`
\83F
\83b
\83N
\83T
\83\80\8am
\94F
85 //
\93]
\91\97\82ª
\8a®
\97¹
\82·
\82é
\82Æ
\93]
\91\97\82µ
\82½
\83u
\83\8d\83b
\83N
\90\94\81B
\8e¸
\94s
\81E
\92\86\92f
\82·
\82é
\82Æ0
\82ð
\95Ô
\82·
86 int xmodem_start(char* buf)
88 unsigned char block_num_now = 1;
99 c = read(); //
\83w
\83b
\83_
\8eó
\90M
103 case XMODEM_SOH: //
\92Ê
\90M
\8aJ
\8en
\81I
105 if(xmodem_read_block(block_num_now, buf))
107 write(XMODEM_NAK); //
\8e¸
\94s
\82ð
\92Ê
\92m
112 buf += XMODEM_BLOCK_SIZE; //
\83o
\83b
\83t
\83@
\82Ì
\83|
\83C
\83\93\83^
\82ð1
\83u
\83\8d\83b
\83N
\90i
\82ß
\82é
113 write(XMODEM_ACK); //
\90¬
\8c÷
\82ð
\92Ê
\92m
\81¨
\8e\9f\82Ì
\83u
\83\8d\83b
\83N
\91\97\90M
\8aJ
\8en
117 case XMODEM_EOT: //
\93]
\91\97\8a®
\97¹
119 return block_num_now;
121 case XMODEM_CAN: //
\92\86\92f
135 void xmodem_init(void (*io_write)(char c), char (*io_read)(void), char (*io_read_pol)(void))
139 read_pol = io_read_pol;
143 *
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
144 *
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
\81¡
148 void test_write(char c)
150 sci_write(SCI_NO_1, c);
156 c = sci_read_byte(SCI_NO_1);
163 c = sci_read_pol(SCI_NO_1);
169 static char buff[512] = {0,};
172 sci_init(SCI_NO_1, BitRate_type_br9600);
173 xmodem_init(test_write, test_read, test_read_pol);
176 for(i = 0; i < 200; i++)
178 sci_write(SCI_NO_1, buff[i]);