summaryrefslogtreecommitdiffstats
path: root/src/zephyr.c
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2015-11-30 16:01:54 -0500
committerClyne Sullivan <tullivan99@gmail.com>2015-11-30 16:01:54 -0500
commit31912e28d5311a0e8585dc36e2c01cdd0e3315ca (patch)
treee7e03c28fee79ce9c27477701e2d7b4fda98c22b /src/zephyr.c
parent3cba814333829daa431f663cf278315f56b47515 (diff)
libZEPHYR began
Diffstat (limited to 'src/zephyr.c')
-rw-r--r--src/zephyr.c192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/zephyr.c b/src/zephyr.c
new file mode 100644
index 0000000..847f95a
--- /dev/null
+++ b/src/zephyr.c
@@ -0,0 +1,192 @@
+#include <zephyr.h>
+#include <main.h>
+
+#include <string.h>
+
+#ifdef LCD_PORT
+
+static void (*_lcdUpdateFunc)(void *);
+static char lcdBuffer[2][16];
+
+void zLCDHandler(void *unused_param){
+ while(1){
+ lcdSetText(LCD_PORT,1,lcdBuffer[0]);
+ lcdSetText(LCD_PORT,2,lcdBuffer[1]);
+
+ if(_lcdUpdateFunc)
+ _lcdUpdateFunc(unused_param);
+
+ delay(LCD_RATE);
+ }
+}
+
+void zLCDInit(void){
+ lcdInit(LCD_PORT);
+ lcdClear(LCD_PORT);
+ lcdSetBacklight(LCD_PORT,true);
+}
+
+void zLCDStart(void){
+ taskCreate(zLCDHandler,
+ TASK_DEFAULT_STACK_SIZE,
+ NULL,
+ TASK_PRIORITY_DEFAULT
+ );
+
+ memset(&lcdBuffer,0,32);
+ strcpy(lcdBuffer[0]," libZEPHYR v1.0 ");
+}
+
+void zLCDWrite(unsigned char line,const char *text,...){
+ va_list args;
+ char buf[16];
+ va_start(args,text);
+ sprintf(buf,text,args);
+ va_end(args);
+ strcpy(lcdBuffer[line-1],buf);
+}
+
+void zLCDSetUpdateFunc(void (*func)(void *)){
+ _lcdUpdateFunc = func;
+}
+
+void zLCDClearUpdateFunc(void){
+ _lcdUpdateFunc = 0;
+}
+
+#endif // LCD_PORT
+
+#ifdef GYRO_PORT
+
+static Gyro gyro;
+static bool gyroEnabled = false;
+
+void zGyroInit(void){
+ if((gyro=gyroInit(2,0))){
+ gyroEnabled = true;
+ }
+}
+
+#endif // GYRO_PORT
+
+/*
+ * A map of what's plugged into the motor ports.
+ * Expected declarations:
+ *
+ * DRIVEL - Left drive port
+ * DRIVER - Right drive port
+ *
+*/
+
+#define MOTOR_PORT_COUNT 10
+
+#ifdef IME_ENABLE
+#define MOTOR_IME_COUNT 5
+#endif // IME_ENABLE
+
+const char *MOTOR_PORT_MAP[MOTOR_PORT_COUNT] = {
+ "UNUSED1",
+ "UNUSED2",
+ "UNUSED3",
+ "UNUSED4",
+ "INTAKE",
+ "DRIVER",
+ "DRIVEL",
+ "LIFT1",
+ "LIFT2",
+ "ROTATER"
+};
+
+#ifdef IME_ENABLE
+
+const char *MOTOR_IME_MAP[MOTOR_IME_COUNT] = {
+ "DRIVER",
+ "DRIVEL",
+ "ROTATER",
+ "LIFT1",
+ "LIFT2"
+};
+
+static unsigned int imeCount = 0;
+
+void zIMEInit(void){
+ imeCount = imeInitializeAll();
+}
+
+#endif // IME_ENABLE
+
+void zMotorSet(const char *motor,char speed){
+ for(unsigned char i=0;i<MOTOR_PORT_COUNT;i++){
+ if(!strcmp(MOTOR_PORT_MAP[i],motor)){
+ motorSet(i+1,speed);
+ return;
+ }
+ }
+}
+
+char zMotorGet(const char *motor){
+ for(unsigned char i=0;i<MOTOR_PORT_COUNT;i++){
+ if(!strcmp(MOTOR_PORT_MAP[i],motor)){
+ return motorGet(i+1);
+ }
+ }
+ return 0;
+}
+
+#ifdef IME_ENABLE
+
+int zMotorIMEGet(const char *motor){
+ int IMEValue = 0;
+ for(unsigned char i=0;i<imeCount;i++){
+ if(!strcmp(MOTOR_IME_MAP[i],motor)){
+ imeGet(i,&IMEValue);
+ break;
+ }
+ }
+ return IMEValue;
+}
+
+int zMotorIMEGetVelocity(const char *motor){
+ int IMEValue = 0;
+ for(unsigned char i=0;i<imeCount;i++){
+ if(!strcmp(MOTOR_IME_MAP[i],motor)){
+ imeGetVelocity(i,&IMEValue);
+ break;
+ }
+ }
+ return IMEValue;
+}
+
+#endif // IME_ENABLE
+
+void zDriveUpdate(void){
+
+#ifdef DRIVE_NORMAL
+ char s = joystickGetAnalog(DRIVE_JOY,DRIVE_NORMAL);
+
+ APPLY_THRESH(s,DRIVE_THRESHOLD);
+
+ motorSet(DRIVEL,s);
+ motorSet(DRIVER,s);
+
+#else
+
+ char l,r;
+
+ l = joystickGetAnalog(DRIVE_JOY,DRIVE_TANK_LEFT);
+ r = joystickGetAnalog(DRIVE_JOY,DRIVE_TANK_RIGHT);
+
+ APPLY_THRESH(l,DRIVE_THRESHOLD);
+ APPLY_THRESH(r,DRIVE_THRESHOLD);
+
+ zMotorSet("DRIVEL",l);
+ zMotorSet("DRIVER",r);
+
+#endif // DRIVE_NORMAL
+
+}
+
+char zGetDigitalMotorSpeed(unsigned char joy,unsigned char btn_group,unsigned char btn_pos,unsigned char btn_neg,char speed){
+ return joystickGetDigital(joy,btn_group,btn_pos) ? speed :
+ joystickGetDigital(joy,btn_group,btn_neg) ? -speed : 0;
+}