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);        
}
Beispiel #2
0
//__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;
}
Beispiel #3
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));
}
Beispiel #4
0
int32_t test23::Start(void)
{
  int32_t	X;
  int32_t R = 0;
  X = locknew();
  R = lockclr(X);
  return R;
}
Beispiel #5
0
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
}
Beispiel #6
0
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;
}
Beispiel #8
0
void InitI2C()
{
    lock = locknew();
    lockclr(lock);
    i2c_open(&i2c_bus, I2C_SCL, I2C_SDA, 0);
}
Beispiel #9
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;
Beispiel #10
0
/****************************** 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;
}
Beispiel #11
0
Datei: Pcon.c Projekt: mam1/Pcon
 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;
}