firmware  v0.1.2
Chromation Spectrometer Dev-Kit
usb-bridge.c
Go to the documentation of this file.
1 
27 // app libs
28 #include "Example.h"
29 // prj libs
30 #include "BiColorLed.h"
31 #include <stdlib.h> // defines NULL
32 // hardware i/o definitions
33 #include "Hardware.h"
34 // Python-to-Firmware communication status codes
35 #include "StatusCodes.h"
36 #include "UsbCmd.h"
37 #include "Spi.h"
38 #include "SpiMaster.h"
39 
40 static void setup(void);
41 static void loop(void);
42 static void setup_StatusLED(void);
43 int main()
44 {
45  setup();
46  while(1) loop();
47 }
48 void setup(void)
49 {
51  // Setup USB
52  // TODO: clean this into a unit tested UsbInit() in
53  // ./firmware/lib/
54  ClearBit(FtCtrl_port, FtMiso); // FtMiso is an input
55  SetBit(FtCtrl_port, FtMiso); // pull up FtMiso
56  _FtDatabusPinDirection(FtIn); // FtData lines are inputs
57  *FtData_port = 0xFF; // pull up FtData lines
58  ClearBit(FtCtrl_port, FtClock); // drive FtClock low
59  SetBit(FtCtrl_ddr, FtClock); // FtClock is an output
60  SetBit(FtCtrl_port, FtChipSelect); // drive FtChipSelect high
61  SetBit(FtCtrl_ddr, FtChipSelect); // FtChipSelect is an output
62  // Setup SPI
63  SpiMasterInit();
64 }
65 void loop(void)
66 {
67  while (UsbRxbufferIsEmpty()); // loop until cmd received
68  uint8_t cmd = 0; // initialize cmd as "Null"
69  UsbReadByte(&cmd); // read cmd
70  switch(cmd) // look up cmd
71  {
72  /* // Turn status LED red if cmd is not recognized. */
73  /* default: BiColorLedRed(status_led); break; */
74  // default: ReplyCommandInvalid(); break;
75  /* // Null turns status LED green. */
76  /* case 0: NullCommand(); BiColorLedGreen(status_led); break; */
77 
78  // Write ERROR if the cmd is not recognized.
79  default: UsbWriteByte(ERROR); break;
80  case 0: NullCommand(); break;
81  case 1: GetBridgeLED(); break;
82  case 2: SetBridgeLED(); break;
83  case 3: GetSensorLED(); break;
84  case 4: SetSensorLED(); break;
85  case 7: GetSensorConfig(); break;
86  case 8: SetSensorConfig(); break;
87  case 9: GetExposure(); break;
88  case 10: SetExposure(); break;
89  case 11: CaptureFrame(); break;
90  case 12: AutoExposure(); break;
91  case 13: GetAutoExposeConfig(); break;
92  case 14: SetAutoExposeConfig(); break;
93  case 15: GetSensorHash(); break;
94  }
95 }
96 void setup_StatusLED(void)
97 {
99  BiColorLedOn(status_led); // sbi 0x07, 3
100  BiColorLedGreen(status_led); // cbi 0x08, 3
101 }
void BiColorLedGreen(bicolorled_num led)
Definition: BiColorLed.h:35
void BiColorLedOn(bicolorled_num led)
Definition: BiColorLed.h:21
void SpiMasterInit(void)
Definition: SpiMaster.h:55
Spi.h declares SPI hardware types and variables common to the SPI Master and SPI Slave.
See StatusCode.h for context.
void CaptureFrame(void)
Definition: UsbCmd.h:514
void GetSensorConfig(void)
Definition: UsbCmd.h:229
void GetBridgeLED(void)
Definition: UsbCmd.h:53
void GetSensorLED(void)
Definition: UsbCmd.h:124
void SetExposure(void)
Definition: UsbCmd.h:466
void SetBridgeLED(void)
Definition: UsbCmd.h:82
void SetSensorLED(void)
Definition: UsbCmd.h:175
void NullCommand(void)
Definition: UsbCmd.h:50
void SetSensorConfig(void)
Definition: UsbCmd.h:307
void GetExposure(void)
Definition: UsbCmd.h:422
bool UsbRxbufferIsEmpty(void)
Definition: Usb.h:237
uint8_t UsbReadByte(uint8_t *pbyte)
Definition: Usb.h:262
void _FtDatabusPinDirection(uint8_t pin_direction)
Definition: Usb.h:108
static void setup_StatusLED(void)
Definition: usb-bridge.c:96
vis-spi-out.c includes this file to pick up the -Hardware.h headers and AVR macros.