3 * implementation of safety algorithm's decisions
8 static PicInsn polarityinsn= { { 0x90 }, 0 };
10 #define OPONBIT_BYTE (polarityinsn.d[bytenum])
11 #define OPONBIT(body) do{ \
13 int bytenum, bitnum; \
18 bytenum= (bo + 3) / 7; \
19 bitnum= bytenum ? 6 - (bo + 3) % 7 : 3 - bo; \
25 int picinsn_polarity_testbit(const PicInsn *pi, const SegmentInfo *segi) {
27 return !!(OPONBIT_BYTE & bitv);
31 void actual_inversions_start(void) {
33 polarityinsn.l= (info_maxreverse + 4 + 6) / 7;
34 for (i=1; i<polarityinsn.l-1; i++)
35 polarityinsn.d[i] |= 0x80;
38 void actual_inversions_segment(Segment *seg) {
39 const SegmentInfo *segi= seg->i;
42 Byte *insnbyte= &OPONBIT_BYTE;
43 if (seg->seg_inverted) *insnbyte |= bitv;
44 else *insnbyte &= ~bitv;
48 void actual_inversions_done(void) {
49 serial_transmit(&polarityinsn);