blob: f329790f76c413c7db62ce1cbd6582307625f5d2 [file] [log] [blame]
Brian Silvermanc58872f2013-12-15 16:27:53 -08001#include "cape/robot.h"
2
3#include "cape/encoder.h"
4#include "cape/analog.h"
5#include "cape/digital.h"
6
Brian Silverman57621112014-01-01 16:08:24 -08007#define CAPTURE_NUM 11
8
9#define CAPTURE(num, np) digital_capture_ ## num ## np
10#define CAPTURE2(num, np) CAPTURE(num, np)
11#define CAPTURE_P CAPTURE2(CAPTURE_NUM, P)
12#define CAPTURE_N CAPTURE2(CAPTURE_NUM, N)
13
14static int32_t posedge_value, negedge_value;
15static uint8_t posedge_count = 0, negedge_count = 0;
16
17void CAPTURE_P(void) {
18 ++posedge_count;
19 posedge_value = encoder_read(1);
20}
21void CAPTURE_N(void) {
22 ++negedge_count;
23 negedge_value = encoder_read(1);
24}
25
Brian Silvermanc58872f2013-12-15 16:27:53 -080026void robot_fill_packet(struct DataStruct *packet) {
Brian Silverman96944812013-12-28 22:33:08 -080027 packet->test.encoders[0] = encoder_read(0);
28 packet->test.encoders[1] = encoder_read(1);
29 packet->test.encoders[2] = encoder_read(2);
30 packet->test.encoders[3] = encoder_read(3);
31 packet->test.encoders[4] = encoder_read(4);
32 packet->test.encoders[5] = encoder_read(5);
33 packet->test.encoders[6] = encoder_read(6);
34 packet->test.encoders[7] = encoder_read(7);
Brian Silvermanc58872f2013-12-15 16:27:53 -080035
36 for (int i = 0; i < 8; ++i) {
Brian Silverman96944812013-12-28 22:33:08 -080037 packet->test.analogs[i] = analog_get(i);
Brian Silvermanc58872f2013-12-15 16:27:53 -080038 }
39
Brian Silverman38188d62014-01-01 13:17:35 -080040 packet->test.digitals = 0;
41 for (int i = 0; i < 12; ++i) {
Brian Silverman57621112014-01-01 16:08:24 -080042 SET_BITS(packet->test.digitals, 1, digital_read(i), i);
Brian Silverman38188d62014-01-01 13:17:35 -080043 }
44
Brian Silverman57621112014-01-01 16:08:24 -080045 digital_capture_disable(CAPTURE_NUM);
46 packet->test.posedge_count = posedge_count;
47 packet->test.posedge_value = posedge_value;
48 packet->test.negedge_count = negedge_count;
49 packet->test.negedge_value = negedge_value;
50 digital_capture_enable(CAPTURE_NUM);
Brian Silvermanc58872f2013-12-15 16:27:53 -080051}