void init_MMA7660FC(void) { int x, y, z; unsigned char val = 0; bt_accelInitFlag = 1; if(!eei2cLockFlag) { leds(0b111111); eei2cLock = locknew(); lockclr(eei2cLock); eei2cLockFlag = 1; } if(!st_eeInitFlag) ee_init(); while(lockset(eei2cLock)); i2c_out(st_eeprom, MMA7660_I2C, MODE, 1, &val, 1); i2c_out(st_eeprom, MMA7660_I2C, INTSU, 1, &val, 1); i2c_out(st_eeprom, MMA7660_I2C, SR, 1, &val, 1); val = 0xC1; i2c_out(st_eeprom, MMA7660_I2C, MODE, 1, &val, 1); i2c_stop(st_eeprom); lockclr(eei2cLock); accels(&x, &y, &z); }
//__attribute__((constructor)) int32_t badge_setup(void) { printf("Start\n"); touch_start(TPCount, TPPins, TPDischarge); if(!eei2cLockFlag) { printf("1\n"); eei2cLock = locknew(); lockclr(eei2cLock); eei2cLockFlag = 1; printf("1\n"); } init_MMA7660FC(); printf("1\n"); if(!st_eeInitFlag) ee_init(); printf("1\n"); cpcog = light_start(); printf("1\n"); cogIRcom = ircom_start(IR_IN, IR_OUT, 2400, 38500); printf("1\n"); screen_init(OLED_CS, OLED_DC, OLED_DAT, OLED_CLK, OLED_RST, SSD1306_SWITCHCAPVCC, TYPE_128X64); printf("1\n"); screen_auto(ON); printf("1\n"); clear(); printf("1\n"); text_size(LARGE); printf("Return\n"); return 0; }
void MessageStart() { lock = locknew(); lockclr(lock); simpleterm_close(); msg_serial = fdserial_open(31, 30, 0, 115200); cogstart(&HandleSerial, NULL, msg_stack, sizeof(msg_stack)); }
int32_t test23::Start(void) { int32_t X; int32_t R = 0; X = locknew(); R = lockclr(X); return R; }
int servo_start(void) // Take cog & start servo process { lockID = locknew(); // Check out a lock if (lockID == -1) return -1; // Return -1 if no locks servo_stop(); // Stop in case cog is running servoCog = cogstart(&servo, NULL, stack, // Launch servo into new cog sizeof(stack)) + 1; return servoCog; // Return cog that was taken }
void bbos() { #ifndef BBOS_CONFIG_SKIP_BANNER_PRINTING //printf("%s", bbos_banner); #endif /* BBOS_CONFIG_SKIP_BANNER_PRINTING */ messaging_lock = locknew(); bb_sio_init(); bbos_init(); }
int32_t screen_start(void) { self = &badgeScreen; int32_t okay = 0; // Start SPI Engine - starts a cog // returns false if no cog available screen_stop(); okay = (self->cog = cognew((int32_t)(&(*(int32_t *)&oleddat[1024])), (int32_t)(&self->command)) + 1); screenLock = locknew(); lockclr(screenLock); return okay; }
void InitI2C() { lock = locknew(); lockclr(lock); i2c_open(&i2c_bus, I2C_SCL, I2C_SDA, 0); }
#include <Arduino.h> #include <stdio.h> #include "Servo.h" #define SERVO_MIN() (MIN_PULSE_WIDTH - this->_min * 4) // minimum value in uS for this servo #define SERVO_MAX() (MAX_PULSE_WIDTH - this->_max * 4) // maximum value in uS for this servo // For LMM cog 160 bytes declared as int // Add enough for stack & calcs (50 bytes declared as int unsigned int stack[(160 + (90 * 4)) / 4]; volatile Servo::Properties Servo::_slots[MAX_SERVOS]; volatile int16_t Servo::_attachedCount = 0; volatile int16_t Servo::_servoCount = 0; volatile unsigned int Servo::_servoCog = 0; volatile unsigned int Servo::_lockID = locknew(); /* Constructor which creates one lock on first construction. * This is not completely thread safe, but these are created * during program setup before backgroup processing starts. */ Servo::Servo() { // Now we're thread safe, so set the lock. while(lockset(Servo::_lockID)); // if we still have free slots. if( Servo::_servoCount < MAX_SERVOS) { // Grab a slot in the properties array. _idx = Servo::_servoCount;
/****************************** start main routine ******************************/ int main(void) { char input_buffer[INPUT_BUFFER]; //buffer for user input waitcnt(500000 + _CNT); //wait until initialization is complete printf("XMMC-cogc demo v%s",VERSION); //display startup message /* start monitoring the real time clock DS3231 */ int cog; rtc_cb.rtc.tdb_lock = locknew(); lockclr(rtc_cb.rtc.tdb_lock); cog = start_rtc(&rtc_cb.rtc); if(cog == -1) { printf("** error attempting to start rtc cog\n cognew returned %i\n\n",cog); return 1; } printf(" DS3231 monitored by code running on cog %i\n",cog); /* set all cogs to not running */ parA.A.cog = -1; parB.B.cog = -1; parC.C.cog = -1; /* loop forever */ while(1) { printf("\nenter command > "); //prompt user fgets(input_buffer,INPUT_BUFFER,stdin); //get a line of input input_buffer[strlen(input_buffer)-1] = '\0'; //get rid of trailing new line character switch(process(input_buffer)) //test input,take appropriate action { case 0: //startA if(start_cogA(&parA.A)== -1) printf(" problem starting cogA\n"); else printf(" cogA started\n"); break; case 1: //startB if(start_cogB(&parB.B)== -1) printf(" problem starting cogB\n"); else printf(" cogB started\n"); break; case 2: //startC if(start_cogC(&parC.C)== -1) printf(" problem starting cogC\n"); else printf(" cogC started\n"); break; case 3: //stopA cogstop(parA.A.cog); printf(" cog A stopped\n"); parA.A.cog = -1; break; case 4: //stopB cogstop(parB.B.cog); printf(" cog B stopped\n"); parB.B.cog = -1; break; case 5: //stopC cogstop(parC.C.cog); printf(" cog C stopped\n"); parC.C.cog = -1; break; case 6: //queryA if(parA.A.cog == -1) printf("cog A is not running\n"); else parA.A.query_flag = 1; break; case 7: //queryB if(parB.B.cog == -1) printf("cog B is not running\n"); else parB.B.query_flag = 1; break; case 8: //queryC if(parC.C.cog == -1) printf("cog C is not running\n"); else parC.C.query_flag = 1; break; case 9: //status status(); break; case 10: //exit printf("exiting program\n"); return 0; case 11: //time printf("%s, %i:%02i:%02i %i/%i/%i\n\n", day_names_long[rtc_cb.rtc.dow-1], rtc_cb.rtc.hour, rtc_cb.rtc.min, rtc_cb.rtc.sec, rtc_cb.rtc.month, rtc_cb.rtc.day, rtc_cb.rtc.year+2000); break; default: printf("<%s> is not a valid command\n",input_buffer); } } return 0; }
int main(void) { static int cog; static char tbuf[_TOKEN_BUFFER]; char c; /************************ initializations ****************************/ sleep(1); //wait for the serial terminal to start /* display system info on serial terminal */ printf("\n*** Pcon %i.%i ***\n\n",_major_version,_minor_version); #if _DRIVEN == _DIOB printf("system is configured to drive a Parallax Digital IO Board\n"); #else printf("system is configured to drive 5 IO pins\n"); #endif /* build file set prefix */ strcat(file_set_prefix,_F_PREFIX); strcat(file_set_prefix,_FILE_SET_ID); printf("file set prefix <%s>\n",file_set_prefix); /* check out the SD card */ if(sd_setup()) { printf("**** sd_setup aborted application ****\n"); return 1; } /* start monitoring the real time clock DS3231 */ rtc_cb.rtc.tdb_lock = locknew(); lockclr(rtc_cb.rtc.tdb_lock); cog = start_rtc(&rtc_cb.rtc); if(cog == -1) { printf("** error attempting to start rtc cog\n cognew returned %i\n\n",cog); return 1; } printf(" DS3231 monitored by code running on cog %i\n",cog); /* setup the dio control block */ dio_cb.dio.tdb_lock = rtc_cb.rtc.tdb_lock; dio_cb.dio.cca_lock = locknew(); lockclr(dio_cb.dio.cca_lock); dio_cb.dio.sch_lock = locknew(); lockclr(dio_cb.dio.sch_lock); dio_cb.dio.update_ptr = &(rtc_cb.rtc.update); dio_cb.dio.td_ptr = &(rtc_cb.rtc.td_buffer); *dio_cb.dio.update_ptr = 0; dio_cb.dio.sch_ptr = bbb; /* start the dio cog */ cog = start_dio(&dio_cb.dio); if(cog == -1) { printf("** error attempting to start dio cog\n cognew returned %i\n\n",cog); return 1; } #if _DRIVEN == _DIOB printf(" DIO Board controlled by code running on cog %i\n",cog); #else printf(" relays controlled by code running on cog %i\n",cog); #endif /* set up unbuffered nonblocking io */ setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); stdin->_flag &= ~_IOCOOKED; stdin->_flag |= _IONONBLOCK; /* initialize fsm(s) parameters */ input_buffer_ptr = input_buffer;//setup so actions routines can mess the buffer cmd_state = 0; //set initial command parser state char_state = 0; //set initial caracter parser state // hold_day = -1; //force schedule load first time through the main loop *input_buffer = ' '; //load a a blank into the buffer to force first prompt process_buffer(); printf("initialization complete\n"); /************************************************************/ /********************** main processing loop ****************/ /************************************************************/ while(1) { /* check for problems */ if(ckeck_abort()) return 1; /* check the token stack */ while(pop_cmd_q(tbuf)) { cmd_fsm(tbuf,&cmd_state); //cycle cmd fsm until queue is empty } /* grab a character from the keyboard if one is present */ c = fgetc(stdin); //nonblocking read /* process input char */ if(c!=_NO_CHAR) { fputc(c, stdout); // echo char if(c==_CR) fputc(_CR, stdout); //second CR after uer input char_fsm(char_type(c),&char_state,&c); //cycle fsm } }; printf("\nnormal termination\n\n"); return 0; }